Skip to content

12.1.1 什么是多路召回(Multi-Retrieval)? ​

先给结论:多路召回的本质是“用不同检索路径覆盖不同信号”,减少单一路径的盲区。它不是为了堆复杂度,而是为了让关键证据更稳定地回到候选集中。

很多检索不稳的问题,根因并不是“某条检索链路太弱”,而是:

  • 不同问题需要不同检索信号

例如:

  • 术语、编号、字段名更适合关键词检索
  • 语义改写、口语化表达更适合向量检索
  • 多文档综合问题更适合混合召回 + 重排

多路召回就是把这些信号并行跑起来,再做统一选择。

多路召回解决的是什么问题 ​

多路召回更擅长解决这些问题:

  • 单一路径对某些问题类型明显失效
  • 不同问题在同一召回策略下波动很大
  • 复杂问题需要同时覆盖语义与精确关键词

它的目标是:

  • 让“关键证据进候选”的概率稳定上升

常见的多路召回组合 ​

常见组合包括:

  • 向量检索 + 关键词检索(最常见)
  • 多向量检索器并行(不同嵌入模型)
  • 主题检索 + 结构化检索
  • 分文档源召回(不同知识源独立召回)

这些组合的共同点是:

  • 不同召回路径负责不同信号

多路召回的基本流程 ​

更通用的流程大致是:

  1. 多路并行召回
  2. 合并候选
  3. 去重与聚合
  4. 统一排序或重排

一个最小示意如下:

python
def multi_retrieval(query):
    candidates = []
    candidates += vector_retriever(query, top_k=30)
    candidates += keyword_retriever(query, top_k=30)
    candidates = dedup(candidates)
    return rerank(query, candidates)

这个示意强调的不是代码细节,而是:

  • 多路并行 + 合并 + 选择

什么时候值得引入多路召回 ​

如果你的系统出现这些信号,多路召回通常值得考虑:

  • 术语问题表现明显差
  • 改写问法后召回差异巨大
  • 单路召回对复杂问题稳定性不够
  • 不同任务类型表现差异明显

多路召回的常见误区 ​

误区一:多路召回等于“召回越多越好” ​

如果没有后续选择机制,候选池会变得很脏,反而伤害最终质量。

误区二:多路召回可以替代重排 ​

多路召回只是把候选拉回来,并不保证顺序。没有重排或选择,噪声会更严重。

误区三:所有问题都走多路召回 ​

多路召回会增加成本和复杂度。对简单问题,单路召回可能已经足够。

一句话总结 ​

多路召回的价值在于补盲:用不同检索信号覆盖不同问题类型,让关键证据更稳定地进入候选集。它不是万能方案,但在检索不稳场景里往往很有价值。