跳转至

Co-Evolving LLM Coder and Unit Tester via Reinforcement Learning

会议: NeurIPS 2025
arXiv: 2506.03136
代码: GitHub
领域: LLM推理与代码生成
关键词: 自演化, RL, 单元测试生成, 代码生成, 无监督

一句话总结

提出CURE框架,通过单元测试生成器与代码生成器的相互监督和共同进化,在无需ground-truth代码的情况下显著提升LLM代码生成能力。

研究背景与动机

  1. 问题定义: 传统单元测试生成方法依赖于ground-truth代码标注,收集成本高且可扩展性差
  2. 关键洞察: 单元测试不一定需要完整的代码解决方案即可生成,可以从失败案例中学习
  3. 研究机会: 让单元测试生成器和代码生成器相互监督,无需访问ground-truth代码
  4. 动机意义: 这种共同进化方式既能提升代码生成精度,也能改进单元测试生成质量

方法详解

整体框架

CURE框架基于自博弈RL,利用生成代码与生成测试的交互创建成对奖励矩阵。核心思想是:

  • 对每个任务,生成n个候选代码和m个单元测试
  • 执行所有代码对所有测试,生成二进制评估矩阵B∈{0,1}^(n×m)
  • 基于评估矩阵估计奖励,训练代码生成器和测试生成器

关键设计

  1. 理论推导的奖励设计: 通过分析奖励精度(能否正确区分正确代码与错误代码),推导出个体单元测试的奖励函数:R_uk = -∑(1-I_sl)·B_l,k + (∏I_sl·B_l,k)·(∑(1-I_sl))

  2. 共同进化对象函数: 采用PPO/GRPO框架,分离优化代码和测试:

  3. 代码奖励:R_sj = ∑l B(通过ground-truth测试的个数)
  4. 测试奖励:基于上述微调的μ参数

  5. 长CoT模型优化: 对于长链的推理模型,引入响应长度引导的奖励变换,防止过度生成

实验关键数据

主实验

模型 LiveBench UT/Code/BoN MBPP UT/Code/BoN LiveCodeBench UT/Code/BoN CodeContests UT/Code/BoN
Qwen2.5-14B-Coder 39.0/42.2/53.1 75.1/72.6/84.9 41.6/38.2/47.7 37.3/23.3/32.0
ReasonFlux-14B 73.3/47.5/60.2 91.6/78.5/88.2 81.4/40.5/50.5 86.0/32.1/44.4
Qwen2.5-7B-Coder 19.3/35.0/42.9 41.3/68.0/79.6 20.6/29.8/34.8 12.9/22.8/23.8
ReasonFlux-7B 54.8/37.1/51.6 79.4/70.2/84.6 57.7/31.2/42.7 62.6/25.9/34.1
Qwen3-4B (Long) 36.8/72.5/78.1 76.5/88.4/90.1 50.9/74.5/80.0 43.6/53.0/58.3
ReasonFlux-4B 84.6/74.6/82.0 83.3/89.5/91.1 86.8/74.9/80.6 72.2/54.6/59.9

消融与分析

  • 单元测试准确度提升:从baseline平均35%提升至73%以上(ReasonFlux-14B)
  • Best-of-N性能提升:9.0%相对改善(Qwen2.5基础模型)
  • 长CoT效率:4B模型达到64.8%的推理效率(与Qwen3-4B相比)

关键发现

  1. 无监督共同进化的有效性: 即使没有ground-truth标注,单测和代码也能互相指导,形成正反馈
  2. 响应长度指导的重要性: 对长链模型,动态调整奖励确保生成效率,关键是在Pass@k上的整体改进
  3. 可迁移性: 训练好的单元测试生成器可作为RL的奖励模型,无需额外标注

亮点与洞察

  1. 理论完整性: 从奖励精度分析出发,推导出三种不同的奖励设计,形成完整的理论框架
  2. 无监督学习: 突破ground-truth代码的需求,证明自博弈可行
  3. 双向增强: 单测改进代码→代码失败样例改进单测→形成正反馈循环
  4. 实际价值: 无需外部标注即可持续改进,适应不同规模和类型的编码任务

局限性

  1. 初始质量依赖: 依赖初始模型的基础能力,较弱的base model可能难以启动自演化
  2. test-time compute: 需要生成多个候选和测试,推理成本较高
  3. 长序列挑战: 虽然提出了长CoT优化,但4K-32K上下文的效率仍有限制
  4. 任务局限: 主要评估在数学编码任务,其他领域(如文本生成)的泛化性未知

相关工作

  • 单元测试生成: 传统方法(软件分析)、O1-Coder(使用ground-truth)、UTGEN(混合正负样本)
  • test-time scaling: Best-of-N策略、AlphaCodium的自修正、S*的配对判别
  • RL for code: PPO/GRPO等标准算法在coding任务中的应用

评分

⭐⭐⭐⭐⭐