llm-wiki wiki · concepts 2026-05-12

并行跑多种召回 + 用 RRF(Reciprocal Rank Fusion)公式合并排名的检索模式。claude-context 的核心检索机制。

为什么单一检索不够

检索类型 擅长 短板
Dense 向量 概念匹配("用户登录" 命中 authenticateUser 精确符号召不回("JWT_SECRET" 可能漂掉)
Sparse 向量 / BM25 精确符号、罕见词(函数名、常量名) 同义改写完全召不回
关键词字符串匹配 完全精确 改写一字就废

任何单一信号都有盲区 —— 并集召回 + 智能合并 > 任何单一策略。

Hybrid Search 在 claude-context 的实现

vectorDB.hybridSearch({
  queries: [
    { type: 'dense',  vector: denseEmb,  params: { nprobe: 10 } },
    { type: 'sparse', vector: sparseEmb, params: { drop_ratio: 0.2 } }
  ],
  rerank: { strategy: 'rrf', k: 100 }
})

Milvus 在一个 collection 里同时存 dense + sparse 双向量字段,一次 RPC 完成两路召回 + 重排。

RRF 公式

score(doc) = Σ_i  1 / (k + rank_i(doc))

性质
- 排名信号即可,不依赖各路 score 的绝对量级——避免不同信号量纲不可比的难题
- 多路同时命中得分翻倍,单路命中也有分(不会 0 分丢失)

应用到 Agent 记忆 / RAG 的检索

代码以外的场景同样适用,建议并行跑:

信号 用途
向量相似度 语义匹配
关键词 / BM25 精确符号、专有名词
时间衰减 最近优先(适合记忆场景)
metadata 过滤 业务约束(项目、用户、标签)

最后 RRF 合并即可。这是企业级 RAG 的标配。

与三层搜索协议的关系

three-tier-search-protocol 解决返回多少(先 ID + 摘要,再按需取详情),hybrid + RRF 解决怎么找到(多信号并集)。两者正交、可叠加:

hybrid + RRF  →  ID 列表 + 摘要  →  按需 get_observations
   (找到)            (返摘要)          (取详情)

参考