【实战】Skill也能自己进化了:skill-evolver如何用「训模型」的思路实现AI技能包全自动优化
本文深度解析 skill-evolver 开源项目的核心架构——8阶段进化循环、三层评测流水线、5维AND门控、分层变异策略,以及用自举测试从88.9%跑到100%的完整实验记录。适合正在写Skill/Plugin的AI开发者。
目录
前言
写Skill不难,调Skill要命。
说实话吧,做过AI Agent开发的应该都有体会——写一个能跑的Skill可能半天搞定,但把它调到在各种边界case下都稳定输出、触发率够高、不回归,那可能得一两周。改完prompt发现A好了B坏了,修了B发现C又冒出来了。
这个循环我自己经历过太多次了。
最近在GitHub上看到一个叫 skill-evolver 的项目,作者 FishSerrie,MIT协议开源。核心定位一句话:用训模型的方式训Skill,全自动、零人工。
看完架构设计和自举测试数据后,我觉的这个项目值得认真聊一聊。
一、核心思路:把ML方法论搬到Skill优化
1.1 概念映射
skill-evolver 的设计哲学是把机器学习的核心概念完整映射到Skill优化场景:
| 训模型 | 训 Skill(skill-evolver) |
|---|---|
| Training data | Ground Truth (GT) — evals.json 里的 test cases + assertions |
| Loss function | 8种 assertion 类型 + 5维 AND 门控 |
| 梯度下降/迭代 | 8阶段 loop — search → modify → evaluate → gate → keep/discard → repeat |
| 选 Checkpoint | best_versions/ — 每次 keep 的版本快照 |
| Overfitting 检测 | Holdout split — 迭代期间绝不暴露给 proposer |
| Regression test | Regression split — 防止改好了 A 坏了 B |
| Learning rate | 分层 mutation — description → body → scripts |
| Early stopping | stuck detection + convergence |
这不是那种"AI优化AI"的概念demo。每个环节都有落地实现,跑得通。
1.2 一条命令启动进化
# 核心命令——跑到收敛或达到最大迭代次数
python3 scripts/evolve_loop.py ./my-skill/ --gt ./evals.json --run --max-iterations 20
或者通过 slash command:
/skill-evolver evolve ./my-skill/
你给它一个skill目录和一份GT数据,它自己跑8阶段循环。全程零人工。
二、8阶段进化循环
2.1 完整流程
Phase 0: 准备 → 创建 workspace + 生成评测计划 + 建立基线
Phase 1: 回顾 → 读取记忆(results.tsv + experiments.jsonl + git log)
Phase 2: 构思 → 分析失败模式,决定改什么
Phase 3: 修改 → 对 skill 做一个原子改动
Phase 4: 提交 → Git commit
Phase 5: 验证 → 三层测评流水线(L1/L2/L3)
Phase 6: 门控 → 多维度门控决策:保留/丢弃/回滚
Phase 7: 记录 → 写入实验记忆
Phase 8: 循环 → 继续、升层、或停止
2.2 关键设计点
原子改动原则:Phase 3 每轮只做一个改动,不搞"一次大改"。这跟模型训练里小步迭代的思路一样,出了问题容易定位。
实验记忆:Phase 1 会读取之前所有迭代的结果(results.tsv + experiments.jsonl + git history),避免重复走弯路。这一点很多手工优化都做不到——你还记得上上次改了什么导致回归的吗?
Stuck Detection:连续 N 轮不 keep 就自动升层(从改 description 升级到改 SKILL.md 正文),或者直接 early stopping。不会无限空转。
三、三层评测流水线(核心亮点)
3.1 架构设计
| 层级 | 名称 | 检查内容 | 速度 | 触发条件 |
|---|---|---|---|---|
| L1 | Quick Gate | YAML 语法、SKILL.md 有正文、目录结构、GT 文件结构 | 秒级 | 每轮必跑 |
| L2 | Dev Eval | dev split 所有 case 逐条断言打分(6种程序 + 2种LLM语义) | 分钟级 | 每轮跑 |
| L3 | Strict Eval | holdout split + regression split + 盲评 A/B | ~10分钟 | 条件触发 |
3.2 Fail-fast 原则
这是整个评测体系里我觉得最聪明的设计:
# 伪代码逻辑
if not L1_pass:
git_revert()
return "DISCARD" # L2 根本不跑,烂改动成本压到最低
if L2_pass_rate < threshold:
git_revert()
return "DISCARD"
if should_run_L3(): # 每 N 轮 / dev 超阈值 / 升层前
run_L3()
L1 挂了直接丢掉,L2 根本不跑。这把"烂改动"的计算成本压到了最低。
3.3 8种断言类型
{
"assertions": [
{"type": "contains", "value": "预期文本"},
{"type": "not_contains", "value": "不该出现的"},
{"type": "regex", "value": "\\d{4}-\\d{2}-\\d{2}"},
{"type": "path_hit", "value": "references/api.md"},
{"type": "fact_coverage", "value": "必须覆盖的事实"},
{"type": "script_check", "value": "scripts/check.py"},
{"type": "json_schema", "value": {"type": "object"}},
{"type": "file_exists", "value": "output/result.md"}
]
}
前6种由 Python 程序评分(确定性),后2种中 path_hit 和 fact_coverage 由 LLM 二元分类(BinaryLLMJudge,只答 YES/NO),程序汇总。这个"LLM 二元分类 + 程序算分"的评测哲学挺巧妙的——让LLM做它擅长的语义判断,但不让它做最终评分决策。
四、5维AND门控
4.1 门控逻辑
# evolve_plan.md 中定义
gates:
min_delta: 0.02 # 最小提升幅度
max_regression: 0.05 # 最大回归容忍度
max_tokens: 50000 # 单次评测 token 预算
holdout_floor: 0.60 # holdout 最低分数
五个维度:
- 质量:dev pass_rate 必须提升 ≥ min_delta
- 触发 F1:description 改动后触发准确率不能下降
- 成本:单次评测 token 不能超预算
- 时延:响应时间不能恶化
- 回归:regression split 通过率不能低于基线
AND 逻辑:五个维度全部通过才 KEEP,任一不过就 git revert HEAD --no-edit。
4.2 为什么是 AND 不是加权平均
其实吧这个设计选择很有意思。加权平均的问题是——你质量提升了10%但成本翻了3倍,加权一算可能还是"净正"的。但在工程实践中这种 trade-off 往往不可接受。AND 门控更贴合"上线检查"的逻辑:任一红灯都不放行。
五、分层变异策略
| 层级 | 目标 | 成本 | 示例 |
|---|---|---|---|
| Layer 1 | description 字段 |
低 | 提升触发准确率(F1) |
| Layer 2 | SKILL.md 正文 | 中 | 改进指令、示例、约束 |
| Layer 3 | scripts/ 和 references/ | 高 | 新增脚本、优化协议 |
规则:当前层改不动了(连续 N 轮 stuck)才升级到下一层。单次迭代不允许跨层修改。
这跟调参的经验一样——先调学习率(低成本),调不动了再换 optimizer(中成本),最后才动网络结构(高成本)。别一上来就掀桌子。
六、自举测试:88.9% → 100%
这部分是最硬气的自证。作者用 skill-evolver 迭代 skill-evolver 自身。
6.1 完整迭代记录
| 迭代 | 改动 | 结果 | Delta | 决策 |
|---|---|---|---|---|
| 基线 | — | 88.9%(32/36 断言) | — | — |
| Iter 1 | 添加 skill-creator 安装段落 | 94.4%(34/36) | +5.6% | ✅ KEEP |
| Iter 2 | 添加 eval viewer 步骤 | 97.2%(35/36) | +2.8% | ❌ DISCARD(< min_delta 5%) |
| Iter 3 | bundled 文档对齐 | 100%(36/36) | +5.6% | ✅ KEEP |
关键证据:
- L1 gate 调用了
creator/scripts/quick_validate.py(真用了 Creator) - 评测走
LocalEvaluator._evaluate_assertion()(真用了框架) - Iter 2 真被 discard 并执行了
git revert(真有试错) - 每个 case 写了 trace 文件,Phase 2 cite trace 证据后才提改动(真有诊断)
3轮迭代,2次keep,1次discard。从88.9%到100%。零项目git污染(workspace git隔离)。
七、生态定位与相关项目
7.1 三大支柱
| 支柱 | 来源 | 提供的能力 |
|---|---|---|
| 评测引擎 | skill-creator(Anthropic) | 评测、打分、对比协议 |
| 自主迭代外循环 | AutoResearch(Karpathy) | modify → verify → keep/discard → repeat |
| 失败诊断 | Meta-Harness(Stanford) | 执行轨迹结构化暴露给 proposer |
7.2 与学术界的关系
Sentient 和弗吉尼亚理工发布的 EvoSkill 框架走的是另一条路——从失败中自动发现能力缺口并生成新 Skill。OfficeQA 准确率提升 7.3%,SealQA 提升 12.1%。
两者的区别:
- EvoSkill:偏"从零发现和创建 Skill"
- skill-evolver:偏"优化已有 Skill 到极致"
方向一致,侧重点不同。
7.3 跨平台支持
| 平台 | 状态 |
|---|---|
| Claude Code | ✅ 完整支持(经过自举验证) |
| OpenCode | ✅ 已生成(适配 question 工具) |
| Codex | ✅ 已生成(适配 codex exec) |
⚠️ OpenCode 和 Codex 版本已生成但未经实际测试。
八、安装与快速上手
8.1 前置条件
| 要求 | 必需? | 用途 |
|---|---|---|
| Python 3.10+ | 是 | 运行评测脚本 |
| Git | 是 | workspace 版本控制 |
| skill-creator | 是(硬依赖) | 提供 quick_validate、grader 协议 |
| Claude Code CLI | 语义断言需要 | LLM 二元分类 |
8.2 安装步骤
# 方式 A:作为 Plugin 安装(推荐)
cd ~/.claude/plugins
git clone https://github.com/FishSerrie/skill-evolver.git
# 方式 B:全局 skill 安装
mkdir -p ~/.claude/skills/skill-evolver
cp -R plugin/skills/skill-evolver/* ~/.claude/skills/skill-evolver/
8.3 准备 GT 数据
[
{
"id": 1,
"prompt": "用户输入",
"assertions": [
{"type": "contains", "value": "预期输出", "description": "必须包含X"}
],
"split": "dev"
}
]
8.4 启动进化
/skill-evolver evolve ./my-skill/
就这么简单。跑到收敛它会自己停。
九、踩坑提醒
说几个我看文档过程中注意到的点:
| 坑点 | 描述 | 建议 |
|---|---|---|
| GT 质量 | GT 定义的不好,进化方向就是歪的 | 先花时间写好 GT,垃圾进垃圾出 |
| skill-creator 硬依赖 | 找不到 Creator 就启动报错 | 安装 Evolver 前先装好 Creator |
| holdout 数据量 | holdout split 太少会导致 L3 不稳定 | 建议 dev:holdout:regression ≈ 6:2:2 |
| 跨平台版本 | OpenCode/Codex 版本未经实测 | 生产环境建议先用 Claude Code 版本 |
十、总结
10.1 核心价值
skill-evolver 解决的是 Skill 开发中最痛的环节——调优。人类负责定义"什么叫好"(Ground Truth),机器负责"怎么变好"(进化循环)。
10.2 推荐场景
| 场景 | 推荐度 | 原因 |
|---|---|---|
| 已有 Skill 的持续优化 | ⭐⭐⭐⭐⭐ | 核心场景,架构完整 |
| 新 Skill 的 GT 驱动开发 | ⭐⭐⭐⭐ | 先写 GT,再让 Evolver 补完 |
| Skill A/B 版本对比 | ⭐⭐⭐⭐ | benchmark 模式直接可用 |
| 大规模 Skill 批量优化 | ⭐⭐⭐ | 需要脚本封装循环逻辑 |
10.3 一句话评价
Skill 的持续集成时代来了。CI/CD 不只是给代码用的。
参考资料
- skill-evolver GitHub
- skill-creator (Anthropic)
- AutoResearch (Karpathy)
- EvoSkill 论文 (arXiv:2603.02766)
- Meta-Harness (Stanford)
📢 你在写 Skill 的过程中遇到过哪些调优的坑?有没有用过自动化优化工具?欢迎评论区聊聊。
如果觉得有帮助,欢迎 点赞 👍 收藏 ⭐ 关注,持续输出 AI 实战干货!
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)