AriesHarnessDev
一个 harness 如何用八次发布完成自我引导
一句话主旨: 花三分钟读完的人,将会理解为什么最该先建的,是”可度量的自我改进”这个元能力——因为一旦它存在,之后的每一个能力(包括用来发布本文的那个)都会建得更快,并自带约束。
钩子
多数团队先建功能,再后悔没有一个办法确认功能到底好不好。我们用了一整天,反过来做:先建”改进循环”,再让之后的每一个能力——包括我此刻用来写下这句话的那个技能——都成为这个循环的产物。 一天之内八次发布,每一次都用上一次建出来的东西,最后以”循环写一篇关于它自己的博客”收尾。这是它真实的样子,以及为什么顺序比任何一个单独的功能都重要。
问题
我们有一套 18 个技能、40 项记分卡指标、带基准测试的编码 Agent harness。它一路飘绿,可与此同时:根文档里有 61 条失效的绝对路径和 90 个失效链接;11 份运行报告里只有 4 份可追溯;“最小检查点契约”由 0 项检查来保证。
模式总是一样:写得很强的契约,配着零执行。 更深的问题是:我们没有一个可复用的办法去发现并修复这类缺口。每一个缺口,都得从零重新摸索一遍”审查—修复—验证”的动作。
方法
我们没有先建功能。我们先建了一个五步循环,然后把它对准最坏的地方跑:
- Review(审查) 目标端到端;列出带证据的发现。
- 为每个发现定义一个行为型指标(在夹具上跑真实工具,断言它能检测到问题)。
- 建一个小型 eval 脚本,并记录基线。
- Strengthen(强化),用最能推动指标的最小改动。
- 再测,然后把指标接进发布记分卡,让成果不会再悄悄退回。
然后是让它”自我引导”的那一步:把循环跑在循环自己身上。
- 第 .4 次发布——循环变成一项资产。 我们把这套 routine 蒸馏成
strengthening-cycle技能,并用它自己的 eval 给”自我改进能力”打分(eval-self-evolution.py:2/8 → 8/8)。改进方法本身,成了一个能改进自己的持久之物。 - 第 .6 次发布——循环审计它自己的纪律。 循环发现:没有人在会话结束时留下总结记录。于是它加了一道”新鲜度”闸门,任何跳过这一步的会话都会变红。方法修好了自己执行里的一个缺口。
- 第 .7–.8 次发布——循环产出一项”分享”能力。 同样的 review-eval-strengthen 动作,建出了
blog-distill——一个把开发工作蒸馏成社区文章的技能,并由它自己的结构性 eval 约束。 - 本文——循环写关于它自己。
blog-distill正在蒸馏”建造 blog-distill 与自我改进”的故事。递归就此闭合。
我们从编译器设计那里偷来一条检验:如果一个方法不能改进它自己,它就还不够通用。 每次我们把它对准它自己的产物,它都找到了真实的东西(一道失效的闸门、一个缺失的收尾动作、一个没人管的模板)。
证据
八次预览发布,每一次都在真实产物上有可度量的前后对比:
| 发布 | 做了什么 | 自我引导的一步 | 度量变化 |
|---|---|---|---|
| .2 | 文档漂移 | 在做事中学会循环 | 90 个失效链接 → 0 |
| .3 | longrun | 把循环用到一个层上 | eval 1/8 → 8/8 |
| .4 | self-evolution | 把循环跑在它自己身上 | 能力 eval 2/8 → 8/8 |
| .5 | 可观测性 | 证明它能泛化 | 合规率 0.36 → 1.0 |
| .6 | 收尾总结 | 循环修好自己的缺口 | 新鲜度闸门现在强制执行它 |
| .7 | blog-distill | 循环建出一个分享技能 | 新技能 + eval 4/4 |
| .8 | 中文支持 | 由它自己的 eval 约束 | 80 个测试,双语契约 |
| (本文) | 这篇文章 | 技能写关于它自己 | 两种语言都过契约检查 |
累计:记分卡 40 → 54 项指标,单元测试 0 → 80,技能 18 → 19;这个看板再也无法在某一层坏掉时还报绿——因为每一层现在都拥有能把自己暴露出来的指标。
要点
- 先建改进循环,再建功能。 最该先度量的,是你”改进”这件事本身的能力。之后的一切都会复利增长。
- 递归是通用性的试金石。 如果你的方法不能被用到它自己身上,它就是一次性小聪明,不是方法。我们只有在循环改进了循环之后,才信任它。
- 战果不接进闸门就不算数。 “我们现在检查这个”只是愿望;记分卡指标 + 单元测试才是保证。上面的每一项战果都接了闸门,不会悄悄退回。
- 行为型指标胜过结构型指标。 “校验器会不会标记一个坏夹具”比”函数存不存在”有价值得多。
- 让方法去建下一个方法。 blog-distill 不是副业;它是”分享”成为目标后,自我进化循环自然而然的产物。
- 元能力才是杠杆。 第 7 次发布的成本远低于第 2 次,因为循环、eval、闸门、模板都已经存在了。
来源与可复现性
开放仓库:github.com/agilewayai/aries-harness-skills。循环记录在 skills/aries-harness-self-evolution/references/strengthening-cycle.md。产出本文的 blog-distill 技能(及其双语契约检查器)在 skills/aries-harness-blog-distill/。运行任意一个 eval-*.py 即可重新得出分数;运行发布记分卡即可一次看到全部。八次发布的 commit 在 master 上,从 d41cedf 到 753c7d6。
我们尚未解决的问题
这个循环度量的是机制强度,而不是机制本身对不对——满分 eval 只说明该层遵守了它的契约,不代表那个契约是正确的。行为型指标也需要用心设计;做得潦草就会变成虚荣指标,所以”如果它没法在一个真实夹具上失败,它就没有分量”这条规则是承重的。而且自我引导有一个地板:你必须徒手建出循环的第一个版本,那时没有任何循环能帮你——之后它才会复利增长,但冷启动是真实的。