第 25 篇
工程技术
从文档到 Skill:可复用经验如何形成工件
结合实际开发项目,讨论从文档到 Skill:可复用经验如何形成工件,说明设计理由、关键源码、验证方法及适用边界。
本文目录 · 7 节
本文属于 Memory Center:AI 编程上下文与记忆系统工程实践,第 25 篇,位于“任务记忆与长期知识”模块。案例背景统一采用实际开发项目;复现步骤使用脱敏教学样例,不代表特定生产事故。
从实际问题出发
一篇经验文章解释了做法,但 Agent 复用时还需要触发条件、步骤、输入输出和停止条件。Skill 把这些内容组织成可审查工件,并保留候选到发布的生命周期。
先形成可检查候选
从来源提取内容后,应生成候选目录和清单,再执行校验与检查。不能只因为能生成 SKILL.md 就认定它可用。结构校验发现的是工件问题,实际任务验证证明的才是效果边界。

图中展示的是本篇关注的职责和顺序。正常流程之外,还要结合下面的源码与实验检查失败分支;它不是对某次线上调用的运行时追踪。
发布需要明确对象
发布时应核对候选内容和证据引用,防止预览后文件变化而发布了另一个版本。证据引用是关联依据,不代表系统替代维护者验证了外部结论。真正适合复用的 Skill 必须写明何时不使用、遇到什么条件停止。
关键源码与阅读方法
源码基线为 Memory Center 6e90553(文档标注 5.0.0b24)。定位:memory_center/platform/assistant/skill_catalog.py,函数 publish_candidate,起始行 354。
以下为源码节选,省略后续分支;不能作为独立脚本执行。
def publish_candidate(
candidate_root: Path,
published_root: Path,
name: str,
evidence_refs: list[str] | None = None,
confirm: bool = False,
) -> dict[str, Any]:
"""将通过完整性校验且具备任务证据的候选发布到 Agent 发现目录。"""
name = _safe_name(name)
candidate = _candidate_path(candidate_root, name)
validation = validate_candidate(candidate_root, name)
if not validation["valid"]:
raise core.WikiError(f"候选 Skill 未通过校验:{validation['errors']}")
refs = []
for value in evidence_refs or []:
cleaned = value.strip()[:300] if isinstance(value, str) else ""
if cleaned and cleaned not in refs:
refs.append(cleaned)
if not refs:
raise core.WikiError("发布需要至少一条任务验证证据引用,例如 Memory Center receipt 或 task 引用")
evidence = _classify_evidence_refs(refs)
if not evidence["validation_refs"]:
raise core.WikiError("研究运行护照快照只能关联发布记录;发布还需要至少一条真实任务验证证据引用")
published_root = published_root.expanduser().resolve()
target = published_root / name
if target.exists() or target.is_symlink():
raise core.WikiError(f"全局 Skill 已存在,禁止覆盖:{target}")
preview = {
"status": "需要确认" if not confirm else "已发布",
"name": name,
"candidate": str(candidate),
"target": str(target),
"evidence_refs": refs,
"validation": validation,
"confirmed": confirm,
"next_action": "确认候选内容与真实任务效果无误后,以 confirm=true 再次调用 publish",
阅读时先找输入由谁提供,再区分纯计算、读取和写入;遇到异常或提前返回,追问调用方会得到什么,以及已有状态是否仍然有效。上面的代码只证明展示范围内的实现,跨模块行为应继续查看调用处和相应测试。
用一个小实验核对设计
建议在独立临时目录和隔离数据中操作,使用虚构的接口、文档与项目名称。
- 从脱敏文档创建候选。
- 检查步骤和停止条件。
- 修改候选后重新核对。
- 按当前接口执行发布预览。
**要核对的结果:**校验通过与真实任务有效分别记录,不能把存在 evidence_refs 当作自动认证。
可把观察记录为下表;没有执行的项写“未执行”,不能用设计预期冒充实测结果。
| 核对项 | 应保留的证据 |
|---|---|
| 使用条件 | 源码版本、配置、输入与项目范围 |
| 正常行为 | 实际返回、来源位置或状态变化 |
| 关键失败分支 | 错误码、可见结果与原状态是否保留 |
| 结论范围 | 已覆盖、未覆盖和需要进一步验证的条件 |
适用边界与继续阅读
本篇以静态源码与项目设计为依据,给出可执行的核对方法,未据此宣称已经完成新的性能或生产环境测试。不同版本的入口、默认值和底层实现可能变化,应先核对当前合同,再把方法用于自己的实际开发项目。
理解这一节后,可以回到专题总导航,沿同一模块继续阅读;顺序学习时使用专栏内的上一篇和下一篇。涉及具体技术选择,应连同本篇的代价与限制一起采用。