驾驭 Copilot:融合大语言模型与补全引擎实现自动化程序修复
软件工程
2023-11-10 v3 机器学习
编程语言
摘要
在自动化程序修复(APR)过程中,为通用编程语言中的真实系统合成正确补丁可能具有挑战性。近期的大语言模型(LLM)已被证明可作为辅助开发者完成各类编码任务的得力“副驾驶”,并已被直接应用于补丁合成。然而,大多数 LLM 将程序视为 token 序列,意味着它们忽视了目标编程语言的底层语义约束。这导致大量静态无效的生成补丁,削弱了该技术的实用性。因此,我们提出 Repilot,一种通用代码生成框架,通过在修复过程中合成更多有效补丁来进一步驾驭 AI“副驾驶”(即 LLM)。我们的核心见解是,许多 LLM 以自回归方式(即逐 token)产生输出,类似于人类编写程序,可通过补全引擎显著加速与引导。Repilot 通过 LLM 与补全引擎的交互协同合成候选补丁,其 1) 剪枝掉 LLM 建议的不可行 token,且 2) 基于补全引擎提供的建议主动补全 token。我们在广泛使用的 Defects4j 1.2 和 2.0 数据集子集上的评估表明,Repilot 分别比最先进技术多修复 27% 和 47% 的缺陷。此外,在同等预算下,Repilot 比基础 LLM 产生更多有效且正确的补丁。尽管本工作聚焦于将 Repilot 用于 APR,该整体方法亦可推广至其他代码生成任务。
引用
@article{arxiv.2309.00608,
title = {Copiloting the Copilots: Fusing Large Language Models with Completion Engines for Automated Program Repair},
author = {Yuxiang Wei and Chunqiu Steven Xia and Lingming Zhang},
journal= {arXiv preprint arXiv:2309.00608},
year = {2023}
}
备注
Paper accepted at ESEC/FSE 2023