Appearance
12.1.1 什么是多路召回(Multi-Retrieval)?
先给结论:多路召回的本质是“用不同检索路径覆盖不同信号”,减少单一路径的盲区。它不是为了堆复杂度,而是为了让关键证据更稳定地回到候选集中。
很多检索不稳的问题,根因并不是“某条检索链路太弱”,而是:
- 不同问题需要不同检索信号
例如:
- 术语、编号、字段名更适合关键词检索
- 语义改写、口语化表达更适合向量检索
- 多文档综合问题更适合混合召回 + 重排
多路召回就是把这些信号并行跑起来,再做统一选择。
多路召回解决的是什么问题
多路召回更擅长解决这些问题:
- 单一路径对某些问题类型明显失效
- 不同问题在同一召回策略下波动很大
- 复杂问题需要同时覆盖语义与精确关键词
它的目标是:
- 让“关键证据进候选”的概率稳定上升
常见的多路召回组合
常见组合包括:
- 向量检索 + 关键词检索(最常见)
- 多向量检索器并行(不同嵌入模型)
- 主题检索 + 结构化检索
- 分文档源召回(不同知识源独立召回)
这些组合的共同点是:
- 不同召回路径负责不同信号
多路召回的基本流程
更通用的流程大致是:
- 多路并行召回
- 合并候选
- 去重与聚合
- 统一排序或重排
一个最小示意如下:
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)这个示意强调的不是代码细节,而是:
- 多路并行 + 合并 + 选择
什么时候值得引入多路召回
如果你的系统出现这些信号,多路召回通常值得考虑:
- 术语问题表现明显差
- 改写问法后召回差异巨大
- 单路召回对复杂问题稳定性不够
- 不同任务类型表现差异明显
多路召回的常见误区
误区一:多路召回等于“召回越多越好”
如果没有后续选择机制,候选池会变得很脏,反而伤害最终质量。
误区二:多路召回可以替代重排
多路召回只是把候选拉回来,并不保证顺序。没有重排或选择,噪声会更严重。
误区三:所有问题都走多路召回
多路召回会增加成本和复杂度。对简单问题,单路召回可能已经足够。
一句话总结
多路召回的价值在于补盲:用不同检索信号覆盖不同问题类型,让关键证据更稳定地进入候选集。它不是万能方案,但在检索不稳场景里往往很有价值。