无限循环

我看到Karpathy发布了autoresearch。一个agent拿到一个训练脚本和一个包含指令的markdown文件。它会修改训练代码,运行5分钟的训练,检查得分,决定保留还是回滚,然后循环往复。他在指令里写了"LOOP FOREVER"(永远循环)和"NEVER STOP"(永不停止)。他去睡了一觉,醒来时,已经跑完了100个实验。

结果确实随着agent迭代次数的增加而变得更好。当我在难题上使用Claude Code时,agent会尝试某种方法,遇到阻碍后回溯,再试另一种方法,经过10次尝试后的结果与第一次截然不同。

Karpathy是为了训练模型做这件事的,但我认为同样的方法也适用于其他事情,比如让查询速度更快,或者提高prompt的评估得分,只要agent能判断结果是否变好就行。

问题在于,大多数agent工具使用的是有限循环。autoresearch在一个会话内运行,Claude Code的会话过一阵就会结束,OpenClaw虽然有任务队列,但没有那种写着"永远持续下去"的设置。所以你可能跑了大概30次就会话就终结了。

不过,计划任务可以解决这个问题。Claude Code有一个/loop命令,可以按cron时间表运行prompt。OpenClaw有一种心跳机制,能让agent保持运行。所需的组件其实已经具备了。

我觉得要让这个循环真正起作用,需要三个条件。第一,一个可靠的度量标准,agent没法自己虚高的那种,比如测试分数或基准数值。第二,每次迭代都严格执行保留或回滚,这样agent才不会横向漂移。第三,一个让循环永远运行下去的机制,因为目前没有agent工具原生支持这个,你需要cron或心跳之类的外部机制来重启它。

我甚至在写这篇文章的时候亲自测试了一下。我让Claude Code设置了一个cron任务,每分钟重写一次这篇文章,试图让它更符合我的写作风格。每次迭代,agent都会读取我以前的文章,给当前的草稿打分,决定是编辑还是跳过,并记录下它修改了什么。

到目前为止,它已经运行了28轮迭代。第一个版本很糟糕,充满了AI写作的套路,比如排比句、模糊的代词、硅谷思想领袖那种调调。大概在第8轮迭代时,agent给自己打了8/10分,但我看也就6分左右。这本身很有意思,因为agent的自我评分太宽容了,导致它过早停止了尝试。在我告诉它真实分数后,它重新校准了标准并继续运行。

每一轮都会发现不同的问题。早期的轮次修复了那些明显的AI痕迹。后面的轮次开始捕捉更细微的东西,比如agent喜欢用"但X只是一个案例"来否定事物,然后转向一个更大的论断;或者它老是生成短促、零碎的句子,而我实际的写作风格是使用更长、更流畅的句子。这些问题在单次生成中根本不会暴露出来。

我觉得最难的部分在于度量。对于代码和训练,你可以跑个测试检查数值,Karpathy有val_bpb。我的实验只有自我评分,结果证明太宽容了。在第16轮迭代之后,agent开始每一轮都跳过,连续跳过了8次,因为没有一个硬性的数值指标去优化,它看不出还有什么地方需要改进。如果有val_bpb,循环就会不断寻找尝试的方向。没有这个指标,agent就会觉得"我看挺好",然后什么都不做。对于任何主观性强的任务,比如写作,你需要一个独立的模型作为批评家,或者人工偶尔介入检查。

Agent还需要在每次迭代时决定保留还是回滚,否则它会横向漂移,而不是在改进。而且由于目前没有任何agent工具原生支持永久运行,你仍然需要在agent外部有一些机制,比如cron任务来重启它,并传入它上次停止的位置。

在连续跳过12次后,我停止了循环。总共28次迭代。在前16轮,agent独自将文章从约4/10分提升到了7/10分,然后就碰壁了,如果我不告诉它哪里不对,它就无法突破。这就是你正在读的这篇文章。

Like
Comment
Share

Leave a comment

Your email address will not be published. Required fields are marked *