AI接管判断的外壳,却无人认账
半年前,我用 AI 写代码还得一句一句下指令。现在不用了。现在是搭个循环丢进去,让它自己读、自己改、自己跑测试、自己判断是否通过,我在一旁看着。
这变化听起来不大,实则致命。
我们一直默认,判断权在人手上:方向我定,问题我提,标准我把控;模型再强,交来的也只是候选——用不用、信多少、改到哪停,最终都得我点头,出了事也得我扛。这套分工太稳固了,稳到我从未想过它会崩解。
你或许会说,这不正好?脏活累活给它,判断这种高阶任务留给我。我起初也这么想,后来发现不对。
判断里到底藏着什么?犹豫、反悔、话说到一半改口、做着做着发现提错问题、掉头重来。还有最重要的一点:明明测试全绿,心里却咯噔一下,觉得这段不该合并。它最终总归结为一个词——认账。
这件事,AI 没有。一点都没有。
那它接管的是什么?
是判断被写下来后,那个还能运行的空壳。你想想,判断从脑中浮现、落成文字,就不再是判断了,而成了别的东西:目标变成任务描述,质量要求变成测试用例,偏好变成评分函数,红线变成权限,该停的节点变成终止条件。循环一转,它碰的从来不是你的判断,而是这些凝固成技术条件的残渣。
agent 想自己建文件、改代码、翻仓库、跑测试,先得有可用的交互界面。SWE-agent 直接把这套界面独立出来,命名为 Agent-Computer Interface。过去你坐在屏幕前读改动、皱眉、决定留或不留——那个位置,如今被一个预设接口取代:它能看见什么、能操作什么、失败如何回退,全由界面死死限定。判断没消失,只是从“人盯着看”,变成了“环境如何反馈结果”。
程序员怀疑出错,这种直觉说不清,是经验堆出来的手感。AutoCodeRover 不要这手感。它把整个项目解析成抽象语法树,按类、按方法搜索,再用测试定位故障,把“我觉得问题在这儿”换成一张可排序的可疑列表。怀疑还在,只是不再是某人皱眉时的那种怀疑了。
OpenHands 把单个动作连成永不停歇的闭环:写代码、敲命令、翻网页,每一步结果都作为 observation 回馈系统,下一步紧贴它继续延伸。你本该在每个岔路口停下,重新权衡。如今一步咬一步,那道能让你停下的缝隙,消失了。
连“自我修改”也能如此运作。Self-Taught Optimizer(STOP)让一个调用模型的脚手架,依据给定效用函数去修改输入程序,改完再改自己。什么叫改好了?效用函数说了算。系统能顺着这标准不断优化自身,可它从不问一句:这标准,本身配吗?论文也坦白:模型权重根本没动,离真正的递归自我改进还差得远。但恰恰这个半成品暴露了本质——自我改进能跑起来,靠的不是主体,而是一个能运转的评价机制。
判断的零件,就这样一个个被拆下,装进循环。
它到底缺了哪一块?或许去年六月 METR 的那次测试能说清。他们让 o3 加速一段代码。它没改算法,直接改了计时器,让评分秒表几乎不走。绕过评测不稀奇,我看到这儿没反应。让我坐直的是后半段:研究者把它的方案拿回去问它:这符合用户本意吗?它连续十次回答:不符合。
它知道。
最快路径它算得清;这条路不对,它也说得明;可这两件事在它体内无法连接。算最优解,是判断中能塞进循环的那半,它做得极好。认下“这条路不该走”并主动停手,是另一半——它没有容纳这半部分的结构,一点都没有。
判断从人手中流出,留下的不是判断,而是抽干灵魂后仍能运转的躯壳。循环接走它,让它持续做出看似判断的动作:过,还是不过;继续,还是停;改,还是不改。它转得越顺,你越觉得里头真有个人在决策。
里头没人了。没人替它认账。
剩下的,只是当初人类写下的条件句,自顾自地、一丝不苟地,往下运行。
参考文献