我前阵子在GitHub上开源了一个有点意思的Skill,叫达尔文(darwin-skill)。
它做的事情很单纯:给别的skill打分、提改进方案、改完再打分,分数没涨就回滚。整个流程像生物进化,一代代变异、被选择、淘汰,留下来的都是更强的版本。skill本来是静态文档,加了达尔文之后能自己迭代自己。
上线一个月,跑了40次优化,平均提升13.5分,0次回滚。
成绩不错。但5月22号微软研究院同一天挂了两篇论文,正面解决skill优化这件事。这两篇论文让我意识到达尔文还能做得更严、更强。于是我吸收两篇论文的精华做了一次大升级,这就是达尔文2.0,可能是目前面向个人开发者最完整的skill优化器。
这篇文章想讲清楚三件事:微软两篇论文讲了什么、达尔文2.0吸收了什么、它在什么场景下值得用。
先简单说说1.0为什么管用。
我做skill大半年了。公众号、小红书、视频脚本、配图、调研,各种业务流程都封装成了skill。加上21个人物视角的skill,已经是个小生态。
skill一多人工审稿就崩了。每个skill都通读、找问题、改完再读,人力上不可行。但你又不能放任不管,一个写规则的文档自己都没人盯着,会慢慢漂移。
所以我做了达尔文。核心思路是把skill迭代变成可重复的工程流程:多维度评分标准、每轮只改最低维度、分数没涨自动回滚、写skill的AI和评分的AI分开、低风险改动允许干跑模式。
跑了一个月,平均涨13.5分,0回滚。
但我心里清楚这个0回滚不完全代表算法神准。评分标准定得多严,结果就有多严。我那套8维标准已经算严格了,但还有改进空间。
直到5月22号那两篇论文出现,把方向给我指明了。
5月22号,微软研究院和复旦、上交联合在arXiv挂了两篇论文,互为姊妹篇。
一篇是《From Raw Experience to Skill Consumption: A Systematic Study of Model-Generated Agent Skills》(arXiv 2605.23899,项目代号SkillLens),研究skill应该怎么被评估。
另一篇是《SkillOpt: Executive Strategy for Self-Evolving Agent Skills》(arXiv 2605.23904),研究skill应该怎么被优化。
一前一后,一评一改,刚好把「会进化的skill」这件事从两端封死。我先讲SkillLens这篇,再讲SkillOpt。
1. SkillLens:让AI给skill打分,准确率只有46.4%
SkillLens里有个数据让我后背一凉:让单个AI当评委,给两份skill打分选哪份更好,准确率只有46.4%。
46.4%比扔硬币还差3.6个百分点。这意味着在松散的评分标准下,AI评委的判断基本不可信。你跑出来的优化看起来在涨分,实际上可能只是评委在随机摇骰子。
但论文给了药方。研究团队发现,只要在评分标准里加三个关键维度,准确率能从46.4%升到73.8%
- 失败模式编码(Failure Mechanism Encoding):skill不能只写「正确流程是什么」,必须写清楚「什么情况下会出错、出错了走哪条分支」
- 可执行具体性(Actionable Specificity):「建议」「可以考虑」「根据情况」「灵活把握」「视情况而定」这些话全部不能写。要么明确要么不写
- 高风险行动黑名单(High-Risk Action Blacklist):skill必须有独立的章节告诉模型「绝对不要做什么」
73.8%其实也不算高,每4次决策还是错1次。但相比46.4%是27个百分点的飞跃。
2. SkillOpt:把skill当成神经网络的可训练参数
SkillOpt更狠。它直接说:skill文档应该被当成frozen模型的「外部可训练状态」,像神经网络的权重一样,通过反向传播来优化。
这句话听起来很玄,翻成大白话就是:让模型跑一批真实任务、看哪些skill版本表现更好、保留好的版本、淘汰差的版本。区别在于被「训练」的不是模型权重,是skill文档本身的文字内容。
它的优化循环有四个阶段:
- 跑任务(Rollout):让目标模型用当前skill去跑一批真实任务,生成带分数的轨迹
- 复盘(Reflect):另一个独立的优化器模型分析成功和失败的批次,识别可复用的规律
- 提议改动(Edit):在「文本编辑预算」约束下(控制每轮改多少字),提议skill文档的增/删/改操作
- 验证通过才接受(Validate):只有当留出的测试集分数严格提升,改动才被接受;否则拒绝
最后一步是关键。验证不通过就拒绝写入,这是把神经网络训练里「梯度方向必须降低loss」的原则,搬到了文本空间。
论文测了6个benchmark × 7个模型 × 3个执行环境(直接对话/Codex/Claude Code)共52个组合。据论文测试结果,SkillOpt在所有52个组合里都最强或并列最强。在GPT-5.5上,SkillOpt生成的skill比「没skill」提升23.5分(直接对话)、24.8分(Codex)、19.1分(Claude Code)。
它击败的对手包括人工写的skill、一次性LLM生成的skill,以及TextGrad、GEPA、EvoSkill等之前的prompt优化方法(以上均为论文测试基线)。
读完这篇论文我有两个反应。
第一反应是震撼。「skill像神经网络权重一样可训练」是个深刻的隐喻。它把skill从「文档」重新定义成「外部状态」,把skill优化从「人工调整」变成「可重复、有数学保障的工程流程」。
第二反应是欣慰。SkillOpt的「验证通过才接受」机制,和达尔文1.0的「分数没涨自动回滚」是同一个核心思想:验证不过就拒绝。这件事我和微软同时独立做出来了,只是数学严谨性上对方更扎实。
明白了两篇论文之后,达尔文2.0的升级方向就很清楚:
吸收SkillLens的评分维度,让评估更严格。 对齐SkillOpt的「验证通过才接受」设计,让优化更可靠。 加入SkillOpt没有的human in the loop,让流程在个人开发者场景下可控。
评分标准从8维升级到9维(直接吸收SkillLens的73.8%药方)
- 原本的「错误处理」维度改名叫失败模式编码,要求写出「如果X发生就做Y;否则做Z」的明确分支
- 原本的「明确性」维度改名叫可执行具体性,明文禁止那五个软化措辞,出现三处以上扣三分
- 新增第九维高风险行动黑名单,要求skill必须有独立的「不要做什么」章节
权重做了微调,给新维度让位。
强化验证机制(对齐SkillOpt + 加多评委独立设计)
之前1.0的回滚机制比较简单:总分没涨就回滚。2.0细化成多层验证:
- 多评委独立审查:每轮启动两个独立评委,共识分数才算数(这是达尔文的独立设计。SkillLens论文验证的是单评委+新rubric的73.8%准确率,多评委是额外加固机制,不是论文方法的复述)
- 评委不复用:下一轮启动两个全新评委,避免锚定效应
- 早停机制:分数进入平台期(单轮涨幅<1分)自动停手,避免为凑分而堆冗余
- 干跑模式控制:干跑比例超过30%自动告警,强制走实测验证
加入human in the loop(达尔文区别于SkillOpt的核心)
这是达尔文跟SkillOpt最大的不同,也是个人开发者最需要的能力。
SkillOpt是benchmark-driven的全自动流程。你扔一堆任务和评分函数进去,它跑一晚上吐一个最佳skill出来。这个范式适合企业级、能定义清晰评估函数的场景。
但对个人开发者,benchmark本身就难定义。一个公众号写作skill,你怎么写benchmark?最终评估往往是「我自己读着顺不顺」「读者反应好不好」这种主观维度,没法塞进自动循环里。
所以达尔文2.0把流程切成阶段,每个阶段都有明确的人工卡口:
- 第一阶段基线评估:自动跑评委打分,人工审报告决定改什么
- 第二阶段单维度优化:自动改最低维度,🔴 CHECKPOINT强制暂停等用户确认改动方向
- 第二阶段半测试提示词跑(可选):自动跑实测,人工看测试结果
- 第三阶段回归测试:启动新评委重评,🛑 STOP涨幅低于阈值强制停手
每个🔴/🛑都是显性的人工介入点。流程能自动跑,但关键决策永远交回给人。这避免了「跑了一晚上结果文档面目全非」的悲剧。
引入反例黑名单(论文要求 + 真实踩坑)
新增「反例黑名单」章节,八条来自我跑40次优化攒下来的实战反模式:
- 同一个AI又改又评(SkillLens 46.4%印证)
- 用「git reset --hard」当回滚手段(应该用git revert)
- 为凑分而往文档里塞冗余
- 跳过测试提示词直接评分
- 一轮内改多个维度
- 干跑模式比例超过30%
- 静默跳过异常
- 忽视维度相关簇
论文告诉你反例黑名单很重要,但具体反例必须来自实操。
这是论文给不了你的东西。
升级完之后我得验证它真的更强,不是从一个偏差换到另一个偏差。
我挑了huashu-gpt-image做小白鼠。这是我自己写的一个skill,用来调GPT-image-2生图,368行,日常用得最多。
测试设计的关键是多评委独立审查。启动两个独立的AI评委,它们彼此不知道对方存在,也不知道我接下来要怎么改。
基线共识80.8分。两个评委独立指出了相同的最低维度:失败模式。
按规则每轮只改最低维度,改了四处,新增「失败模式与兜底树」一整章。
文件从368行涨到449行。
启动两个全新评委(不复用之前两个,避免锚定效应)重评。
共识91.5,涨了10.7分。失败模式那一维从6.5飙到10分满分。
有件事我没想到。我只改了失败模式,「工作流」那一维居然从7.5跳到9.0。我没碰这一维啊?
想清楚之后大概懂了。失败模式要求写出「如果X就做Y」的明确分支,写出来之后流程自动变清晰。工作流、检查点、失败模式三维不是独立维度,它们是一簇,改一个会带动相邻的。
这是2.0新发现的规律:维度相关簇。
至于为什么会相关簇,我有几个猜想:可能是评分维度本身设计有重叠;可能是改一处文档带动了周边重构;还可能是评委的心理锚定(看到一处变清晰会顺手给相邻维度调高分)。我没办法分辨,只测了一个skill,数据不够。这条经验已经写进反例黑名单第八条。
继续攻第二低,加了一段「单图工作流」与原有的「批量工作流」对称。再启动两个新评委,共识91.65。
只涨了0.15。早停机制触发,停手。
到这里2.0已经在huashu-gpt-image这个真实skill上证明了+10.85提升,六个独立评委共识。理论上可以收工。
但我有个不太正经的想法:用2.0给达尔文自己打分会怎样。
写规则的工具,被自己写的规则审判。这是另一个独立实验,对象不再是huashu-gpt-image,而是达尔文自己的SKILL.md。
启动两个独立评委,达尔文自己的基线给出86.05(注意这是另一个文件的独立基线,跟前面huashu-gpt-image的80.8没有可比性)。它们不约而同指出三处可以更严:
第一处版本管理疏漏。文档描述还写着「8维评分标准」,正文已经9维。改完版本忘记同步描述。
第二处检查点未显性标记。达尔文自己的第四维明文规定检查点必须显性标记(🔴/STOP/CHECKPOINT),但关键检查点全部只用粗体强调,没有一个🔴/STOP。
第三处软化措辞超标。达尔文第五维明文禁止「建议/可以考虑」等软化措辞。评委在我自己的文档里搜出四处违规。
我自己定的规则,我自己几处地方做得不到位。
这不是马虎,是写规则时的结构性盲区:作者的注意力天然在「新加的规则有没有用」,不在「之前写的内容是否符合新规则」。这种盲区没办法靠「小心一点」避免,因为你看不见自己看不见的东西。
唯一解决办法:让独立评委用你的规则审你。评委不在乎你写的是「自己的工具」还是「别人的工具」,它只按字面执行规则。
这其实是2.0的另一个隐性优势:它对作者一视同仁。
修这三处之后,达尔文自己同步到9维,所有检查点加上🔴/🛑视觉标记,软化措辞硬化。再启动两个新评委重评:86.05→92.05。最后按skill写作最佳实践把详细论文证据下沉到子文件夹,主文档从550行精简到484行,最终92.7。
但写完上面这些之后,我做了第三个独立的小实验:让2.0跑一次huashu-gpt-image的skill文档本身(就是给这篇文章生成6张配图那个)。
注意这跟前面的「拿真实skill来验证2.0」是两件事。前面那次评的是skill里写的工作流和失败模式;这次评的是skill文档自身的写作质量和结构(命中SkillLens论文里说的「文档可读 ≠ 实际有用」)。两次基线、目标、维度完全独立。
理由很实际。写这篇文章时让它生成配图,前两轮连续翻车。第一轮图很丑没风格;第二轮换具名锚定杂志品牌名,模型直接把品牌名画进图里跑偏。第三轮我明确说「用品牌资产作垫图」才一次成功。
事后复盘是skill文档自身的结构问题:没把「品牌资产作垫图」当默认操作,反而埋在fallback树最深处;另外「出版品牌名陷阱」完全没显式警告。
让两组独立评委盲评修改前后:65→88(这是给该skill文档自身写作质量的独立打分,跟前面80.8/91.65是不同维度的实验设置)。
这个递归案例本身就是2.0价值的最好证明。工具不只能优化生成的提示词,还能优化写提示词的方法论本身。
一个会进化的skill,改进了「如何写出会进化的skill」这件事。
证明2.0好用的最直接方式不是讲一两个case,是让它去跑我整个skill库。
过去几天,我用2.0一口气优化了女娲蒸馏出来的所有 perspective skill,加上日常使用的业务 skill,总共近30个。每个都跑两轮独立评委、9维评分、validation-gated回滚。
战果是这样的(摘几个有代表性的):
- steve-jobs-perspective: 64 → 94(+30,单轮搞定)
- huashu-weread-advisor: 80出头 → 91.4
- huashu-gpt-image: 80.8 → 91.65(前文实测)
- darwin-skill: 86.05 → 92.7(自指评估)
- vibe-coding-mastery / x-mastery-mentor / standup-comedy-god: 全部进入90+
平均涨幅 +15分,最猛的steve-jobs-perspective单轮+30分。每个skill的优化都有完整git commit链可回溯,validation没过的改动全部自动revert,human in the loop检查点都跑了一遍。
这件事最让我感慨的不是分数,是规模感。
一个人维护30多个skill,过去靠人审是噩梦,现在2.0跑一晚上全扫一遍,人只需要在每个CHECKPOINT点头或摇头。这就是把杠杆做出来的样子。
跑完之后我有一个直观感受:整个女娲生态的输出质量,可以肉眼感知到提升。我自己用每一个skill的时候都觉得"对,这次它真的更像那个人了""对,这次它真的把流程讲清楚了"。
这是达尔文 1.0 时代我没能做到的事。
这一章我想老实讲清楚,达尔文跟SkillOpt不是替代关系,是分工。
SkillOpt是更系统、更严格的工程方案:全自动benchmark-driven,扔任务进去自己跑出最佳skill,数学严谨性高,52个测试组合52胜,适合企业级、能定义清晰评估函数的场景,适合规模化训练skill、跨模型迁移。
达尔文2.0是面向个人开发者的轻量方案:rubric-driven,按可读的评分标准给文档打分(不需要写benchmark),自动化策略 + human in the loop双引擎,适合主观评估为主的场景(写作、内容、风格类skill),适合独立开发者快速迭代单个skill。
差异化优势具体在五处:
- 不需要benchmark。SkillOpt依赖能跑分的validation set,达尔文用rubric打分,适合没有客观metric的场景
- 强制human in the loop。每个CHECKPOINT等用户确认,关键决策不交给AI
多评委独立审查。每轮启动新评委避免锚定,直接对齐SkillLens的73.8%准确率药方 - 维度相关簇识别。识别「改一维带动一簇」的结构规律,减少冗余优化
- 反例黑名单驱动。8条来自真实踩坑,不是空想
如果你做的是企业级、能定义benchmark的skill优化,用SkillOpt。
如果你做的是个人skill生态,需要快速迭代、可读、可控、有人工卡口,用达尔文2.0。
仓库地址:https://github.com/alchaincyf/darwin-skill (MIT协议开源,提交编号5bfc6b4)
安装很简单:把仓库链接丢给你的agent,让它帮你安装,然后在agent里说「跑达尔文优化XX skill」即可。跑一轮基线评估+一轮优化大约15-30分钟,主要时间在等评委agent返回。
底层方法论参考:
- arXiv 2605.23899《From Raw Experience to Skill Consumption》(项目代号SkillLens),评分标准升级来源
- arXiv 2605.23904《SkillOpt: Executive Strategy for Self-Evolving Agent Skills》,验证机制对齐来源
如果你也在维护一堆skill或者一套prompt,我推荐试一下达尔文2.0。
它最大的价值不是涨那十几分,而是把你的注意力从「自己审自己」转移到「让独立评委审」,并把整个流程做成可重复、可回滚、有人工卡口的工程。
这个转移本身,就是杠杆。
本文转自:优设网 作者:















