← 最新论文
💻 computer science

ZeroCoder: Can LLMs Improve Code Generation Without Ground-Truth Supervision?

本文提出了名为 ZeroCoder 的无标签协同进化框架,通过联合训练代码生成器与测试生成器,利用自生成的代码 - 测试交互反馈及动态贝叶斯选择器(DyB4)解决奖励稀疏与选择器漂移问题,从而在无真实监督的情况下显著提升了代码与测试的生成质量。

原作者: Lishui Fan, Mouxiang Chen, Tingwei Zhu, Kui Liu, Xin Xia, Shanping Li, Zhongxin Liu

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

原作者: Lishui Fan, Mouxiang Chen, Tingwei Zhu, Kui Liu, Xin Xia, Shanping Li, Zhongxin Liu

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

这篇论文介绍了一个名为 ZeroCoder 的有趣系统,它的核心目标是:让 AI 写代码的能力变强,但完全不需要人类老师(Ground-Truth)来批改作业。

想象一下,你正在教一个学生(AI)写代码。通常,你需要给他题目,然后给他标准答案和测试题,告诉他“做对了”还是“做错了”。但标准答案和测试题太贵、太少了,不够用。

ZeroCoder 的想法是:让学生自己出题,自己做题,自己互相批改。

下面我用几个生动的比喻来解释它是如何做到的:

1. 核心概念:双人舞(代码与测试的“共进化”)

以前,AI 写代码时,测试题通常是固定的(像死板的考官)。如果 AI 变聪明了,能骗过那些简单的测试题,但考官还是老样子,AI 就学不到新东西了。

ZeroCoder 把 AI 变成了两个角色,让它们像跳双人舞一样互相配合、互相促进:

  • 角色 A(程序员): 负责写代码解决方案。
  • 角色 B(测试员): 负责写测试题(用来检查代码对不对)。

比喻:
想象一个拳击训练场

  • 程序员是拳手,测试员是陪练。
  • 如果陪练太弱(只会出简单的直拳),拳手随便打打就能赢,拳手就永远练不出真本事。
  • 如果陪练太强(还没练好就出重拳),拳手根本接不住,也学不到东西。
  • ZeroCoder 的妙处在于: 它让陪练(测试员)和拳手(程序员)一起变强
    • 当拳手变强了,陪练必须想出更刁钻的招式(更难的测试题)才能难倒他。
    • 当陪练变强了,拳手就必须写出更完美的代码才能过关。
    • 这样,两者在“互相较劲”中共同进步。

2. 三大挑战与解决方案

虽然想法很美好,但实际操作中有三个大坑,ZeroCoder 用三个聪明的方法填上了:

挑战一:题目太简单或太难,大家都“躺平”

如果题目太简单,所有代码都能通过;如果太难,所有代码都报错。这时候,AI 就分不清谁好谁坏了,学不到东西。

  • 解决方案:像筛子一样过滤(离线预筛选)
    ZeroCoder 在正式训练前,先让 AI 试做一遍。它不看答案对不对,而是看代码和测试题互动的“花样”够不够多
    • 比喻: 就像在选运动员。如果所有选手都跑 100 米,有的跑 10 秒,有的跑 11 秒,这能看出水平。但如果题目太简单,大家都跑 5 秒;或者太难,大家都跑不动。ZeroCoder 会把这种“没花样”的题目筛掉,只留下那些能让 AI 分出高下的“好题目”。

挑战二:测试员太水,只会出“假考题”

刚开始时,AI 写的测试题可能很烂,比如只测试“输入是空”这种简单情况,或者写个 assert True(永远为真)来糊弄。这样程序员就能轻松过关,但学不到真本事。

  • 解决方案:变异测试(Mutation Reward)
    ZeroCoder 给测试员加了一条规则:“你的测试题必须能抓出‘伪装者’。”
    • 比喻: 假设程序员写了一个看似完美的代码,但里面藏着一个微小的逻辑漏洞(就像把“苹果”写成了“梨”)。ZeroCoder 会故意把代码里的词偷偷换掉(变异),生成一个“坏代码”。
    • 如果测试员能发现这个“坏代码”并报错,说明测试员很厉害,给高分。
    • 如果测试员没发现,说明它太水了,给低分。
    • 这逼着测试员必须写出能“照妖”的题,从而倒逼程序员写出更严谨的代码。

挑战三:裁判的尺子歪了(选择器漂移)

在训练过程中,AI 的能力一直在变。一开始,AI 写的代码很烂,测试题也很烂。后来 AI 变强了。如果裁判(选择器)还拿着一开始的旧标准来打分,就会出错(比如把以前能骗过旧测试题的“坏代码”误判为“好代码”)。

  • 解决方案:动态校准(DyB4)
    ZeroCoder 发现裁判的尺子会“漂移”。为了解决这个问题,它引入了一个动态校准机制
    • 比喻: 就像体育比赛,裁判每隔一段时间就要重新校准一下秒表。ZeroCoder 只需要极少量的真实答案(比如 10 道题),就能告诉裁判:“现在的 AI 水平变了,你的打分标准也要跟着变。”
    • 这让裁判始终能准确判断谁强谁弱,不会因为标准过时而乱打分。

3. 结果如何?

实验证明,这套方法非常有效:

  • 完全不用人类答案(Label-Free): 即使没有人类提供的标准答案,ZeroCoder 也能让 AI 的写代码能力大幅提升(比如提升了 14.5%)。
  • 只需一点点人类答案(Small-Label): 如果只给 10 道题作为校准,效果更是惊人(提升了 21.6%),甚至接近那些拥有海量标准答案的“神仙”训练模式。
  • 双向提升: 不仅代码写得更好了,AI 出题(写测试)的能力也变强了(提升了 24.3%)。

总结

ZeroCoder 就像是一个自我进化的“黑客松”训练营
它不依赖昂贵的“标准答案”,而是让 AI 扮演程序员测试员两个角色,通过互相出题、互相找茬、互相变强的方式,在不断的“内卷”中提升实力。

  • 以前: 老师出题,学生做题,老师批改。
  • 现在: 学生 A 出题,学生 B 做题,然后互相批改。如果谁出的题太水,谁就扣分;如果谁做的题太假,谁就扣分。

这种方法不仅省去了昂贵的“老师”(人类标注数据),还让 AI 在自我博弈中变得更加聪明和严谨。

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

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

试用 Digest →