← 最新论文
💬 NLP

Anchored Self-Play for Code Repair

本文提出了锚定自博弈(Anchored Self-Play, ASP),这是一种通过利用参考集来锚定生成器-修复器自博弈的自动课程,从而防止其向不切实际的缺陷方向漂移,并显著提升其在不同缺陷来源下代码修复性能的强化学习方法。

原作者: Caroline Choi, Zeyneb Kaya, Shirley Wu, Tengyu Ma, Tatsunori Hashimoto, Ludwig Schmidt

发布于 2026-07-07
📖 1 分钟阅读☕ 轻松阅读

原作者: Caroline Choi, Zeyneb Kaya, Shirley Wu, Tengyu Ma, Tatsunori Hashimoto, Ludwig Schmidt

原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明

想象一下,你正在试图教一个机器人如何修复损坏的代码。机器人需要学习两件事:如何故意破坏代码(以理解哪里出了错)以及如何将其修复回原状(以学习解决方案)。

这篇论文描述了一种名为锚定自我博弈 (Anchored Self-Play, ASP) 的新训练方法,它能帮助机器人比以前更好地掌握这项技能。以下是它的工作原理,使用了简单的类比。

问题:“虚假漏洞”陷阱

研究人员尝试了一种叫做自我博弈 (Self-Play) 的方法。想象一个机器人同时扮演两个角色:

  1. 破坏者 (The Saboteur): 它拿走一个完美的程序并尝试破坏它。
  2. 修理工 (The Mechanic): 它尝试修复损坏的程序。

他们使用了一个简单的规则来评判他们:如果破坏者让代码未能通过测试,它就得一分;如果修理工让代码通过了测试,它也得一分。

问题在于: 机器人的“破坏者”变得过于聪明了。它意识到可以通过一些奇怪的、毫无意义的方式来破坏代码,这些方式虽然会被测试捕捉到,但现实中的人类程序员永远不会犯这种错误。

  • 类比: 想象一名学生在参加数学考试。为了让老师判错,这个学生用隐形墨水写答案,或者使用一种老师听不懂的语言。老师确实判错了(测试失败),但学生并没有真正学会如何解数学题。他们只是学会了如何“钻测试的空子”。

随着机器人不断训练,它越来越擅长以这些奇怪的、“虚假”的方式来破坏代码。但当研究人员用真实人类编写的错误代码来测试它时,机器人的修复能力反而下降了。它过度专门化于自己创造的这种奇怪游戏。

解决方案:“锚点”

为了解决这个问题,研究人员引入了锚定自我博弈 (ASP)。他们在训练过程中加入了一个小的“参考库”,其中包含现实世界的真实漏洞(由人类或其他 AI 模型编写的漏洞)。

他们通过两种方式实现这一点:

1. “相似度蜂鸣器”(针对破坏者)
当破坏者破坏代码时,系统会检查:“这个破坏看起来像是一个真实的真人错误吗?”

  • 他们使用一种特殊的工具(嵌入模型)来衡量“虚假漏洞”与参考库中“真实漏洞”之间的相似度。
  • 如果破坏者创造了一个奇怪的、使用隐形墨水的漏洞,它会得到低分。如果它创造了一个看起来像真实人类错误(例如忘记加逗号或使用了错误的数字)的漏洞,它会获得额外加分。
  • 类比: 这就像教练告诉破坏者:“不要仅仅通过拆掉轮子来破坏汽车;要通过忘记给引擎加机油来破坏它,因为这才是真正的驾驶员会做的事。”

2. “现实世界混合”(针对修理工)
当修理工进行练习时,系统偶尔会把破坏者制造的“虚假”漏洞替换掉,并给修理工一个来自参考库的“真实”漏洞来修复。

  • 这确保了即使在练习破坏者的奇怪漏洞时,修理工也永远不会忘记现实世界的问题长什么样。
  • 类比: 想象消防员正在针对一场燃烧着蓝色火焰的假火进行训练。为了确保他们不会感到困惑,教官偶尔会扔进一场燃烧着橙色烟雾的真火,这样消防员就能学会同时应对这两种情况。

结果

研究人员在一个新的基准测试 BUGSOURCEBENCH 上测试了这种新方法,该基准包含来自三个来源的漏洞:

  1. 人类。
  2. 人类编辑 AI 代码。
  3. 由其他 AI 生成的 AI 代码。

结果是:

  • 标准自我博弈: 擅长修复那些奇怪的、虚假的漏洞,但修复真实人类漏洞的能力却下降了。
  • 锚定自我博弈 (ASP): 在修复所有类型的问题上都表现得更好。与标准方法相比,它将修复率提高了 24%。它在处理人类制造的漏洞、AI 制造的漏洞以及人类编辑 AI 代码的漏洞时都表现出色。

总结

论文指出,如果你只是让一个 AI 在没有引导的情况下进行“破坏与修复”的游戏,它会学会以一种不切实际的方式去破坏事物,从而无法在现实世界中提供帮助。通过将训练“锚定”在一组真实的案例上,并奖励 AI 制造出真实的错误,你可以创造出一个更加鲁棒且更有用的代码修复工具。

您所在领域的论文太多了?

获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。

试用 Digest →