QiMeng-PRepair: Precise Code Repair via Edit-Aware Reward Optimization
作者: Changxin Ke, Rui Zhang, Jiaming Guo, Yuanbo Wen, Li Ding, Shuo Wang, Xuyuan Zhu, Xiong Peng, Di Huang, Zidong Du, Xing Hu, Qi Guo, Yunji Chen
分类: cs.SE, cs.LG
发布日期: 2026-04-07
备注: Accepted to ACL 2026 main conference
💡 一句话要点
PRepair:通过编辑感知奖励优化实现精确代码修复
🎯 匹配领域: 支柱九:具身大模型 (Embodied Foundation Models)
关键词: 代码修复 大型语言模型 过度编辑 奖励优化 策略优化 程序修复 精确修复
📋 核心要点
- 现有代码修复模型存在过度编辑问题,导致正确代码被覆盖,影响错误定位。
- PRepair框架通过Self-Breaking生成多样化错误程序,Self-Repairing利用编辑感知奖励优化模型。
- 实验结果表明,PRepair显著提升了修复精度和解码吞吐量,尤其在fix_1@1指标下提升显著。
📝 摘要(中文)
大型语言模型(LLMs)在程序修复方面表现出色,但常常存在过度编辑的问题,即过多的修改会覆盖正确的代码,阻碍错误定位。本文系统地量化了过度编辑的影响,并提出了精确修复任务,该任务旨在最大程度地重用正确的代码,同时仅修复错误的部分。基于此,本文提出了PRepair框架,以减轻过度编辑并提高修复准确性。PRepair包含两个组成部分:Self-Breaking,通过受控的错误注入和min-max采样生成多样化的错误程序;Self-Repairing,使用编辑感知奖励,通过编辑感知组相对策略优化(EA-GRPO)训练模型,以鼓励最小但正确的编辑。实验表明,PRepair在fix_1@1指标下将修复精度提高了高达31.4%,该指标共同考虑了修复的正确性和范围,并且在与推测性编辑结合使用时,显著提高了解码吞吐量,证明了其在精确和实用的代码修复方面的潜力。
🔬 方法详解
问题定义:现有大型语言模型在代码修复任务中,常常会进行过度编辑,即在修复错误代码的同时,修改了原本正确的代码片段。这种过度编辑不仅浪费计算资源,还会降低修复的准确性和效率,因为模型难以准确定位并修复真正的错误所在。因此,论文旨在解决如何减少代码修复过程中的过度编辑,实现更精确的代码修复。
核心思路:论文的核心思路是通过引入编辑感知的奖励机制,引导模型在修复代码时尽可能少地修改正确的代码,同时确保修复的正确性。具体来说,模型需要学习区分哪些代码是错误的,哪些是正确的,并只对错误的代码进行修改。这种方法旨在提高修复的精度和效率,并减少不必要的计算开销。
技术框架:PRepair框架主要包含两个阶段:Self-Breaking和Self-Repairing。Self-Breaking阶段负责生成多样化的错误程序,通过受控的错误注入和min-max采样来实现。Self-Repairing阶段则利用生成的错误程序训练修复模型,采用编辑感知组相对策略优化(EA-GRPO)算法,并使用编辑感知奖励来鼓励模型进行最小但正确的编辑。整个框架的目标是训练出一个能够精确修复代码错误的模型,同时避免过度编辑。
关键创新:PRepair的关键创新在于提出了编辑感知的奖励机制和EA-GRPO算法。编辑感知奖励能够引导模型关注代码编辑的范围和正确性,鼓励模型只修改错误的代码。EA-GRPO算法则通过组相对策略优化,进一步提高了模型的修复精度和效率。与现有方法相比,PRepair能够更有效地减少过度编辑,实现更精确的代码修复。
关键设计:在Self-Breaking阶段,论文设计了受控的错误注入策略,以生成多样化的错误程序。在Self-Repairing阶段,论文设计了编辑感知奖励函数,该函数考虑了代码编辑的范围和正确性,并将其作为奖励信号反馈给模型。此外,EA-GRPO算法中的组相对策略优化也起到了关键作用,它能够帮助模型更好地学习如何进行精确的代码修复。具体的参数设置和网络结构细节在论文中有详细描述。
🖼️ 关键图片
📊 实验亮点
实验结果表明,PRepair框架在代码修复任务中取得了显著的性能提升。在fix_1@1指标下,PRepair的修复精度提高了高达31.4%,该指标同时考虑了修复的正确性和范围。此外,PRepair在与推测性编辑结合使用时,显著提高了解码吞吐量,证明了其在实际应用中的潜力。这些实验结果充分验证了PRepair框架的有效性和优越性。
🎯 应用场景
PRepair框架具有广泛的应用前景,可应用于软件开发、代码维护、自动化测试等领域。通过提高代码修复的精度和效率,PRepair可以帮助开发人员更快地定位和修复代码错误,减少软件缺陷,提高软件质量。此外,PRepair还可以应用于自动化代码审查和代码生成等任务,提高开发效率和降低开发成本。未来,PRepair有望成为一种重要的代码修复工具,为软件开发带来革命性的变革。
📄 摘要(原文)
Large Language Models (LLMs) achieve strong program repair performance but often suffer from over-editing, where excessive modifications overwrite correct code and hinder bug localization. We systematically quantify its impact and introduce precise repair task, which maximizes reuse of correct code while fixing only buggy parts. Building on this insight, we propose PRepair, a framework that mitigates over-editing and improves repair accuracy. PRepair has two components: Self-Breaking, which generates diverse buggy programs via controlled bug injection and min-max sampling, and Self-Repairing, which trains models with Edit-Aware Group Relative Policy Optimization (EA-GRPO) using an edit-aware reward to encourage minimal yet correct edits. Experiments show that PRepair improves repair precision by up to 31.4% under $\mathrm{fix}_1@1$, a metric that jointly considers repair correctness and extent, and significantly increases decoding throughput when combined with speculative editing, demonstrating its potential for precise and practical code repair.