华人一作!Meta等复刻AlphaZero神话,AI甩开人类自修成神

  新智元报道

  编辑:元宇好困

  当模型学会「左右互搏」的那一刻,平庸的模仿时代结束了,真正的硅基编程奇迹刚刚开始。

  编程界的 AlphaZero 时刻,终于来了?

  当年,AlphaZero 抛弃人类棋谱,仅凭「左右互搏」便参透了超越千年的棋道。

  而今天,AI 程序员的致命伤,恰恰就在于它们太像「人」了——

  靠学习人类代码长大的 AI,注定无法突破人类的平庸。

  就在最近,来自 Meta、UIUC 和 CMU 的研究团队,凭借最新成果Self-play SWE-RL(SSR,正在试图复刻 AlphaZero 的神话——

  抛弃人类教师,拒绝模仿。

  论文地址:https://arxiv.org/pdf/2512.18552

  只要给 AI 一个代码库,让它分饰「破坏者」与「修复者」进行死斗。

  在这场无需人类插手的自我博弈中,一种真正的、超越人类经验的编程奇迹,正在诞生。

  被「喂养」的 AI 与人类数据的天花板

  从 Devin 到 OpenDevin,再到各大厂内部的代码助手,它们确实能帮程序员干不少脏活累活。

  但这里有一个隐形的瓶颈

  目前主流的训练方法,无论是 SWE-RL 还是 DeepSWE,本质上都是在教 AI「模仿」

  这种依赖人类知识的模式有三个致命伤:

  • 数据不够用:高质量的、带测试用例、带详细描述的 Bug 修复数据,其实非常稀缺。

  • 质量不可靠:人类写的 issue 经常含糊不清,测试用例也不一定完美,这导致训练信号充满了噪声。

  • 天花板太低:如果 AI 只是模仿人类,它顶多变成一个平庸的初级程序员。

  这也是为什么论文把它称作通向超级智能的一道根本性障碍:

  一旦训练信号必须由人类提供,你就很难想象它能无限扩展到「开放式、自我进化」的层级。

  核心玩法

  代码沙盒里的「搏击俱乐部」

  SSR 的核心理念非常简单,却又极其精妙:自博弈(Self-Play)。

  在这个系统中,同一个 LLM 被赋予了两个截然不同、相互对抗的角色。

  角色一

  破坏者(Bug 注入智能体)

  它的任务不是写代码,而是搞破坏。

  给它一个正常的开源项目(比如一个 Python 库),它需要潜入进去,研究代码逻辑,然后制造一个 Bug。

  但这个破坏者不能随便乱来(比如删掉所有文件),它需要生成一套完整的「作案工具包」(Artifacts):

  bug_inject.diff :这是真正的破坏补丁,把代码改坏。

  test_script.sh :一个能运行测试的脚本,证明 Bug 确实存在。

  test_files.txt :指定哪些测试文件是用来验证这个 Bug 的。

  test_parser.py :一个解析器,用来把测试结果翻译成机器能读懂的 JSON 格式。

  test_weaken.diff :它会修改或删除现有的测试用例,让 Bug 在当前的测试套件下不报错。

  在 SSR 中,缺陷生成是一项由破坏者智能体执行的任务,该智能体利用工具与执行环境交互以生成缺陷工件,并进一步验证其一致性后提供给修复者智能体。

  一个优秀的破坏者智能体的关键特性在于其能够生成多样化的缺陷,以捕捉真实软件开发中的复杂性,从而在广泛的软件调试与工程场景中训练修复者智能体。

  角色二

  修复者(Bug 解决智能体)

  当破坏者完成工作后,轮到修复者登场了。

  修复者面对的是一个被注入了 Bug,且测试被「弱化」了的代码库。

  修复者拿到的任务非常具有挑战性,它看不到那个原始的 Bug 是怎么注入的,它必须像一个侦探一样,通过阅读代码、运行测试、分析报错,最终写出一个修复补丁(Fix Patch)。

  通过破坏者和修复者两种模型角色的对抗,可以让模型实现闭环进化。

  让魔法打败魔法

  如何保证 AI 不「瞎编」?

  如果你让 AI 随便生成 Bug,它大概率会产生幻觉,为此 SSR 设计了一套如同安检般严格的一致性验证(Consistency Verification)流程。

  一个合格的 Bug 工件,必须通过以下所有关卡:

  • 存在性检查:引用的测试文件,原仓库要有;

  • 解析器检查:Python 解析器要能读懂测试输出;

  • 脚本有效性:在没改坏代码之前,测试脚本要跑得通;

  • Bug 范围控制:改动的文件数量要适当,符合设定的难度。

  • Bug 有效性(关键):注入 Bug 后,原本通过的测试必须变失败。如果注入了 Bug 测试还通过,说明 Bug 根本没生效。

  • 掩盖有效性:应用了「掩盖补丁」后,原本失败的测试必须变通过,证明成功欺骗了测试套件。

  最精彩的一招

  逆向变异测试

  逆向变异测试(Inverse Mutation Testing),是一个为了验证 Bug 质量而发明的新概念。

  传统的变异测试是改乱代码看测试能不能发现。

  而逆向变异测试刚好反过来,把 Bug 涉及的文件逐个恢复成原样。

  • 如果恢复某个文件后,失败的测试变通过了,说明这个文件确实是 Bug 的起因。

  • 如果恢复了文件测试还是有问题,说明这个文件跟 Bug 没关系。

  这一步确保了 AI 生成的每一个改动都是必要的。

  如何制造一个「完美」的 Bug?

  如果「破坏者」只是简单地把x=1 改成x=0,那「修复者」学不到任何东西。

  为了让 AI 变得更聪明,研究团队探索了几种极具创意的 Bug 注入策略。

  策略A

  直接注入(Direct Injection)

  告诉 AI:「去,搞个 Bug 出来」,这是最笨的方法。

  结果不出所料,AI 经常就在代码里随便改个数字或符号。

  这种 Bug 太肤浅,修复者一眼就能看穿,训练效果最差。

  策略B

  暴力删除(Removal-only)

  告诉 AI:「把这块核心功能的代码删了!」

  这逼迫修复者必须根据上下文和剩余的测试代码,重新实现这部分功能。

  如此一来,能极大地锻炼 AI 的代码重构和理解能力。

  策略C

  历史回滚(History Rollback)

  告诉 AI:「去翻翻以前的提交记录,把代码回滚到某个旧版本。」

  因为代码库的历史往往充满了真实的 Bug 和功能的演进。

  让 AI 面对过去的代码状态,相当于让它重新经历一次项目演化的过程。这种生成的 Bug 最自然,最具实战意义。

  实验证明,「删除策略」和「历史回滚」混合使用,效果最好。这既保证了难度,又保证了真实性。

  终极杀招

  高阶 Bug

  如果修复者尝试修复 Bug 但失败了,SSR 认为这也可以「废物再回收利用」。

  修复者失败的代码,往往是一个半成品——它可能修好了一部分,但引入了新问题。这不就是一个更复杂、更隐蔽的 Bug 吗?

  系统会将这个「失败的修复」作为新的 Bug 状态,再次扔给修复者。

  这种多轮次、分层级的故障模式,极大地丰富了训练数据的维度。

  残酷的奖励机制与对抗博弈

  在强化学习中,奖励函数是指挥棒。

  SSR 的奖励设计充满了一种「微妙的平衡感」。

  对于修复者,奖励很简单:全对得 +1 分,否则-1 分。成王败寇。

  但对于破坏者,这就很有趣了。

  • 如果破坏者生成的 Bug 太简单,修复者每次都能修好(解决率s=1),破坏者得不到高分。

  • 如果 Bug 太难,根本修不好(解决率s=0),破坏者会被惩罚(因为它可能生成了逻辑矛盾的死局)。

  SSR 采用了一个基于解决率s的公式:

  其中,s∈[0,1]是解决率(solver 成功修复 bug 的比例),α∈(0,1) 是一个超参数,用于控制对退化解决率的惩罚强度,在实验中设置为 0.8。

  它的意思是:最好的 Bug,是那些让修复者感到棘手、通过率不高不低、处于「能力边界」上的 Bug。

  这迫使破坏者不断提升难度,正好卡在修复者「跳一跳够得着」的地方,从而推动双方共同进化。

  战果揭晓

  AI 真的变强了吗?

  研究团队使用了 Code World Model(CWM)的 32B 模型作为底座,在 512 个 H100 GPU 上进行了训练。

  他们在两个权威榜单上进行了测试:

  • SWE-bench Verified:经过人工验证的真实 GitHub issue 集合。

  • SWE-Bench Pro:更复杂、更企业级的问题集合。

  竞争对手是基于同样模型架构、同样环境镜像,但使用「人类数据」(Human Data)训练出来的基准模型。

  所谓人类数据基准,就是用传统的「Issue 描述+测试用例」方式训练的。

  结果令人振奋:

  • SSR 完胜:在整个训练轨迹中,SSR 的表现始终高于「人类数据」基准。

  • 分数提升:在 SWE-bench Verified 上提升了 10.4%,在 SWE-Bench Pro 上提升了 7.8%。

  • 零样本泛化:SSR 在训练时从未见过任何自然语言描述的 Issue,它只看过代码和测试。但在测试时,它却能完美处理带有 Issue 描述的任务。这说明它学到的不是「做题技巧」,而是真正的「编程内功」。

  测试结果显示,随着训练步数的增加,SSR 的能力稳步上升,而没有出现过拟合或崩溃,证明了自博弈产生的「课程」是持续有效的。

  通向超级智能的最后一块拼图

  SSR 的出现,意味着我们终于找到了一条摆脱「数据饥渴」的路径。

  以前我们认为,要想 AI 写好代码,必须有无数的人类程序员贡献代码和修 Bug 的记录。

  现在 SSR 告诉我们:只要有代码库(Raw Code)就够了。

  当然,SSR 还只是第一步。

  它目前的验证还主要依赖单元测试,还没法处理那种跨越数月的大型重构任务。

  但它指明了方向:

  超智能软件系统的诞生,可能不需要人类作为老师,只需要人类的代码作为战场。

  作者简介

  Yuxiang Wei

  Yuxiang Wei

  Yuxiang Wei 是伊利诺伊大学厄巴纳-香槟分校(UIUC)计算机科学系的博士生,由 Lingming Zhang 教授指导。

  他同时在 Meta FAIR 担任兼职研究员,与 Sida Wang、Daniel Fried 等人合作,致力于推进大型语言模型(LLM)在代码智能方面的应用。

  Zhiqing Sun

  Zhiqing Sun

  Zhiqing Sun 是 Meta 超级智能实验室(MSL)TBD Lab 的 AI 研究科学家,专注于训练大型语言模型(LLM)用于深度研究、代理开发和复杂任务。

  此前,他在 OpenAI 的后训练团队担任研究科学家,并曾在 AllenNLP 和 MIT-IBM Watson AI Lab 实习。

  Zhiqing Sun 于 2025 年 2 月在卡内基梅隆大学语言技术研究所获得计算机科学博士学位,并在北京大学获得计算机科学专业荣誉学士学位。

  David Zhang

  David Zhang

  David Zhang 是 Meta 基础 AI 研究(FAIR)巴黎实验室的研究科学家,专攻使用 LLM 的代码生成机器学习和深度学习技术。

  David Zhang 拥有阿姆斯特丹大学机器学习博士学位、慕尼黑工业大学计算机科学硕士和学士学位。

  Lingming Zhang

  Lingming Zhang

  Lingming Zhang 是伊利诺伊大学厄巴纳-香槟分校(UIUC)计算机科学系的副教授,隶属于 Grainger 工程学院。

  他的研究融合软件工程、编程语言、形式方法和机器学习,重点关注基于 LLM 的软件测试、分析、修复和合成。

  Sida Wang

  Sida Wang

  Sida Wang 是 Meta 基础 AI 研究(FAIR)西雅图实验室的研究科学家,专注于自然语言处理、机器学习和代码大型语言模型(LLM)。

  此前,他在普林斯顿大学和高等研究院(IAS)担任研究讲师,并于 2017 年在斯坦福大学获得计算机科学博士学位(由 Chris Manning 和 Percy Liang 联合指导)。

  他持有多伦多大学应用科学学士学位,曾在 Geoffrey Hinton 指导下研究胶囊网络。

  参考资料:

  https://x.com/YuxiangWei9/status/2003541373853524347%20

  https://arxiv.org/abs/2512.18552