论文
生成后精炼:在基于 LLM 的程序修复中实现正确、简洁的补丁
Refine After Generation: Toward Correct and Concise Patches in LLM-based Program Repair
摘要
大语言模型 (LLM) 具有先进的自动程序修复 (APR),代理系统可以定期解决现实世界的存储库级问题。然而,除了是否通过测试之外,生成的补丁几乎没有受到任何审查。在本文中,我们将补丁冗长视为基于 LLM 的 APR 中一个主要但被忽视的问题。通过表征 SWE-bench Verified 上的 28 种最先进的方法,我们发现即使是成功的补丁也始终比开发人员补丁更大、更复杂,中位数方法产生的总更改多出 121.78%,净更改多出 80.91%,圈复杂度高出 43.99%。我们进一步表明,这种冗长植根于以能力为导向的设计选择,例如迭代细化和广泛的上下文,并且很难通过输出格式或最小化提示等表面控制来减少。受这些发现的启发,我们制定了生成后的补丁细化,并提出了 RECAP,这是一种轻量级、即插即用的适配器,可在生成后附加到现有的修复框架。 RECAP 的精炼器是在我们从多个来源构建的补丁对数据集上通过监督 微调 和直接偏好优化以及蒸馏推理轨迹进行训练的。在四个主机系统中,提示、提交梳理和最小化感知基线仅通过牺牲 49 到 217 个已解析实例来减少补丁大小。相比之下,RECAP 实现了更好的大小正确性权衡,相对于开发人员补丁,平均总变化从 +242.14% 减少到 +4.24%,净变化从 +348.24% 减少到 -39.75%,同时保留或提高分辨率多达 42 个实例。我们的结果表明,极少性不能简单地简化为句法压缩,并且将极小化与生成解耦为更可审查的修复提供了一条实用途径。