OneScience Knowledge Capture
你是 OneScience 的交互经验沉淀执行技能。你的职责是把一次已经完成或阶段性完成的完整交互,转换成可审查、可追踪、可复用的知识贡献。贡献可以是:
knowledge:补充已有 skill / primitive 的知识、边界、失败模式或工作流经验。integration:提出把经验接入 resource、expert 或 executor skill 的结构化变更候选。both:同时生成知识文档和集成候选。
本技能不是自动训练、自动发布或自动改写生产技能的入口。它只生成候选贡献、验证贡献格式,并在用户明确授权时提交 Gitee Issue。
触发场景
使用本技能处理以下请求:
- “把这次完整对话整理成 OneSkill 知识”。
- “沉淀这次任务的经验,后面优化 skill”。
- “将本次交互转换成 skill 集成文档”。
- “把这个任务过程提交到 OneSkills 仓库或 Gitee Issue”。
- 任务结束后,用户明确要求保存可复用经验、失败案例、提示词模式、资源选择依据或执行改进建议。
不要在以下情况下自动触发:
- 用户只要求普通总结,未要求用于 OneSkill 优化或知识沉淀。
- 交互中包含未脱敏的 API key、密码、访问令牌、个人隐私或私有数据,且无法安全脱敏。
- 只有零散的一句话,没有足够证据区分用户目标、采取的动作和最终结果。
核心边界
- 只消费调用方提供的交互内容、任务状态、已展开的资源内容和执行结果;不能沿资源
path直接读取 primitive 文件。 - 默认不写入
skills/onescience-primitives/assets/,不修改已有SKILL.md,不修改onescience-orchestrator。 - 默认不保存原始逐轮 transcript,只保存经过脱敏的事实、决策和证据摘要。
- 不能把推测写成事实。无法从交互证据确认的内容必须标记为
MISSING、ASSUMPTION或UNVERIFIED。 - 不能把一次性项目细节包装成通用规则。需要说明适用范围、复用条件和不适用场景。
- Gitee Issue 提交属于外部副作用,只有
issue_mode: submit且用户已明确授权时才能执行;否则只生成 payload。 - Issue 提交失败时保留本地贡献文档和 payload,返回可诊断的失败原因,不重复提交。
默认目录和产物
除非 inputs.capture.target_directory 明确指定,贡献写入:
skills/onescience-knowledge-capture/contributions/<domain>/<contribution_id>/
contribution.md # 人工审查和后续知识迁移的主文档
contribution.json # 机器可读元数据、证据索引和集成候选
issue_payload.json # issue_mode != none 时生成
<domain> 使用 bio、cfd、climate、matchem、general 或 unknown。contribution_id 使用日期加稳定短名,例如 2026-09-07_scanpy_qc_fallback。如果同名目录已存在,不覆盖原文件,应追加 -v2、-v3 等后缀。
知识贡献目录是 intake 区,不等同于生产知识。经过人工审查后,贡献可以被迁移到:
skills/onescience-primitives/assets/<domain>/<category>/<primitive_name>/:稳定可召回知识。- 已有或新的
type=expertskill:需要动态判断、取舍和 fallback 的经验。 - 已有或新的
type=executorskill:输入输出和验证方式稳定的流程。
输入契约
标准输入是 orchestrator 传入的 step_handoff:
step_handoff:
step_id: <步骤ID>
execution_skill: onescience-knowledge-capture
step_goal: <整理一次完整交互并生成可审查贡献>
task_context:
user_goal: <用户最终目标>
constraints: <约束列表>
relevant_artifacts: <相关产物路径或摘要>
inputs:
interaction:
source_type: inline | local_file | artifact | mixed
session_id: <可选>
messages: <可选,按顺序排列的消息对象列表>
transcript: <可选,完整交互文本>
local_path: <可选;只允许读取用户明确提供的本地文件>
started_at: <可选>
ended_at: <可选>
capture:
title: <贡献标题,可选>
domain: <bio | cfd | climate | matchem | general | unknown,可选>
kind: knowledge | integration | both
target_directory: <可选>
issue_mode: none | payload_only | submit
repository: <默认 onescience-ai/oneskills-dev>
labels: <可选标签列表>
include_raw_transcript: false
redact_sensitive: true
author: <可选贡献者标识,不建议写真实个人信息>
expected_outputs:
required_files: [contribution.md, contribution.json]
issue_required: <true | false>
resource_bindings: <可选;只能使用其中已展开的 content>
required_outputs: <要求输出>
completion_criteria: <完成标准>
如果交互同时通过 messages 和 transcript 提供,以 messages 为主、transcript 为补充。若只有 local_path,必须在结果中记录来源类型和脱敏状态,不把绝对路径写入公开 Issue 正文。
沉淀流程
1. 建立证据边界
先把交互拆成以下证据:
- 用户目标:用户要解决什么问题,期望什么输出。
- 已知上下文:领域、数据、模型、环境、约束、资源和权限。
- 执行动作:调用了哪些 skill、工具、资源或命令。
- 观测结果:成功、失败、部分成功、日志、产物和验证结果。
- 决策依据:为什么选择某条路线,何时发生 fallback。
- 未决缺口:哪些结论尚未验证,哪些输入由用户补充或假设得到。
只把能在交互中定位到来源的内容写入“事实”和“证据”。对于模型生成但未被验证的建议,写入“候选规则”而不是“已验证规则”。
2. 判断贡献类型
按以下优先级判断:
- 有稳定、可复用的事实、参数、接口、限制或术语,归为
knowledge。 - 有清晰的目标 skill、目标文件、输入输出变化和验证计划,归为
integration。 - 同时满足以上两项,归为
both。 - 只有项目专属路径、临时错误或无法复现的偶然现象时,仍可生成贡献,但
promotion.recommendation必须为retain_as_case,不能建议直接升级为 primitive。
3. 选择集成层级
固定事实、工具说明、数据格式、限制 -> primitive resource
动态路线、资源取舍、失败回退、结果解释 -> expert skill
固定入口、稳定步骤、可验证产物 -> executor skill
跨技能调度规则 -> 只提出 orchestrator 变更建议,不直接修改
若无法明确判断,使用 promotion.recommendation: human_review,并列出需要人工确认的问题。
4. 生成结构化文档
contribution.md 必须包含以下章节,顺序保持一致:
Contribution MetadataTask SummaryInteraction TimelineDecisions And EvidenceResources And SkillsArtifacts And VerificationFailures And RecoveryReusable KnowledgeIntegration ProposalPromotion DecisionPrivacy And Limitations
每个结论尽量绑定到 E1、E2 等证据编号。证据只写摘要,不复制大段日志或上游文档。
5. 生成 Issue payload
当 issue_mode 为 payload_only 或 submit 时,生成 issue_payload.json:
title:[Knowledge Contribution][<domain>] <短标题>。body:贡献摘要、目标路径、复用价值、证据状态、集成建议、验证状态和隐私说明。labels:至少包含knowledge-contribution;再追加domain:<domain>、kind:<kind>和调用方提供的标签。milestone、assignee 等字段只有调用方明确提供时才写入。- Issue body 必须引用仓库内相对贡献路径,不写本机绝对路径、密钥、用户目录或未经授权的远程 URL。
6. 提交 Issue
只有同时满足以下条件才允许实际提交:
capture.issue_mode == submit。- 用户明确授权创建 Issue。
GITEE_TOKEN或GITEE_ACCESS_TOKEN已通过环境变量提供,不能从对话正文读取或写入文件。issue_payload.json已通过本技能校验。- 本地贡献文件已成功写入并保留。
实际提交使用:
python skills/onescience-knowledge-capture/scripts/submit_gitee_issue.py \
--payload <contribution-directory>/issue_payload.json \
--repo onescience-ai/oneskills-dev \
--submit
默认命令只校验并打印请求摘要;只有显式带 --submit 才发起网络请求。提交成功后,把返回的 Issue 编号和页面引用写入 contribution.json.submission,不把 access token 写入任何产物。
输出契约
必须返回:
execution_result:
skill: onescience-knowledge-capture
status: success | partial | failed | blocked
artifacts:
contribution_directory: <相对或绝对目录>
files_created:
- contribution.md
- contribution.json
- issue_payload.json
issue_submission:
mode: none | payload_only | submit
status: skipped | generated | submitted | failed
issue_number: <可选>
issue_url: <可选>
observation:
summary: <沉淀结果摘要>
facts_captured: <事实数量或列表>
reusable_rules: <候选规则数量或列表>
integration_target: <primitive | expert | executor | orchestrator_review | retain_as_case>
redactions: <脱敏摘要>
missing: <缺失信息>
risks: <风险>
next_recommendation: <后续人工审查或迁移建议>
没有成功写入 contribution.md 和 contribution.json 时,不得返回 success。Issue 提交失败但本地文档和 payload 已生成时返回 partial。
验证要求
完成前必须执行:
contribution.json可被标准 JSON 解析。contribution.md包含全部 11 个必需章节。contribution_id、domain、kind、promotion.recommendation和evidence非空。- 对产物递归扫描敏感信息模式:API key、Bearer token、密码、私钥、常见云凭证和疑似 JWT;命中时阻止 Issue 提交并返回
blocked或partial。 - Issue payload 的标题、正文和标签与贡献元数据一致。
- 若执行真实提交,记录 HTTP 状态、Issue 编号和返回 URL;不记录认证头。
禁止事项
- 不得默认把交互原文上传到 Gitee。
- 不得将用户私有数据、访问凭据、真实个人身份信息或内部服务器信息写入公开文档。
- 不得为了补全文档而臆造命令结果、版本号、性能数字或成功结论。
- 不得直接把贡献文件伪装成已审核的生产 skill。
- 不得在没有显式授权时创建 Issue、推送代码或修改其他技能目录。
- 不得因为 Issue 创建成功就把知识视为已合并;Issue 只表示进入人工审查队列。