混合检索 + 依赖图扩展优于仅嵌入的代码 RAG——可测量、CI 门控
摘要
Archex 是一款新的开源代码 RAG 工具,通过结合混合搜索(BM25F + 密集嵌入)、交叉编码器重排序和依赖图扩展来改进检索,与纯基于嵌入的方法相比,实现了更高的召回率和令牌效率。
大多数“与你的代码库对话”的工具都是纯向量搜索:嵌入代码片段,按余弦相似度返回 top-k。对于代码来说,这遗漏了很多信息,而且我有数据支持。`archex` 不是仅仅搜索上下文,而是组装上下文。流程如下:
1. **混合检索** — BM25F(词汇) + 密集向量,通过互惠排名融合进行融合。词汇匹配捕获嵌入遗漏的精确符号/标识符匹配;密集匹配捕获语义短语。由于查询集不重叠,融合严格有助于提升(与 CodeRAG-Bench 一致,arXiv 2406.20906)。
2. **本地交叉编码器重排序**,对融合后的候选项进行重排。
3. **依赖图扩展** — 拉入导入链邻居,使得上下文包是依赖封闭的。代理无需手动追踪导入。
4. **上下文组装** — 文件多样性打包,嵌套行范围抑制,生产代码优先于测试代码排序,全部在令牌预算内。输出是一个完整的上下文包,而不是一堆命中结果。
与 cocoindex-code(仅嵌入)相比的结果,在 19 个外部仓库任务上,相同的令牌计数:
- 召回率 0.95 vs 0.32
- 精确率 0.51 vs 0.36
- F1 分数 0.66 vs 0.31
- 令牌效率 0.76 vs 0.48
- 完成惩罚令牌(代理完成任务所需的令牌):922 vs 11,188
真正的基准不是另一个索引,而是 grep:召回率 1.00,令牌效率 0.00。这里检索的全部意义在于,用稀疏的令牌获得接近 grep 的召回率。一切都是确定性的,门控在 CI 中运行——测试框架在仓库中,因此你可以复现表格。Apache 2.0,我的项目,alpha 阶段。
相似文章
RAG Retrieval Deep Dive: BM25, Embeddings, and the Power of Agentic Search
本文深入对比了BM25词法搜索和嵌入语义搜索在RAG检索中的优缺点,给出了根据查询类型和系统权衡选择检索方法的实用框架,强调了将RAG视为系统而非简单组件的重要性。
ContextRAG:面向检索增强生成的无抽取层次图构建
ContextRAG引入了一种无抽取方法,用于构建面向检索增强生成的层次图索引。该方法利用残差量化K均值(Residual-Quantization K-Means)和形式概念分析(Formal Concept Analysis),将大语言模型(LLM)调用和Token数量减少数个数量级,同时在多跳问题上保持具有竞争力的F1分数。
介绍上下文检索
Anthropic 推出了上下文检索,这是一种结合了上下文嵌入和 BM25 的技术,通过减少检索失败的情况,显著提高了 RAG 的准确性。
哪种RAG范式在大规模下胜出?检索增强生成范式的规模化研究
本文通过控制变量,对词汇型、密集向量型、图基型和智能体型RAG范式在从1,000到512,000篇文档的语料规模范围内进行了规模化比较研究。研究发现BM25在准确性与成本之间取得了最佳平衡,而图基型RAG面临高昂的构建成本,限制了其扩展性。
@vicky_grok:https://x.com/vicky_grok/status/2092448354815099378
本文深入探讨了检索增强生成(RAG)和向量搜索,基于10万份文档的基准测试,展示了精确搜索与IVF索引在速度和召回率之间的权衡。