在代码生成领域,自我调试非常关键。它允许LLM根据执行反馈来完善其生成的代码。这是特别重要的,因为对于复杂任务来说,在一次尝试中生成正确的解决方案是具有挑战性的。以往关于自我调试的研究主要集中在通过提供少量示例来引导LLM的方法,但这在小型开源LLM上效果不佳。在这项工作中,我们提出了一个训练框架,显著提高了LLM的自我调试能力。直观地说,我们观察到在错误代码的一系列解释后跟随代码完善有助于LLM更好地分析错误代码并进行完善。因此,我们提出了一个自动化流程来收集高质量的代码解释和完善数据集,通过生成一些解释和完善轨迹并通过执行验证进行筛选。我们对成功和失败的轨迹进行了监督微调(SFT)和进一步的强化学习(RL),采用一种新颖的奖励设计,考虑代码解释和完善的质量。SFT在四个基准测试中将pass@1提高了高达15.92%,将pass@10提高了9.30%。RL训练在pass@1上额外提高了3.54%,在pass@10上提高了2.55%。训练后的LLM表现出迭代完善能力,可以不断完善代码。最后,我们的人类评估表明,使用我们的框架训练的LLM生成更有用的代码解释,帮助开发人员更好地理解源代码中的错误。
提问交流