AI修复自己的代码时仍会犯同样的错误:盲目重试效果更好

AI辅助编程中最直观的想法之一是,模型应该从自己的错误中学习:把失败代码的测试输出展示给它,它就能在下一次尝试中给出更好的修复。新的研究表明,对于较小的模型而言,这种直觉是错误的,正确的做法是假装失败从未发生过。

首尔大学的Yuvraj Verma本周在arXiv上发表的一篇论文,系统比较了代码生成模型的不同重试策略。结论令人意外:对于参数低于70亿的模型,盲重采样(即不看之前的尝试,直接生成全新解决方案)胜过所有基于反馈的自我修复方式,而且消耗的token数量要少2.5到5.5倍。

根本原因是锚定效应。当模型收到自己先前的输出以及失败信号时,它倾向于生成几乎相同的代码:33%到68%的重试会产生与首次尝试无法区分的程序。在盲重采样下,没有这种反馈时,重复率会降至2%到14%之间。模型会锁定自己的初始方案,仅凭测试输出不足以让它改变。

实验在MBPP+基准上测试了四种预算匹配的重试条件:盲重采样、不含任何内容的安慰剂式失败通知、来自失败测试运行的真实执行反馈,以及完整反思(模型在重试前先用文字分析自己的错误)。所有条件获得的总尝试次数相同,从而分离出反馈类型的影响,而非额外尝试次数的影响。

Every contribution helps us produce accurate, unbiased news for readers around the world.

支持 1ban.news

在70亿参数以下,盲重采样是最强的条件。与安慰剂相比,执行反馈没有带来任何可测量的增益。在70亿参数规模上,盲重采样与最佳反馈条件在统计上仍不相上下。锚定惩罚的规律性极强,其幅度跨越六种配置(涵盖两个模型家族和两种精度水平),仅凭基线质量就能预测,相关系数达0.96。

这一发现对AI编程代理的设计具有实际意义。自我修复被广泛视为代码代理流水线的默认组件,评估时几乎总是与完全不重试的基线对比。论文指出,这种做法混淆了反馈的价值与额外尝试的价值。当尝试次数得到控制时,对于小型模型,反馈本身毫无贡献。

反思(要求模型分析自己的错误)是唯一能显著削弱锚定的干预手段,但代价是高昂的token消耗。对于每一笔API调用都至关重要的成本敏感型应用,最简单的策略似乎就是最好的:再试一次,不要回头看。

婷 翻译

Sources: arXiv (Jul 28, 2026); GitHub

Scroll to Top