BACE: LLM-based Code Generation through Bayesian Anchored Co-Evolution of Code and Test Populations

本文提出了 BACE 框架,通过将代码与测试集的协同进化建模为基于贝叶斯更新的噪声感知过程,并利用最小公共示例进行锚定,从而有效解决了现有方法中因测试生成错误导致的代码合成偏差问题,在 LiveCodeBench v6 上显著提升了各类大语言模型的代码生成性能。

原作者: Kaushitha Silva, Srinath Perera

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

这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明

Each language version is independently generated for its own context, not a direct translation.

这篇论文介绍了一个名为 BACE 的新系统,它能让大型语言模型(LLM)写出更高质量的代码。

为了让你轻松理解,我们可以把写代码的过程想象成**“在一个充满噪音的房间里,通过一群‘侦探’和一群‘考官’互相面试,最终找到唯一真凶(正确答案)”**的过程。

1. 以前的困境:谁在撒谎?

在 BACE 出现之前,让 AI 写代码通常有两种方法:

  • 直接问(Direct Prompting): 就像你直接问一个学生:“请解这道数学题。”学生写个答案给你。如果题目很难,学生可能会瞎编一个看起来像那么回事的答案。
  • 自动测试循环(如 AgentCoder): 你让 AI 既当“学生”写代码,又当“老师”出题考自己。
    • 问题出在哪? 这个“老师”(AI 生成的测试用例)经常是个糊涂蛋。它可能会出一些太简单的题,让错误的代码也能蒙混过关(假阳性);或者出一些刁钻的错题,把真正正确的代码给判了死刑(假阴性)。
    • 后果: 就像学生和糊涂老师互相配合,最后全班都以为“错误的解法”才是对的,因为那个糊涂老师一直给错误的解法打高分。

2. BACE 的解决方案: Bayesian Anchored Co-Evolution(贝叶斯锚定协同进化)

BACE 把这个问题变成了一个**“群体博弈”**的游戏,而不是单挑。它引入了三个核心概念:

🎣 概念一:贝叶斯“信任度” (Bayesian Belief)

在 BACE 里,没有绝对的“对”或“错”。

  • 每一段代码和每一个测试题,都有一个**“信任度分数”**(比如 0% 到 100%)。
  • 核心思想: 如果一段代码通过了测试,我们不会立刻说“它是对的”,而是说“它的信任度稍微提高了一点”。因为测试题本身也可能有错。
  • 比喻: 想象你在玩一个“谁是卧底”的游戏。如果一个人通过了这一轮投票,大家不会立刻认定他是好人,只是觉得“他看起来稍微可信了一点点”。如果下一轮他又通过了,大家的信任度才会慢慢累积。

⚓ 概念二:锚定 (Anchoring) —— 防止跑偏的“定海神针”

这是 BACE 最聪明的地方。

  • 问题: 如果“学生”和“糊涂老师”互相吹捧,整个系统会越跑越偏(协同进化漂移),最后大家都觉得“地球是平的”是对的。
  • BACE 的做法: 题目描述里通常会有 1-3 个**“官方示例”(比如:输入 1+1,输出必须是 2)。BACE 把这些官方示例当作“锚”**(Anchor)。
  • 比喻: 就像在茫茫大海上,所有的船(代码)都必须系在一根绝对坚固的锚上。无论风浪(错误的测试)怎么吹,只要船偏离了锚(没通过官方示例),它的信任度就会瞬间归零,甚至被直接淘汰。这保证了整个搜索过程不会飘到错误的方向去。

🧬 概念三:协同进化 (Co-Evolution) —— 两个种群的互相打磨

BACE 不是一次只生成一个答案,而是维护两群人:

  1. 代码种群(学生团): 一群尝试写代码的 AI。
  2. 测试种群(考官团): 一群尝试出题的 AI。

它们怎么互动?

  • 互相考试: 代码团和测试团互相“过招”。
  • 动态调整:
    • 如果一段代码通过了很多“高信任度”的测试,它的分数就涨。
    • 如果一个测试题能难住很多“高信任度”的代码,说明这个测试题很厉害,它的分数也涨。
    • 关键点: 如果一段代码通过了测试,但那个测试题本身是个“烂题”(信任度低),那么这段代码的分数不会涨太多。反之,如果一段代码挂了,但挂在一个“烂题”上,它的分数也不会掉太多。
  • 结果: 只有那些既通过了官方锚点,又能经得起高质量测试题考验的代码,才能活到最后。

3. 保持多样性:不让“优等生”垄断

为了防止所有 AI 都写出千篇一律的“平庸答案”,BACE 还用了两个招数:

  • 行为多样性: 即使两个代码得分一样,如果它们解决问题的思路不同(比如一个用循环,一个用递归),BACE 也会把它们都保留下来,防止大家只盯着一种解法看。
  • 差异测试: 专门找一些能区分两个相似代码的“刁钻”测试题,把那些看起来很像但其实有细微差别的代码分开,确保进化方向是多样的。

4. 总结:它有多强?

论文在最新的 LiveCodeBench 数据集(2025 年 3 月以后的新题,防止 AI 背过答案)上进行了测试。

  • 战绩: BACE 在多个不同规模的模型(从 70 亿参数到 1200 亿参数)上,都打败了目前最先进的其他方法(如 CodeSIM, AgentCoder)。
  • 意义: 它证明了,只要给 AI 加上**“贝叶斯信任机制”“官方锚点”**,即使让 AI 自己出题考自己,也能写出非常可靠的代码,而不会陷入“自欺欺人”的陷阱。

一句话总结:
BACE 就像是一个聪明的教练,他不让 AI 学生自己乱出题考自己,而是让一群学生互相出题,同时用**官方标准答案(锚)作为底线,通过统计概率(贝叶斯)**来筛选出真正靠谱的答案,最终找到了解决复杂编程问题的最佳方案。

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

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

试用 Digest →