你没法重训 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 自己通过四步循环决定:
- 跑(Run):把整套任务跑一遍,记录每一条运行轨迹。
- 挖(Mine) :把失败的轨迹交给一个更强的模型(Opus),让它说出反复出现的失败根因,并提出一条通用规则,不超过 40 个字。
- 门控(Gate) :带着这条候选规则把整套任务重跑一遍,只有「没有任何原来能过的倒退、且至少有一个失败翻成通过」才采纳。
- 注入(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。