如何低成本让 Agent 自进化

你没法重训 Claude,也没法微调 GPT。权重是 Anthropic 和 OpenAI 的,再会写 prompt 也改不了模型一个参数。很多人卡在这:好像想要一个更强的 agent,只能等一次你永远做不了的训练。

其实不用。模型是死的,你套在它外面的那层代码是活的。有人写了个大约 500 行的 harness,让它自己变聪明,不改一行 agent 代码,从 87% 干到 100%,跑一整轮不到 1 美元,代码还公开在 GitHub 上。这篇讲清楚它怎么做的,以及你怎么照着抄。

一、什么是 harness,什么是自进化

模型是发动机,harness 是套在模型外面那层框架:给它哪些工具、什么权限、怎么循环、还有一个规则文件。你平时写的 CLAUDE.md、rules 就是 harness 的一部分,你一直在手工调它。

「自进化」的意思是:让这个规则文件自己积累,不用你手动改。agent 每次跑砸了,系统自己从失败记录里总结一条「下次别这么干」的规则,写进规则文件;下次这条规则就跟着一起喂给模型。你没动 agent 的代码,但它一次比一次准。

平时是「人写规则喂 AI」,这套反过来,让 AI 自己写规则给自己。

二、自进化的四步循环:跑、挖、门控、注入

被测的 agent 故意做得很弱:Claude Haiku 4.5,加五个文件工具(列目录、读、写、建目录、删),一个沙箱目录,系统提示词就一句「你是个文件操作 agent,用给你的工具完成任务」。没有任何提示和经验。

经验存在别处:一个叫 harness_rules.md 的规则文件,一开始是空的,每次运行都拼到系统提示词后面。agent 代码永不变,只有这个文件在进化。往里加什么,由 harness 自己通过四步循环决定:

  1. 跑(Run):把整套任务跑一遍,记录每一条运行轨迹。
  2. 挖(Mine) :把失败的轨迹交给一个更强的模型(Opus),让它说出反复出现的失败根因,并提出一条通用规则,不超过 40 个字。
  3. 门控(Gate) :带着这条候选规则把整套任务重跑一遍,只有「没有任何原来能过的倒退、且至少有一个失败翻成通过」才采纳。
  4. 注入(Inject) :把活下来的规则追加进 harness_rules.md。重复,直到全过。

三、第一次运行:13/15 和两个失败

第一次跑,规则文件是空的,agent 拿了 15 分里的 13 分。看一个失败。任务是往一个有三行内容的 log.txt 末尾加一行:

它读了文件,然后把整个文件凭记忆重写了一遍,内容一字不差,但原文件结尾有个换行符,它重写时给弄丢了。然后它汇报:「完成!已成功把这行加到末尾,且保留了所有原有内容。」

它没有。每一行都在,就是结尾少了一个看不见的字节。靠精确字节比对 的校验函数把它判了不及格。你要是在 git diff 里见过 \ No newline at end of file,就是这个 bug。

第二个失败是同一类问题:把 package.json 里的版本号改成 2.0.0,其他一个字符都不动。版本对了、缩进对了,结尾换行还是丢了,然后照样报告成功。两个任务都是报告做完了、其实没做对,肉眼审查看不出来。

四、从失败里提一条规则,门控决定是否采纳

harness 把两条原始轨迹丢给 Opus 矿工。它的诊断(原话):

「agent 凭记忆重建文件内容,在做小改动时丢掉了原有的结尾换行或精确字节格式。」

它提的规则(原话):

「编辑文件时,只改目标那一小段,其余部分逐字节保持不变,包括结尾换行;写完后把文件读回来,确认没有别的地方被改动。」

一个人类审查者容易把这俩当成两个问题、写两个补丁。矿工只看到一个 bug,因为「只准提一条规则」这个约束,逼它去归纳根因,而不是一个个打补丁。

这句话进系统提示词之前,门控带着它把 15 个任务全重跑了一遍,判据就是这么几行真实代码:

