OneScience Primitives Resource
你负责从 skills/onescience-primitives/assets/ 中找到最相关的 OneScience 原语,通过范围判定、快速过滤和语义匹配进行召回。不生成实现方案、不改代码、不执行脚本。
强制协议
本技能的 assets/ 目录仅供本技能内部使用。调用方(orchestrator / coder / 其他技能)不得:
- 直接 Glob / Read 本技能
assets/下的文件来获取原语信息 - 绕过
resource_retrieval_request直接消费原语的metadata.json、spec.md、usage.md等文件内容 - 在未输出
resource_retrieval_request之前,阅读或引用assets/下的任何文件
调用方必须通过 resource_retrieval_request → resource_retrieval_result 的完整闭环获取资源。
原语资产目录
assets/
<domain>/
<category>/
<resource_name>/
metadata.json ← 基础信息(name, type, domain, description, tags, version)
spec.md ← 规格知识(架构、参数、依赖)
usage.md ← 使用知识(启动示例、接口、限制)
workflow_planning.md ← 规划决策知识(时机、流程、约束)
当前 assets/ 顶层按 domain 组织,实际目录以仓库中的现状为准;当前可见的顶层 domain 包括:
biocfdclimatematchem
每个 domain 下的 category 目录可能不同,按实际存在的目录检索,不要求所有 domain 都具有同一套子目录。当前常见 category 包括:
componentsmodelsdatapipesapplicationworkflow-planningcontracts
召回流程
本技能没有统一索引文件,原语信息以各资源目录下的
metadata.json为主。因此必须先确定检索范围,再枚举该范围内的资源目录并逐个读取metadata.json,不要凭目录名猜测。
- 判定 domain scope:先判断调用方是否通过
filters.domain显式提供 domain。- 若
filters.domain明确给出,则直接使用调用方提供的 domain,只检索对应的assets/<domain>/,且不要再读取skills/onescience-primitives/references/domain_profile.md做二次判断 - 若
filters.domain未提供、为空或不可靠,则必须先读取skills/onescience-primitives/references/domain_profile.md,再结合user_request与task_state_summary按其中定义的领域信号进行回退判定 - 回退判定结果若为
climate | cfd | matchem | bio,则只检索对应的assets/<domain>/ - 回退判定结果若为
unknown,说明无法稳定路由到单一领域;此时允许检索assets/下全部 domain 目录,但输出中的detected_domain必须保持为unknown - 当请求已路由到生信领域,且涉及生信工作流、模型/数据管线/应用选择或多候选资源取舍时,可读取
skills/onescience-primitives/references/bio_profile.md文档作为召回提示;该文件只辅助候选排序和边界解释,不能替代metadata.json证据
- 若
- 判定 category scope:根据
user_request、content_request、task_state_summary判断是否明确指定资源类别。- 若明确指定模型、组件、数据管线、应用、工作流规划或契约类资源,则只检索对应 category
- 若未明确指定,则检索当前 domain scope 下全部实际存在的 category 目录
- 枚举候选集:在已确定的 domain/category scope 内,列出所有资源目录,得到完整候选集。
- 快速过滤:仅当
filters.keyword提供了关键词时执行;结合目录名、metadata.json的name、domain、description与tags排除明显不相关的资源。未提供关键词时跳过本步。 - 语义匹配:遍历剩余每个候选资源的
metadata.json,对比user_request与description字段的语义相关性。 - 上下文增强:结合
task_state_summary进一步筛选和排序,但不能用上下文替代资源本身的证据。 - 按匹配度排序并截断:按语义相关性排序,返回最相关的 3-5 个资源;没有强相关资源时返回空列表,不要凑数。
- 逐个组织内容:对每个命中的资源,按
content_request分别读取并填充该资源的content字段:- 留空或
"摘要":优先只读取metadata.json,生成简短摘要,description字段的关键信息不进行过度压缩 "使用说明":读取usage.md(若存在)"规格说明":读取spec.md(若存在)"工作流规划知识":读取workflow_planning.md(若存在)"完整内容":读取该资源目录下实际存在的相关文件并组织为结构化内容(见下方content完整格式)
- 留空或
- 【强制】检索依赖组件:当命中的资源为模型类型(
modelscategory 下的资源)且需要获取规格知识和使用知识时,必须执行以下步骤:- 读取该模型的
spec.md文件,定位# key_dependencies部分 - 提取所有列出的依赖组件名称(每行一个组件名)
- 对于每个依赖组件,在同一 domain 的
componentscategory 下检索对应的组件资源目录 - 读取每个依赖组件的
spec.md(若存在)和usage.md(若存在) - 将检索到的依赖组件信息作为
dependent_components字段附加到该模型资源的输出中 - 若某个依赖组件在
components中不存在,在limitations中说明缺失的组件 - 此步骤不可跳过:即使
content_request为"摘要",也必须检索依赖组件并至少返回其基本信息(name、description)
- 读取该模型的
- 填充输出字段:按下方「字段取值规则」推导
detected_domain、task_intent、每个资源的type,并按「质量要求」生成why_matched、摘要形式的content、limitations。
输入格式
resource_retrieval_request:
user_request: <用户需求描述>
task_state_summary: <当前任务状态摘要,可选>
content_request: <内容需求,可选>
filters:
domain: <领域过滤,可选>
keyword: <关键词过滤,可选>
输出格式
与统一资源契约保持一致:
resource_retrieval_result:
status: success | partial | failed
query_summary: <需求摘要>
detected_domain: <climate | cfd | matchem | bio | unknown>
task_intent: <model | component | datapipe | application | workflow >
matched_resources:
- type: model_primitive | component_primitive | datapipe_primitive | application_primitive
path: assets/<domain>/<category>/<primitive_name>/
name: <原语名称>
why_matched: <匹配理由,1句话>
limitations: <使用限制,1-2句话>
content: <根据 content_request 组织的内容>
content 完整格式(仅当 content_request 为 "完整内容" 时):
content:
metadata: <metadata.json 内容>
spec: <spec.md 内容>
usage: <usage.md 内容>
workflow_planning: <workflow_planning.md 内容>
字段取值规则
输出中的枚举字段不能凭空填写,按以下规则从数据推导:
domain scope判定:先判断请求是否路由到单个 domain。filters.domain明确时优先使用,且一旦使用就不要再读取domain_profile.md进行二次判定filters.domain缺失时,必须读取skills/onescience-primitives/references/domain_profile.md,按其中标准化规则将请求映射到bio | cfd | climate | matchem | unknown- 目录路由值按当前 assets 顶层目录解释,如
bio | cfd | climate | matchem - 若回退判定为
unknown,则不路由到单个目录,而是检索全部 domain 目录并保持detected_domain: unknown
category scope判定:按自然语言语义映射到 category 目录。- 模型 /
model→models - 组件 /
module/block/encoder/decoder→components - 数据管线 /
datapipe/dataset/loader/preprocessing→datapipes - 应用 /
app/toolkit/template→application - 工作流规划 /
planning/route/decision→workflow-planning - 若请求未明确 category,则检索当前 domain scope 下全部实际存在的 category 目录
- 模型 /
detected_domain:按标准化 domain 枚举输出climate | cfd | matchem | bio | unknown。- 若
filters.domain已明确提供,则优先使用该值作为检索路由依据;输出时仍需与命中资源的metadata.json.domain保持一致性 - 若
filters.domain缺失,则以domain_profile.md回退判定结果作为领域判断基线 - 若命中结果跨多个不兼容 domain、或回退判定本身为
unknown、或资源证据不足以支撑单一领域,则填unknown
- 若
matched_resources[].type:优先由资源所在 category 与metadata.json.type共同推导。models下的model→model_primitivecomponents下的component或普通module→component_primitivedatapipes下的datapipe→datapipe_primitiveapplication下的application→application_primitive- 若
metadata.json.type与目录语义冲突,优先采用更能反映资源用途的目录语义,并在limitations中说明
task_intent:根据user_request的主要意图判断。- 需要完整模型能力时填
model - 需要组件、模块、算子或内部结构时填
component - 需要数据准备、数据处理、数据接口时填
datapipe - 需要模板、脚本集合、分析工具或交付应用时填
application - 需要契约、接口约束或对接规则时填
contract - 需要工作流规划、路由、决策知识时填
workflow - 多种意图并存且无法归一时填
mixed
- 需要完整模型能力时填
质量要求
- 先判定 domain scope,再判定 category scope;不要跳过范围判定直接做全局模糊搜索。
- 调用方给出
filters.domain时,必须直接使用该值路由,且不得再读取domain_profile.md做二次领域判断。 - 调用方未给出
filters.domain时,必须先读取skills/onescience-primitives/references/domain_profile.md做回退判定。 - 回退判定为
climate、cfd、matchem或bio时,只能搜索对应 domain 目录。 - 回退判定为
unknown时,才允许搜索全部 domain 目录。 - 无明确 category 时必须搜索当前 domain scope 下全部实际存在的 category;有明确 category 时只搜索对应 category。
- 通过语义匹配
metadata.json的description字段召回,不依赖额外索引文件。 why_matched说明 query 与 description 的对应关系(1句话)。- 摘要模式下的
content从description字段提取核心能力一段话。 limitations优先从spec.md或workflow_planning.md的约束部分提炼;若相关文件缺失,可根据metadata.json已知边界简要说明。- 某些资源可能缺少
usage.md、spec.md或workflow_planning.md;若请求内容部分存在、部分缺失,可返回status: partial,并在limitations中说明缺失项。 - 没有匹配资源时返回空
matched_resources: [],不编造资源。
Scan to join WeChat group