摘要
arXiv:2405.18649v2 自调试类型: 替换-交叉
摘要:在代码生成的领域中,自调试至关重要。它使LLM可以在根据执行反馈的基础上对其生成的代码进行完善。这在其特性和复杂任务中尤为重要,因为一次性生成正确的解决方案非常具有挑战性。先前的自调试工作主要集中在通过提供少量示例的方法对LLM进行提示,但这种方法在小型开源LLM上效果不佳。在本工作中,我们提出了LeDex,这是一种显著提高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生成了更有用的代码解释,并帮助开发者更好地理解源代码中的错误。