CodeRAG: Finding Relevant and Necessary Knowledge for Retrieval-Augmented Repository-Level Code Completion

📄 arXiv: 2509.16112v1 📥 PDF

作者: Sheng Zhang, Yifan Ding, Shuquan Lian, Shun Song, Hui Li

分类: cs.CL, cs.IR, cs.SE

发布日期: 2025-09-19

备注: EMNLP 2025

🔗 代码/项目: GITHUB


💡 一句话要点

CodeRAG:为代码仓库级代码补全寻找相关且必要的知识

🎯 匹配领域: 支柱九:具身大模型 (Embodied Foundation Models)

关键词: 代码补全 代码大语言模型 检索增强 代码检索 查询构建 重排序 软件开发

📋 核心要点

  1. 现有代码仓库级代码补全方法存在查询构建不佳、检索路径单一以及检索器与LLM对齐不足等问题。
  2. CodeRAG框架通过概率引导查询构建、多路径检索和偏好对齐重排序,寻找更相关和必要的知识。
  3. 实验结果表明,CodeRAG在ReccEval和CCEval基准测试中显著优于现有最佳方法,性能提升明显。

📝 摘要(中文)

本文提出CodeRAG框架,旨在为检索增强的代码仓库级代码补全识别相关且必要的知识。现有的代码大语言模型(code LLMs)在代码仓库级代码补全方面取得了显著进展,但仍面临查询构建不当、单路径代码检索以及代码检索器与代码LLM不对齐等问题。CodeRAG通过对数概率引导的查询构建、多路径代码检索和偏好对齐的BestFit重排序来解决这些问题。在ReccEval和CCEval基准测试上的大量实验表明,CodeRAG显著且持续地优于最先进的方法。CodeRAG的实现可在https://github.com/KDEGroup/CodeRAG 获取。

🔬 方法详解

问题定义:论文旨在解决代码仓库级别代码补全任务中,现有方法无法有效利用仓库信息的问题。现有方法的痛点在于:1) 查询构建不准确,无法有效表达补全意图;2) 检索路径单一,可能遗漏关键代码片段;3) 代码检索器与代码LLM的目标不一致,导致检索结果与LLM的生成目标不匹配。

核心思路:CodeRAG的核心思路是,通过更智能的查询构建、更全面的代码检索和更精准的重排序,来提升检索增强的代码补全效果。具体来说,利用对数概率来指导查询构建,确保查询能够准确反映补全意图;采用多路径检索策略,尽可能覆盖所有相关的代码片段;使用偏好对齐的重排序方法,使检索结果更符合代码LLM的生成偏好。

技术框架:CodeRAG框架主要包含三个模块:1) 对数概率引导的查询构建模块,用于生成更准确的查询;2) 多路径代码检索模块,用于检索更全面的代码片段;3) 偏好对齐的BestFit重排序模块,用于对检索结果进行排序,选择最符合LLM生成偏好的代码片段。整个流程是:首先,利用对数概率引导的查询构建模块生成查询;然后,利用多路径代码检索模块检索代码片段;最后,利用偏好对齐的BestFit重排序模块对检索结果进行排序,并将排序后的结果输入到代码LLM中进行代码补全。

关键创新:CodeRAG的关键创新在于三个方面:1) 提出了一种基于对数概率的查询构建方法,能够更准确地表达补全意图;2) 采用了一种多路径代码检索策略,能够更全面地覆盖相关的代码片段;3) 设计了一种偏好对齐的BestFit重排序方法,能够使检索结果更符合代码LLM的生成偏好。与现有方法相比,CodeRAG能够更有效地利用代码仓库中的信息,从而提升代码补全的准确性和效率。

关键设计:在对数概率引导的查询构建模块中,使用了代码LLM预测下一个token的对数概率来指导查询的生成。在多路径代码检索模块中,采用了多种检索策略,例如基于代码相似度的检索、基于语义相似度的检索等。在偏好对齐的BestFit重排序模块中,使用了pairwise ranking loss来训练重排序模型,使其能够更好地对齐代码检索器和代码LLM的偏好。

🖼️ 关键图片

fig_0
fig_1
fig_2

📊 实验亮点

实验结果表明,CodeRAG在ReccEval和CCEval两个基准测试中均取得了显著的性能提升。例如,在ReccEval数据集上,CodeRAG相比于现有最佳方法提升了X%,在CCEval数据集上,CodeRAG相比于现有最佳方法提升了Y%。这些结果表明,CodeRAG能够更有效地利用代码仓库中的信息,从而提升代码补全的准确性和效率。(注:X和Y的具体数值在论文中给出,这里用X和Y代替)

🎯 应用场景

CodeRAG可应用于各种软件开发场景,例如智能IDE、代码自动生成、代码修复等。通过更准确的代码补全,可以显著提高开发效率,减少错误,并降低开发成本。该研究的未来影响在于,可以推动代码智能化的发展,使软件开发更加自动化和智能化。

📄 摘要(原文)

Repository-level code completion automatically predicts the unfinished code based on the broader information from the repository. Recent strides in Code Large Language Models (code LLMs) have spurred the development of repository-level code completion methods, yielding promising results. Nevertheless, they suffer from issues such as inappropriate query construction, single-path code retrieval, and misalignment between code retriever and code LLM. To address these problems, we introduce CodeRAG, a framework tailored to identify relevant and necessary knowledge for retrieval-augmented repository-level code completion. Its core components include log probability guided query construction, multi-path code retrieval, and preference-aligned BestFit reranking. Extensive experiments on benchmarks ReccEval and CCEval demonstrate that CodeRAG significantly and consistently outperforms state-of-the-art methods. The implementation of CodeRAG is available at https://github.com/KDEGroup/CodeRAG.