用 Darwin Skill 优化已有 Skill:评估 → 棘轮 → 人审
系列回顾:主循环 · Skills
Skill 写完能跑,不等于写得好。常见病是:正向流程写得很满,失败分支没有;「与用户确认」写了,但模型扫不到;禁止项散落全文,关键决策照样越界。
这篇讲怎么用 Darwin Skill(darwin-skill)对已有SKILL.md做结构化优化——以本机优化unified-dev-workflow的实战为例。
为什么不「自己改自己评」
手改 Skill 的陷阱和手改 prompt 一样:
| 做法 | 问题 |
|---|---|
| 改完立刻自评「更好了」 | 同 context 乐观偏差;SkillLens 实证 LLM-as-judge 准确率仅约 46% |
| 只看绝对分涨跌 | 换个 judge 同一份未改稿可晃 ±8 分——大半是换尺,不是真退步 |
| 一轮改三个维度 | 分数升降无法归因 |
Darwin 的对策很简单:
- 9 维 rubric 先做 triage(哪支最弱、先改谁)
- 每轮只改一个维度
- keep/revert 用 paired 比较:同一 judge 一次读改前+改后,多数决;不用绝对分 delta
- 关键节点人审(🔴 CHECKPOINT)
核心理念可以记成一句话:
评估 → 改进 → 实测 / paired → 人类确认 → 保留或回滚
(灵感来自 Karpathy autoresearch;度量从确定性 loss 换成了 LLM judge,所以棘轮必须改成 paired。)
安装与调用
把 Darwin 装到你的 skills 目录(Cursor / Claude Code / 其它兼容 Agent Skills 的 runtime 均可;注意措辞要 runtime 中立,别写成「只给 Claude Code 用」)。
常用话术:
| 你说 | Darwin 做什么 |
|---|---|
评估 xxx skill / /darwin 评测 xxx | Phase 0.5–1:设计测试 prompt + 基线评分,不改文件 |
优化 xxx / 优化所有 skills | 确认后进入 Phase 2 棘轮循环 |
看看 skill 优化历史 | 读 results.tsv |
本机路径示例(按你的安装位置调整):
~/.agents/skills/darwin/SKILL.md # 或 .cursor/skills/darwin-skill/
~/.cursor/skills/<your-skill>/SKILL.md # 被优化的目标
~/.agents/skills/darwin/results.tsv # 实验日志
目标 skill 若不在 git 仓里:用 SKILL.md.bak.YYYYMMDD-HHMM 代替 git revert,一样能棘轮。
流程一张图
Phase 0 定范围、建分支 / 备份、初始化 results.tsv
↓
Phase 0.5 为 skill 设计 2–3 条典型 test prompts → 人确认
↓
Phase 1 9 维基线分(结构主评 + dim8 子 agent / 干跑)→ 人确认
↓
Phase 2 按加权缺口从弱到强:
改 1 维 → commit/备份 → N=3 paired judge → keep | revert
每 skill 结束再人审;触顶或连续 slight 则停
↓
Phase 3 汇总报告(可选成果卡片)
绝对总分只做 triage。 keep/revert 只看 paired 多数决。
9 维 Rubric(记权重,不背细则)
| # | 维度 | 权重 | 优化时常盯什么 |
|---|---|---|---|
| 1 | Frontmatter | 7 | 做什么 + 何时用 + 触发词;禁空话尾巴 |
| 2 | 工作流清晰度 | 12 | 有序号、每步有输入/输出 |
| 3 | 失败模式编码 | 12 | 「触发 / 一线修复 / 仍失败兜底」三段式 |
| 4 | 检查点 | 6 | 必须有 🔴 / STOP / CHECKPOINT 视觉标记 |
| 5 | 可执行具体性 | 18 | 禁「建议/视情况」堆砌 |
| 6 | 资源整合 | 4 | references 路径可达 |
| 7 | 整体架构 | 12 | 少废话、层次清楚 |
| 8 | 实测表现 | 23 | 带 skill vs 不带 skill 跑同一 prompt |
| 9 | 反例黑名单 | 6 | 独立「不要做什么」章,散落「禁止」不够 |
Phase 2 诊断用 加权缺口:
weighted_gap = weight × (10 − score) / 10
先修缺口最大的维。dim2/3/4 是相关簇:修失败分支时,检查点往往顺手变好——但仍建议一轮一维,方便归因。
实战:优化 unified-dev-workflow
对象:~/.cursor/skills/unified-dev-workflow/SKILL.md
用途:OpenSpec + 竖切 issue + TDD 的极简话术工作流(uw 继续 / uw #N / uw 归档…)。
1)先定测试 prompt(Phase 0.5)
没有 test prompts,dim8(权重 23%)就是瞎打分。我们用了三条典型场景:
| id | prompt | 期望 |
|---|---|---|
| 1 | uw 继续 | 读 change/tasks/issues,只做下一步,输出进度块 |
| 2 | uw 给设置页加暗色模式开关 | 只 propose,不写实现,等确认 |
| 3 | uw 归档(从未验收) | 拒绝 archive,拉回阶段 4 |
确认后再评——方向错了,后面全是噪音。
2)基线(Phase 1)
| 总分 | 主要短板 |
|---|---|
| 75.7 | dim3 失败分支弱;dim4 有「确认」无 🔴;dim9 禁止项散落无专章 |
dim8 用子 agent 做 with-skill vs baseline 计划级对比(无真实仓库落代码时标 dry_run):
- 无 skill:新需求常直接写代码;无验收也会归档
- 有 skill:propose 停步、归档门禁清晰
结论:流程骨架已经对,缺的是失败编码、显性人审、反例章。
3)三轮棘轮(Phase 2)
| 轮次 | 改什么 | 内容 | paired |
|---|---|---|---|
| R1 | dim3 | 新增「失败与恢复」:9 行触发 / 一线 / 兜底 | 3-0 better |
| R2 | dim4 | propose / 拆票 / 多 change / 验收处加 🔴 CHECKPOINT · 🛑 STOP | 3-0 better |
| R3 | dim9 | 独立「不要做什么」黑名单 9 条 | keep |
约束:不改核心用途、不引入新依赖、体积不超过原稿 150%(本例约 1.46×)。
无 git 时每轮先:
SKILL.md.bak.YYYYMMDD-HHMM
paired 判 worse 就从备份还原;判 better 就保留。
4)收工后技能长什么样
铁律
↓
失败与恢复(三段式表) ← R1
↓
五阶段 + 🔴 CHECKPOINT ← R2
↓
交付检查
↓
不要做什么(反例黑名单) ← R3
日志写在 Darwin 的 results.tsv,便于以后复盘。
优化完对使用者的好处
Skill 作者改的是文档;使用者感到的是 Agent 行为:
- 少假成功 — push/gh/validate 失败有兜底,不再静默勾 task、关 issue
- 关键步会停 — 未确认不写实现、不拆错票、不偷偷 archive
- 坏习惯可对照 — 「本地绿就关票」「无验收就归档」写在黑名单里,Agent 更容易扫到
- 调用方式不变 — 仍说
uw 继续;变稳的是执行纪律,不是让用户背长模板
这才是 Darwin 相对「润色文案」的价值:改可执行约束,而不只是写得更像好文档。
操作清单(可复制)
1. /darwin 评测 <skill名>
2. 确认 test-prompts(2–3 条 happy + 一门禁场景)
3. 看基线评分卡 → 记下加权缺口最大维
4. 回复「优化」进入 Phase 2
5. 每轮只改一维 → 等 paired 多数决 → 人审 OK 再下一轮
6. MAX_ROUNDS(默认 3)或连续 slight → 收工
7. 看 diff / bak / results.tsv,决定是否留用
高杠杆改法(来自 Darwin 实战 HL):
- HL-1:检查点加 🔴 / 🛑,别只写「必须确认」
- HL-2:失败表用「触发 / 一线 / 兜底」三段,别只写症状
- HL-4:连续两轮只是 slight/tie → 见好就收,别硬凑轮次加废话
反模式(Darwin 自己的黑名单):
- 同 session 自评自改当 keep 依据
- 用绝对分涨跌决定 revert
git reset --hard回滚(应用revert或文件备份)- dry_run 比例过高还宣称「实测提升」
和「手写一版更好的 Skill」差在哪
| 手改 | Darwin | |
|---|---|---|
| 改什么 | 凭感觉 | 按加权缺口 + 一轮一维 |
| 怎么判更好 | 自觉 / 绝对分 | paired 多数决 + 人审 |
| 失败与人审 | 容易漏 | rubric 强制 dim3 / dim4 / dim9 |
| 可回滚 | 看心情 | bak / git 棘轮 |
手改适合从零写;Darwin 适合已有 Skill 要稳态变好——尤其是「能跑但偶尔越界」的那种。
小结
- 先评再改:test prompts → 9 维基线 → 人确认
- 绝对分只排序;paired 才 keep/revert
- 优先补失败分支、显性检查点、反例专章
- 每轮一维、控制体积、保留备份
- 最终标准是 Agent 执行时更守规矩,不是 Markdown 更长
下一步:对你仓库里最常用的那支 Skill 跑一遍「仅评估」;分数卡出来后,再决定要不要进优化循环。
参考
- Darwin Skill:https://github.com/alchaincyf/darwin-skill
- SkillLens(arXiv 2605.23899)
- SkillOpt(arXiv 2605.23904)
- 本例目标 skill:
~/.cursor/skills/unified-dev-workflow/SKILL.md
更多推荐



所有评论(0)