Co-Evolving LLM Coder and Unit Tester via Reinforcement Learning¶
会议: NeurIPS 2025
arXiv: 2506.03136
代码: GitHub
领域: LLM推理与代码生成
关键词: 自演化, RL, 单元测试生成, 代码生成, 无监督
一句话总结¶
提出CURE框架,通过单元测试生成器与代码生成器的相互监督和共同进化,在无需ground-truth代码的情况下显著提升LLM代码生成能力。
研究背景与动机¶
- 问题定义: 传统单元测试生成方法依赖于ground-truth代码标注,收集成本高且可扩展性差
- 关键洞察: 单元测试不一定需要完整的代码解决方案即可生成,可以从失败案例中学习
- 研究机会: 让单元测试生成器和代码生成器相互监督,无需访问ground-truth代码
- 动机意义: 这种共同进化方式既能提升代码生成精度,也能改进单元测试生成质量
方法详解¶
整体框架¶
CURE框架基于自博弈RL,利用生成代码与生成测试的交互创建成对奖励矩阵。核心思想是:
- 对每个任务,生成n个候选代码和m个单元测试
- 执行所有代码对所有测试,生成二进制评估矩阵B∈{0,1}^(n×m)
- 基于评估矩阵估计奖励,训练代码生成器和测试生成器
关键设计¶
-
理论推导的奖励设计: 通过分析奖励精度(能否正确区分正确代码与错误代码),推导出个体单元测试的奖励函数:R_uk = -∑(1-I_sl)·B_l,k + (∏I_sl·B_l,k)·(∑(1-I_sl))
-
共同进化对象函数: 采用PPO/GRPO框架,分离优化代码和测试:
- 代码奖励:R_sj = ∑l B(通过ground-truth测试的个数)
-
测试奖励:基于上述微调的μ参数
-
长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相比)
关键发现¶
- 无监督共同进化的有效性: 即使没有ground-truth标注,单测和代码也能互相指导,形成正反馈
- 响应长度指导的重要性: 对长链模型,动态调整奖励确保生成效率,关键是在Pass@k上的整体改进
- 可迁移性: 训练好的单元测试生成器可作为RL的奖励模型,无需额外标注
亮点与洞察¶
- 理论完整性: 从奖励精度分析出发,推导出三种不同的奖励设计,形成完整的理论框架
- 无监督学习: 突破ground-truth代码的需求,证明自博弈可行
- 双向增强: 单测改进代码→代码失败样例改进单测→形成正反馈循环
- 实际价值: 无需外部标注即可持续改进,适应不同规模和类型的编码任务
局限性¶
- 初始质量依赖: 依赖初始模型的基础能力,较弱的base model可能难以启动自演化
- test-time compute: 需要生成多个候选和测试,推理成本较高
- 长序列挑战: 虽然提出了长CoT优化,但4K-32K上下文的效率仍有限制
- 任务局限: 主要评估在数学编码任务,其他领域(如文本生成)的泛化性未知
相关工作¶
- 单元测试生成: 传统方法(软件分析)、O1-Coder(使用ground-truth)、UTGEN(混合正负样本)
- test-time scaling: Best-of-N策略、AlphaCodium的自修正、S*的配对判别
- RL for code: PPO/GRPO等标准算法在coding任务中的应用
评分¶
⭐⭐⭐⭐⭐