- 简介由于跨文件依赖关系以及大语言模型(LLMs)上下文窗口长度受限,面向代码仓库级别的代码补全任务对当前LLM而言仍具挑战性。以往研究主要采用基于语义索引或结构感知图分析的检索增强生成(RAG)框架来应对这一挑战,但此类方法在索引构建与维护过程中需耗费大量计算资源。受开发者日常实践中广泛使用的轻量级搜索工具(例如 ripgrep)启发,我们重新审视了一个基础却长期被忽视的问题:在必须引入更复杂检索机制之前,简单、无需预建索引的词法检索究竟能在多大程度上有效支撑仓库级代码补全?为回答该问题,我们通过大规模实证分析,系统性地探究了轻量、免索引、且具备意图感知能力的词法检索方法。首先,我们提出基线框架“朴素 GrepRAG”(Naive GrepRAG),其中LLM自主生成 ripgrep 命令,以检索与当前补全任务相关联的上下文片段;尽管设计极为简洁,朴素 GrepRAG 的性能仍可媲美先进的图结构化基线方法。进一步分析表明,其有效性主要源于所检索到的代码片段在词法层面高度精准,且在物理位置上更靠近待补全处。同时,我们也识别出词法检索的关键局限性:一是易受高频歧义关键词引发的噪声匹配干扰;二是因截断边界过于刚性而导致上下文碎片化。为克服上述问题,我们提出了改进版 GrepRAG 框架:它在词法检索基础上,引入一个轻量级后处理流程,包含基于标识符重要性的重排序(identifier-weighted re-ranking)和结构感知的去重机制(structure-aware deduplication)。在 CrossCodeEval 和 RepoEval-Updated 两大基准数据集上的全面评估表明,GrepRAG 始终优于当前最优(SOTA)方法;在 CrossCodeEval 上,其代码精确匹配率(Exact Match, EM)相较最佳基线方法实现了 7.04%–15.58% 的相对提升。
-
- 图表
- 解决问题如何在不构建昂贵索引的前提下,利用轻量级、无索引的词法检索(如 ripgrep)支持仓库级代码补全?该问题挑战了当前主流RAG方法对语义索引或代码图结构的依赖假设,验证‘简单词法检索在多大程度上可替代复杂检索机制’这一被长期忽视的基础性问题。
- 关键思路提出‘意图感知的无索引词法检索’范式:让LLM自主生成ripgrep命令进行上下文检索(Naive GrepRAG),并进一步引入轻量后处理(标识符加权重排序 + 结构感知去重)形成GrepRAG;核心新意在于摒弃预建索引与嵌入计算,转而利用开发者真实工作流中的工具链原语(grep)和代码局部性先验,实现高效、可解释、低开销的检索增强。
- 其它亮点在CrossCodeEval和RepoEval-Updated上实现SOTA性能,相对最佳基线提升7.04–15.58% EM;实验设计严谨——包含消融分析(验证词法精度与空间邻近性的因果作用)、噪声鲁棒性测试及上下文碎片归因;未提及其开源代码,但所有检索命令与后处理逻辑完全透明、可复现;值得深入的方向包括:LLM生成grep命令的泛化能力边界、跨语言词法检索适配、以及将‘工具调用即检索’范式推广至调试/测试生成等场景。
- 1. CodeGraphRAG: Structure-Aware Retrieval for Repository-Level Code Completion (ICSE'24);2. RepoCoder: Repository-Level Code Completion with LLMs and Graph Retrieval (ACL'23);3. RAG-Code: Semantic Retrieval Augmentation for Code LLMs via Dense Indexing (EMNLP'23);4. CodeT5+RAG: Lightweight Retrieval-Augmented Code Generation Using BM25 (arXiv:2310.19637);5. SWE-bench: Multi-Step Real-World GitHub Issues for Code Generation Evaluation (ICML'24)
NEW
提问交流
提交问题,平台邀请作者,轻松获得权威解答~
向作者提问

提问交流