作者: Fengji Zhang, Bei Chen, Yue Zhang, Jacky Keung, Jin Liu, Daoguang Zan, Yi Mao, Jian-Guang Lou, Weizhu Chen
提交/修订日期: 2023年3月22日提交,2023年10月20日修订 (v3)
摘要:
仓库级代码补全的任务是基于代码仓库的更广泛上下文来续写未完成的代码。然而,对于自动化代码补全工具而言,利用散布在不同文件中的有用信息是困难的。我们提出了 RepoCoder,一个简单、通用且有效的框架来应对这一挑战。它通过将基于相似性的检索器与预训练的代码语言模型结合到一个迭代的检索-生成流程中,简化了仓库级代码补全过程。RepoCoder 能够有效利用仓库级信息进行代码补全,并具备生成不同粒度代码的能力。此外,我们提出了一个新的基准测试 RepoEval,它由最新、高质量的真实世界仓库组成,涵盖了行级、API调用和函数体补全场景。实验结果表明,RepoCoder 在所有设置下均显著优于仅使用文件内上下文的基线方法,提升幅度超过10%,并且始终优于朴素的检索增强代码补全方法。此外,我们通过全面的分析验证了 RepoCoder 的有效性,为未来的研究提供了有价值的见解。我们的源代码和基准测试已公开。
主题/分类:
- 计算与语言 (cs.CL)
- 人工智能 (cs.AI)
- 编程语言 (cs.PL)
- 软件工程 (cs.SE)
备注: 已被 EMNLP 2023 主会议接收。
资源链接: GitHub 仓库