论文

SpecCoder:通过课程双任务强化学习生成规范感知代码

SpecCoder: Specification-Aware Code Generation with Curriculum Dual-Task Reinforcement Learning

模型训练强化学习

摘要

大语言模型 (LLM) 在代码生成方面取得了实质性进展,但仍然难以应对需要理解丰富的自然语言要求的挑战性编程任务。这些需求通常指定问题目标、输入/输出格式、约束、示例和边缘情况。即使忽略其中一个也可能产生可执行但功能不正确的代码。现有的 无需训练 方法主要依赖于提示或基于代理的工作流程,而基于训练的方法通常会优化最终的代码输出。然而,现有的方法对于学习从原始需求到结构化规范的中间映射以及将它们扎根于具体的实现行为提供了有限的监督。因此,模型可能会忽略关键约束,即使生成了明确的规范,实现也可能无法一致地反映它。出于这一差距,我们提出了 SpecCoder,一种用于代码生成的规范感知两阶段训练框架。 SpecCoder 首先采用规范引导的 SFT 来训练 LLM,以导出结构化规范分析并生成以它们为条件的代码。然后引入课程双任务 GRPO,联合优化规范引导的生成和区分,以鼓励规范和代码行为之间更强的对应性。 APPS、CodeContests 和 xCodeEval 上的实验证明了规范感知训练的有效性,SpecCoder 不断改进独立代码生成和基于代理的工作流程。对 BigCodeBench-Hard 和 ClassEval 的额外评估,以及人类评估和扰动研究,进一步验证了结构化规范在指导代码生成和区分方面的作用。