[论文解读] Repair Is Nearly Generation: Multilingual Program Repair with LLMs
该论文提出 ring,一个基于 Codex 的多语言程序修复系统,将修复任务视为涉及定位、转换和候选排序的提示工程任务。该系统在六种编程语言(包括 PowerShell)中实现了与特定语言修复引擎相当或更优的性能,表明大型语言模型可实现高效、低投入的多语言修复,采用一种反转的交互模式,即 AI 修复代码而非建议补全。
Most programmers make mistakes when writing code. Some of these mistakes are small and require few edits to the original program -- a class of errors recently termed last mile mistakes. These errors break the flow for experienced developers and can stump novice programmers. Existing automated repair techniques targeting this class of errors are language-specific and do not easily carry over to new languages. Transferring symbolic approaches requires substantial engineering and neural approaches require data and retraining. We introduce RING, a multilingual repair engine powered by a large language model trained on code (LLMC) such as Codex. Such a multilingual engine enables a flipped model for programming assistance, one where the programmer writes code and the AI assistance suggests fixes, compared to traditional code suggestion technology. Taking inspiration from the way programmers manually fix bugs, we show that a prompt-based strategy that conceptualizes repair as localization, transformation, and candidate ranking, can successfully repair programs in multiple languages with minimal effort. We present the first results for such a multilingual repair engine by evaluating on 6 different languages and comparing performance to language-specific repair engines. We show that RING can outperform language-specific repair engines for three of these languages.
研究动机与目标
- 解决在多种编程语言中以最小工程投入修复小型、语法级错误(称为“最后一英里错误”)的挑战。
- 探索单一大型语言模型(LLM)是否可作为多语言修复引擎,避免对特定语言进行训练或符号工程。
- 评估提示驱动修复策略的可行性与有效性,该策略模拟人类开发者定位、转换和排序修复方案的行为。
- 为 PowerShell 程序修复引入一个新基准,将最后一英里修复的范围扩展至主流语言之外。
- 实现一种“反转”的 AI 编程辅助模式,即用户编写代码,AI 提出修复建议,而非 AI 根据提示生成代码。
提出的方法
- 该系统将程序修复分解为三个阶段:使用错误信息或向量进行故障定位,通过少量示例提示模板进行代码转换,以及使用基于相似度的检索进行候选排序。
- 系统采用 Codex 作为底层 LLM,利用其少量示例学习能力,在无需微调的情况下实现跨语言泛化。
- 使用精心整理的错误-修复代码对示例库进行少量示例提示,检索基于错误信息相似度或错误类别向量。
- 在故障定位方面,系统通过移除与位置相关的细节来抽象错误信息,提升对相似错误的泛化能力。
- 该方法支持基于错误向量和基于信息嵌入的少量示例选择,具体取决于语言工具提供的错误报告粒度。
- 通过构建特定语言的示例库并相应配置错误抽象与检索策略,系统可轻松适配新语言。
实验结果
研究问题
- RQ1单一大型语言模型(LLM)是否能以最小工程投入有效执行多语言程序修复,且性能优于特定语言修复系统?
- RQ2提示驱动策略(模拟人类调试行为)在包括 PowerShell 和 C 在内的多种编程语言中泛化效果如何?
- RQ3在少量示例选择中的设计选择(如错误向量 vs. 消息嵌入)对修复成功率的影响最大?
- RQ4抽象化错误信息(如移除与位置相关的细节)在多大程度上能提升修复的泛化能力,特别是在低代码或自然语言错误环境中?
- RQ5能否有效实现一种“反转”的交互模式——即 AI 修复代码而非补全代码——并利用 LLM 实现最后一英里修复?
主要发现
- ring 在六种评估语言中的三种(Python、JavaScript 和 C)中优于特定语言修复引擎,证明使用 LLM 的多语言修复可超越单一语言系统。
- 系统在另外两种语言(PowerShell 和 Power Fx)中也实现了具有竞争力的性能,且为 PowerShell 引入的新基准表明其在低代码环境中的可行性。
- 使用抽象化错误信息(即移除与位置相关的细节)可提升修复的泛化能力,尤其在 Excel 和 PowerShell 等具有自然语言错误信息的语言中效果显著。
- 在错误类别粒度较高的语言(如 C 和 Python)中,基于错误向量的少量示例选择优于基于消息嵌入的选择。
- 即使在严格采用留一法示例库的情况下,系统性能依然稳健,表明基于检索的少量示例学习在极小示例集下仍能有效工作。
- 结果验证了“反转”AI 编程模式的可行性,即 AI 作为调试器而非代码补全器发挥作用,显著降低了开发工作流中的摩擦。
更好的研究,从现在开始
从阅读论文到最终审阅,大幅缩短您的研究时间。
无需绑定信用卡
本解读由 AI 生成,并经人工编辑审核。