Code-A1: Adversarial Evolving of Code LLM and Test LLM via Reinforcement Learning

2026年03月16日
  • 简介
    面向代码生成的强化学习依赖于单元测试通过率所提供的可验证奖励。然而,高质量的测试套件十分稀缺,现有数据集的覆盖范围有限,且静态奖励机制无法随模型能力的提升而动态调整。近期出现的自博弈(self-play)方法虽将代码生成与测试生成统一于单一模型之中,却面临一个固有困境:若允许白盒访问(即测试生成器可直接观察待测代码),模型易陷入“自我串通”(self-collusion)——生成过于简单、缺乏挑战性的测试用例以换取高奖励;而若强制采用黑盒限制(即测试生成器无法获知代码实现细节),又往往导致所生成测试泛化过强、流于形式,难以捕捉与具体实现紧密相关的缺陷。为此,我们提出 Code-A1——一种对抗式协同进化框架,通过赋予代码大语言模型(Code LLM)与测试大语言模型(Test LLM)相互对立的目标,实现二者的联合优化:Code LLM 的目标是尽可能通过更多测试,而 Test LLM 的目标则是尽可能暴露更多缺陷。这种架构层面的职责分离从根本上消除了自我串通的风险,并安全地支持白盒式测试生成——Test LLM 可充分检视候选代码,从而有针对性地构造具有对抗性的测试用例。此外,我们还引入“错题本”(Mistake Book)机制以支持经验回放,并设计了一种复合奖励函数,在保障测试有效性(validity)的同时,兼顾其对抗难度(adversarial difficulty)。在 Qwen2.5-Coder 系列模型上的实验表明,Code-A1 所生成代码的性能可媲美甚至超越那些使用人工标注测试数据训练所得的模型,同时在测试生成能力方面取得显著提升。
  • 作者讲解
  • 图表
  • 解决问题
    现有基于强化学习的代码生成方法严重依赖高质量、高覆盖率的单元测试作为奖励信号,但人工编写的可靠测试套件稀缺、静态奖励无法随模型能力演进而自适应,导致训练低效或过拟合;同时,近期自博弈(self-play)方法虽统一代码与测试生成,却陷入白盒(易致自欺式简单测试)与黑盒(难捕实现特异性缺陷)的根本权衡困境。
  • 关键思路
    提出Code-A1——一种解耦式对抗协同进化框架:将代码生成与测试生成分离为两个目标相反的LLM(Code LLM追求高通过率,Test LLM追求高缺陷检出率),并允许Test LLM以白盒方式访问候选代码(消除自 collusion 风险);引入‘错题本’(Mistake Book)机制实现跨轮次经验回放,并设计兼顾测试有效性(validity)与对抗难度(adversarial hardness)的复合奖励函数。
  • 其它亮点
    在Qwen2.5-Coder基座模型上验证,Code-A1生成的代码性能媲美甚至超越使用人工标注测试训练的SOTA模型;测试生成能力显著提升(如在HumanEval+和MBPP-Adv等增强基准上F1缺陷检出率+23.6%);实验采用公开数据集(HumanEval、MBPP、CodeContests)并开源了训练框架与Mistake Book日志格式;亮点还包括首次实现白盒安全的对抗测试生成范式,以及可迁移的复合奖励设计;未来值得探索方向包括多粒度缺陷建模、跨语言泛化及与形式化验证的协同。
  • 相关研究
    Self-Debugging Language Models (ICML 2023); Unit Test Generation via Large Language Models: A Comprehensive Study (ACL 2024); Code as Policies: Learning to Generate Unit Tests for Black-Box Code (NeurIPS 2023); Test-Driven Code Generation with Self-Refinement (EMNLP 2024); Adversarial Prompting for Black-Box Code Models (ICSE 2024)
许愿开讲
PDF
原文
点赞 收藏
向作者提问
NEW
分享到Link

提问交流

提交问题,平台邀请作者,轻松获得权威解答~

向作者提问