前置知识: AI工程

代码库RAG与跨仓库语义搜索

3 minAdvanced

2026年每个严肃工程组织都运行理解语义的内部代码搜索:tree-sitter解析、函数/类级分块、混合搜索(稠密+BM25)、重排序、带引用的回答。构建处理2M行代码跨10个仓库的系统,在每次git push时存活增量重新索引。

问题

到2026年每个前沿编码代理都配备代码库检索层,因为上下文窗口本身不能解决跨仓库问题。Claude的1M token上下文有帮助;它不消除对排序检索的需求。朴素余弦搜索在生成代码、monorepo重复和罕见导入符号长尾上毒害结果。生产答案是AST感知分块上的混合(稠密+BM25)搜索加重排序器,由符号引用支持。

你通过索引真实舰队——不是一个教程仓库——来学习这一点,并测量MRR@10、引用忠实度和增量新鲜度。失败模式是基础设施性的:100k文件monorepo、触及一半文件的push、需要跨四个仓库才能正确回答的查询。

核心架构

摄取管线

  1. 克隆与解析。 Git clone + tree-sitter解析为AST。
  2. 分块。 函数级和级分块,保留符号边界。
  3. 嵌入。 稠密嵌入(代码模型)+ BM25稀疏索引。
  4. 符号图。 构建跨仓库引用(谁导入谁)。

混合检索

稠密搜索捕获语义相似性;BM25捕获精确token匹配。生产系统两者都运行并合并结果。重排序器(bge-reranker-v2-gemma风格)对合并候选重新排序。

增量索引

每次git push触发增量重新索引:仅重新解析变更文件,更新受影响分块的嵌入,更新符号。2M行代码库的完整重新索引需要小时;增量在秒级完成。

评估

MRR@10(前10结果中正确答案的倒数排名均值)、引用忠实度(回答是否正确归属源代码)、增量新鲜度(push后多久新代码出现在搜索结果中)。

关键术语

术语常见说法实际含义
Hybrid search”混合搜索”稠密+BM25组合检索
AST-aware chunking”AST感知分块”按语法结构而非固定长度切分代码
Symbol graph”符号跨仓库导入/引用关系
MRR@10”倒数排名均值”前10结果中正确答案排名的评估指标
Incremental re-index”增量重新索引”仅更新变更文件的索引

延伸阅读

  • Sourcegraph Amp — 企业代码搜索
  • Cursor codebase answers — IDE集成代码搜索
  • Augment enterprise graph — 代码知识