首页/AI/RAG 与向量库速查/混合检索(向量 + BM25)
Embedding 与检索50 条

混合检索(向量 + BM25)

混合检索同时跑向量与关键词两路召回再合并:语义问题靠向量、专名与精确匹配靠 BM25,覆盖单路召回失效的场景。

RAG 与向量库速查AI更新于 2026-10-13

混合检索是什么

混合检索同时跑两路召回再合并:向量路负责语义近似,关键词路(BM25)负责专名与精确匹配。它解决的是单路召回的盲区问题——用户换个说法时靠向量兜住,出现型号与编号时靠关键词兜住。两路各取几十条候选,融合排序后交给重排与生成。

基本信息

组成向量检索 + 关键词检索 + 融合排序
候选池各路通常取 20 至 100 条,再由重排精挑
融合方式排名融合(RRF)或归一化后的加权分数融合
前置条件中文语料必须配好分词器,否则关键词路噪声大

两路召回骨架

两路召回骨架
def hybrid_search(q, k=20):
    dense_hits = vector_store.search(embed(q), top_k=k)
    sparse_hits = bm25_index.search(q, top_k=k)
    return fuse(dense_hits, sparse_hits)   # 见 RRF / 加权融合

融合方式

融合方式特点
RRF(排名融合)只用排名不用分数,免调权重,跨系统稳定
加权分数融合先归一化两路分数,权重可调,要防失衡

落地检查点

  • 先各跑单路基线,记录召回率;混合只有在单路都有贡献时才有意义
  • 确认两路的文档 id 体系一致,否则融合时无法判定是否同一片段
  • 融合后按内容哈希或 chunk_id 去重,避免同一内容占多个上下文名额
  • 用最差场景压测:专名密集的查询与口语化查询各测一批
  • 线上保留可切换的单路开关,混合出现异常时可快速降级
上线前给混合与单路各建评测基线,确认混合带来实际收益再保留这份复杂度;若两路结果高度重叠,收益可能不足以覆盖额外延迟。

两路候选怎么配比

两路候选池通常等量起步,但配比要看语料:技术手册专名密集,关键词路的候选可以多给一些;口语化客服语料以向量路为主。融合后要再做一次去重与截断,把条数压到重排能承受的范围(通常不超过一百条),否则精排耗时会把检索阶段的收益吃掉。

融合排序只决定候选进入重排的顺序,不决定最终答案:不要在融合环节追求过高精度,把排序质量的判断交给重排与评测。参数变更后记得同步更新评测基线,避免前后结论不可比。

易错点

  • 两路各取 top-k 直接拼接不融合排序,上下文被单路结果挤占
  • 关键词路分析器未调好(分词、停用词),混合后整体效果反而下降
  • 两路文档 id 体系不统一,融合阶段无法识别重复片段
  • 候选池设得过小,两路都没召回正确答案,融合只是在错集合里排序

数据来源与参考

  • Elasticsearch 官方文档(Hybrid search)
  • Gao et al., RAG for LLMs: A Survey(混合检索)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