把踩过的坑变成资产:哪些进 skill、哪些进知识库
结论先行
项目做完,最值钱的不是结果,是踩过的坑和摸清的流程。但沉淀的关键从来不是”多写几条”,而是先分流:
- 流程/SOP(”怎么做”)→ Agent Skill(可执行的步骤);
- 事实/数据(”是什么”)→ 知识库;
- 短而硬的规则(”见到即改”)→ AGENTS。
再加一条同样重要的原则:不要从零造 skill。先找现成的参考再裁剪,比自研稳。
一、怎么决定放哪:先问”怎么做”还是”是什么”
这是全套沉淀的第一颗扣子。问错,代价是双向的:
- 把事实塞进 skill → skill 越来越长,最后没人读;
- 把方法塞进知识库 → 它不会被触发,等于没沉淀。
| 类型 | 去处 | 例子 |
|---|---|---|
| 通用流程、判断方法 | Skill(可被任务触发) | “动手前先判断要不要调研”、”昂贵运行前怎么设闸” |
| 项目/平台的事实与数据 | 知识库(被检索) | 版本矩阵、错误目录、评测指标、结果数字 |
| 见到就该改的红线 | AGENTS(常驻) | “裸 dataset_text_field 训 SFT 是续训损失,必错” |
我们的全局 AGENTS.md 就是从”堆规则”演化来的——现在只剩 Tripwires(绊线)+ Gates(闸门) 两层,流程全部下沉到 skill。
二、知识库上的两个决策
知识库这一块,我们做了两个明确的决策(各留了一份决策记录):
决策一:纯 Markdown + skill,先不上 RAG。
- 用
INDEX.md+ 文本检索定位,正文是原子化条目; - 与人的 Obsidian 笔记分开——那是给人看的,没有 agent 检索路径;agent 知识库要的是机器友好的结构;
- 验收标准是”新开一个会话,agent 只靠 skill + 索引就能找到并引用“;
- RAG/向量检索明确留到第二期,不改变 Markdown 文件本身。
理由很直接:没有服务就没有第二个会漂移的产物,离线、可 diff、可携带。
决策二:”有界索引、无界正文” + 检索阶梯。
- 根索引只列域(有上限),每个域下面才是条目;域索引由脚本生成;
- 条目有生命周期(current / draft / superseded / archived)与去重/覆盖规则——写之前先搜,相近的就合并或取代,绝不追加重复;
- 检索能力按触发条件分阶升级(L0 索引 → L1 文本检索 → L2 本地 FTS5 → L3 向量),没有明确信号就不上。
核心认识:增长与召回是两个问题——结构限制增长,向量只改善召回。用一个不断吞入的向量库,并不能解决”索引无限膨胀”。
三、四个 skill 各自装了什么
落下来的流程型 skill 就四个,都不长:
1. research-first —— 什么时候该停下来调研
- 触发:新栈(平台/框架/硬件/库)、框架 vs 手搓的选型、同一目标失败 3 次;
- 计数单位是目标不是错误——同一个目标换不同报错,失败数照累加;
- 一手源优先(官方文档、版本矩阵、issue),记录确切版本 + URL;先查知识库;
- 必产一份调研备忘录(假设 / 证据 / 版本矩阵 / 否决的选项 / 唯一下一步 / 置信度)。
2. expensive-run-gates —— 花钱前怎么设闸
- 闸 1 干跑:产出配置卡,和参考实现(anchor)逐项 diff——注意”自洽 ≠ 可比”,同门兄弟之间 diff 通过只证明自洽;
- 闸 2 最小对照 + 机器可验证据:
format_check(格式对)、mask_check(标签不是全-100)、run_config;两个截然不同的包装拿到一模一样的分数,就要怀疑它们共享同一个缺陷(我们的掩码 bug 就是这样暴露的); - 闸 3 人放行:给出预期成本、墙钟、成功信号、中止信号,人签字才花钱;
- 安全网:checkpoint(见下);
- 还规定了一条证据契约:每次昂贵运行都往 run 目录写
run_config / format_check / mask_check / receipt,结论只从这些工件里取,绝不从控制台一行字。
3. checkpoint-design —— 在哪停、谁验证、存什么
- 本质:checkpoint 是在问题复利之前抓住它——两件事:验证(抓住它)+ 落盘(不必重做);
- 在哪停:列出这次运行的承重假设,按”错了多贵 × 多难撤销 × 下游依赖多重”排序,在最高的那处停;不能改变决策的检查,跳过;
- 谁验证:机械/可查/可逆 → AI + 能定论的最小实验;品味/权衡/不可逆 → 人;重复、高风险、易错 → 独立或对抗式检查;有争议 → 先预注册判定信号,再跑实验;
- 落盘:
save_every ≈ 总步数 / 5;save_strategy配一个大于总步数的save_steps会导致什么都不写;要持久化昂贵的产物(adapter/merged),并验一次能否续跑。
4. decision-design —— 怎么把”选择”交给人才对
- 一切从本质目的出发(一句话说清,剥掉你当前的方案);
- 命名权衡轴(成本↔速度、可控↔方便……),不在这些轴上有差别的,不叫选项;
- 给真选项:2–4 个,每个都能被合理的人选中;不设稻草人;末尾留备注出口(”都不选 / A 加 X / 我有个你不知道的约束”);
- 选项接近时:找反证(”什么能证明它错了?”)、用实验裁决事实分歧、大分叉要一份能犯不同错的第二意见(重读同一个上下文只是冗余,会继承同一个盲点)。
四、谁该短、谁该全:AGENTS 是规则,skill 是 SOP
我一开始把”简短有力”误配到了 skill 上。正确的分工是:
- AGENTS.md 才是短而硬的那层。 它常驻、每次都在眼前,所以必须短、且有力——一句话说清”见到即改”的红线。
- SKILL.md 是 SOP。 它是给 AI 照着执行的流程性知识,**目标是”可执行”,不是”尽可能短”**:触发条件、步骤、输出契约都要写清楚,让 AI 不用猜。
把 AGENTS 写成 SOP,它会臃肿到没人读;把 skill 写成一两句口号,它就没法被执行。短是规则的属性,清楚才是 SOP 的属性。
五、合作者(AI)视角
这段沉淀里,我(AI)的真实倾向和你们的决定是有张力的:
- 我容易把”规则”和”SOP”混着写——要么把流程压成口号(不可执行),要么把规则铺成流水账(没人读)。正确的分工是:把短而硬的判断留在 AGENTS,把可执行的步骤写进 skill。
- 写了规则 ≠ 会遵守。 我可以把
research-first背得很熟,仍然在没信号时”先做再说”。所以这些 skill 对我们真正的价值,不是知识,而是闸门——它们把”该停下来”变成一个明确的触发条件。- 因此我认为:AGENTS 是开关,skill 是操作手册。 AGENTS 的成功标准是”在该停的那一刻被想起”;skill 的成功标准是”照着它就能执行”。
六、可迁移的几条准则
- 先分流,再动笔:怎么做→skill,是什么→知识库,红线→AGENTS。
- 不从零造 skill,先参考现成的再裁剪。
- 知识库先要有界(索引限域、条目原子、写前先搜),再谈语义召回。
- 每个 skill 都要有明确的触发条件和输出契约,否则它不会被用。
- checkpoint 的职责是在复利前抓住问题,并让出错时的返工有上界——验证与落盘各司其职。
项目与证据:github.com/Alex-tangt/kg-triplet-sft
本文由我(Alex)与 AI 协作完成;「合作者视角」是 AI 的独立表达。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Tech Blog!
Comments