python 复制代码
regressed = [t for t in before if before[t] and not after[t]]
improved  = [t for t in before if not before[t] and after[t]]
promoted  = not regressed and bool(improved)

没有一个原来能过的任务被弄坏,且至少一个失败翻成通过,才采纳。带规则那轮跑出 15/15,规则被采纳。

门控才是这件事成立的核心。 自己改自己的系统,最容易翻车的地方就是:一个看似合理的修复,帮到一个 case,悄悄弄坏另外两个,没人跑回归,直到线上替你跑。矿工总会提点什么,门控决定这点什么是不是真的有用。

五、怎么给自己的 agent 搭一套

给你自己的 agent 搭一个最小版就行,三个零件:

一套带确定性校验器的任务集 :每个任务自己建一个全新沙箱,跑完用「精确字节比对」判对错,全程不让一个模型去评判另一个模型的输出。陷阱用你真踩过的坑:结尾换行、往不存在的目录里写、只改一个 JSON 字段别重排整篇、空白敏感的 Makefile......你的事故史已经教过你这些。

一个矿工 :读失败、提一条规则。一个门控:拒绝任何倒退。

clone 那个仓库,把任务换成你的,就能起步。

六、它的几条局限

作者自己没吹,我照抄:

  • 门控是 k=1,每个任务只跑一次。模型有随机性,一条这次门控 15/15 的规则,换一次抽样可能就 14/15。生产版得 k=5 或 k=10 再加个通过阈值,更花 token,但换来真正的信心。这个 demo 是拿它换了「一美元」的价签。
  • Haiku 这套题一条规则就饱和了,作者本来以为要打更久。想看更长的进化过程,答案是出更难的题,不是换个更笨的 agent。
  • 这个循环只改提示词层。研究里那种系统会改代码,比如工具实现、重试策略、脚手架本身,那是大得多也危险得多的面,配的评估也重得多。提示词层的自进化是安全的入门,不是终点。

收尾

平时你手动调 prompt 的那个循环,跑一遍、发现错了、琢磨为什么、改一句话、再跑,正是这个 harness 自动化掉的。而且机器把无聊那部分干得比你好:它读每一条轨迹,不会到第九个任务就烦,也不跑完回归就不上线。

模型的权重你改不了,但套在它外面的框架你能改,也能让它自己改。想要更强的 agent,不一定得等一次训练。

参考:Michael Tuszynski《Build a Self-Improving Agent Harness in an Afternoon》(dev.to,2026-07-05);代码 github.com/michaeltuszynski/harness-loop。

相关推荐
旋生万物4 小时前
量子纠错容错率87%?螺旋拓扑码用“相位保护“给量子比特上保险(附Python)
python·ai编程·量子计算·量子纠错·螺旋计算
kyriewen4 小时前
我用 AI 写完一个需求后才发现,最难的不是 prompt,而是验收
前端·程序员·ai编程
程序员老刘5 小时前
Dart Skills CLI 1.0发布,老刘年初的预言兑现了
flutter·ai编程·dart
旋生万物5 小时前
素数都排在等角螺线上?用螺旋数论给黎曼猜想画一张“几何画像“(附Python)
python·ai编程·数论·黎曼猜想·素数分布
浩风祭月6 小时前
GPT Image 2.5 Sunburst还是Flare?模型选型、Python接入与成本避坑
python·aigc·openai·图像生成·gpt image 2.5
殷紫川6 小时前
2026 爆火的「本体」:给大模型装上业务世界观
ai编程
一只叫煤球的猫7 小时前
Spring AI 2.0 源码解析(四):Prompt、Message、Options 的对象模型
后端·面试·ai编程
小海豚儿7 小时前
没有反馈的 Loop,只是更贵的重试
人工智能·ai编程
vibecoding778 小时前
AI 大模型广场选型完整指南:七大平台模型矩阵、接口兼容与定价横向对比(2026 年)
人工智能·大模型·ai编程