RLCoder: Reinforcement Learning for Repository-Level Code Completion

47th International Conference on Software Engineering (ICSE 2025)
2024年07月28日
  • 简介
    本文介绍了一种名为“Repository-level code completion”的方法,旨在在指定代码库的上下文中生成未完成代码片段的代码。现有方法主要依赖于检索增强的生成策略,因为输入序列长度受限。然而,传统的基于词汇的检索方法(如BM25)难以捕捉代码语义,而基于模型的检索方法则面临训练数据不足的挑战。因此,本文提出了一种新颖的强化学习框架RLCoder,可以使检索器学习检索有用的内容以进行代码补全,而无需标记数据。具体来说,我们通过迭代评估检索到的内容的有用性,根据目标代码的困惑度来提供反馈以更新检索器参数。这个迭代过程使得检索器能够从成功和失败中学习,逐渐提高检索相关和高质量内容的能力。考虑到并非所有情况都需要超出代码文件的信息,也不是所有检索到的上下文都有助于生成,因此我们还引入了一个停止信号机制,允许检索器自主决定何时检索以及保留哪些候选项。广泛的实验结果表明,RLCoder在CrossCodeEval和RepoEval上始终优于现有的最先进方法,比以前的方法提高了12.2%的EM。此外,实验表明,我们的框架可以在不同的编程语言之间进行泛化,并进一步改进以前的方法,如RepoCoder。我们在https://github.com/DeepSoftwareAnalytics/RLCoder上提供代码和数据。
  • 图表
  • 解决问题
    RLCoder试图解决仓库级代码补全中的检索问题,即如何检索到对代码补全有用的内容。
  • 关键思路
    RLCoder提出了一种基于强化学习的框架,通过迭代评估检索到的内容对目标代码的困惑度来更新检索器参数,从而使检索器逐渐学习检索相关且高质量的内容。
  • 其它亮点
    RLCoder在CrossCodeEval和RepoEval上的实验结果表明其优于现有的方法,实验还表明RLCoder可以推广到不同的编程语言,并且可以进一步提高先前的方法。研究者提供了代码和数据集。
  • 相关研究
    最近的相关研究包括:RepoCoder、CodeBERT、GPT等。
PDF
原文
点赞 收藏 评论 分享到Link

沙发等你来抢

去评论