RLCoder:基于强化学习的存储库级代码补全
软件工程
2024-07-31 v1
摘要
存储库级代码补全旨在生成指定存储库上下文中不完整代码片段的 code。现有方法主要依赖于检索增强生成策略,因为输入序列长度有限。然而,传统基于词汇的检索方法如 BM25 难以捕获代码语义,而基于模型的检索方法由于缺乏训练标签数据而面临挑战。因此,我们提出 RLCoder,一种新型强化学习框架,可使检索器在无需标签数据的情况下学习检索有用内容以进行代码补全。具体而言,我们基于目标 code 的 perplexity 当提供检索内容作为额外上下文时对检索内容的有用性进行迭代评估,并提供反馈以更新检索器参数。这个迭代过程使检索器能够从其成功与失败中学习,逐步提高检索相关且高质量内容的能力。鉴于并非所有情形都需要超出代码文件之外的信息,也并非所有检索上下文都对生成有帮助,我们还引入了停止信号机制,使检索器能够自主决定何时检索以及保留哪些候选内容。大量实验结果表明,RLCoder 在 CrossCodeEval 和 RepoEval 上 consistently 超过最新方法,实现了相对于先前方法的 12.2% EM 提升。此外,实验表明,我们的框架可在不同编程语言之间推广,并进一步提升诸如 RepoCoder 等先前方法。我们提供代码和数据位于 https://github.com/DeepSoftwareAnalytics/RLCoder。
引用
@article{arxiv.2407.19487,
title = {RLCoder: Reinforcement Learning for Repository-Level Code Completion},
author = {Yanlin Wang and Yanli Wang and Daya Guo and Jiachi Chen and Ruikai Zhang and Yuchi Ma and Zibin Zheng},
journal= {arXiv preprint arXiv:2407.19487},
year = {2024}
}
备注
To appear at ICSE 2025