type
Post
status
Published
date
Mar 12, 2026
slug
summary
tags
人工智能
推荐
category
技术分享
icon
password
在 RAG(检索增强生成)系统中,多路召回指的是同时使用多种不同的检索策略从外部知识库中获取相关文档片段,然后将这些结果合并,再交给大语言模型生成答案。其核心目标是克服单一检索方法的局限性,提升检索的覆盖率和准确性,从而让 LLM 能够基于更全面、更多样的信息生成更优质的答案。
下面我们详细介绍 RAG 中如何设计和实现多路召回。
一、RAG 中为什么要用多路召回?
在 RAG 应用中,检索环节的质量直接决定了生成答案的上限。单一检索方法往往存在明显短板:
- 稀疏检索(如 BM25):基于关键词匹配,精确但容易遗漏语义相关但词汇不匹配的内容。
- 稠密检索(如向量相似度):能捕捉语义,但对领域专有名词、长尾实体可能效果不佳,且容易检索到“语义相似但答案无关”的噪声。
- 基于规则的过滤:只能处理结构化条件,无法理解复杂语义。
多路召回通过组合这些方法,可以优势互补:
- BM25 保证关键词命中,避免遗漏明确提及的实体。
- 向量检索捕捉深层语义,找到语义相似但表述不同的内容。
- 其他策略(如查询改写、元数据过滤) 进一步定向优化。
这样构建的候选文档池质量更高、更全面,能有效减少“检索不到”导致的错误回答或幻觉。
二、RAG 中常见的召回策略
根据业务场景和数据特点,可以选择以下一种或多种召回策略:
1. 基于关键词的稀疏检索
- 方法:使用 BM25、TF-IDF 等传统检索算法,将用户查询与文档进行关键词匹配。
- 适用场景:查询中包含明确的实体名称、术语(如人名、地名、产品型号),或需要高精确匹配的场景。
- 优点:速度快,对专有名词敏感,可解释性强。
- 缺点:词汇鸿沟问题,无法处理同义词和语义变体。
2. 基于向量的稠密检索
- 方法:使用预训练的 Embedding 模型(如 BGE、OpenAI Embedding、Sentence-BERT)将查询和文档都编码为向量,然后通过近似最近邻检索(如 Faiss、Milvus、HNSW)找到最相似的文档。
- 适用场景:语义匹配、开放式问答、对词汇多样性要求高的场景。
- 优点:语义理解能力强,能召回词汇不同但意思相近的内容。
- 缺点:对领域数据需微调;可能检索到语义相似但实际不相关的内容(如主题相似但无法回答问题)。
3. 混合检索(Hybrid Search)
- 方法:将稀疏检索和稠密检索的结果进行融合(如加权平均或 Reciprocal Rank Fusion),是目前 RAG 中最主流的多路召回方案。
- 例子:一个查询“苹果公司最新发布的手机”,BM25 可能命中“苹果”“公司”“手机”等词,向量检索则能理解“最新发布的”并匹配到关于 iPhone 15 的文档,两者结合效果更好。
- 工具支持:许多向量数据库(如 Weaviate、Qdrant、Elasticsearch)都内置了混合检索能力。
4. 查询改写/扩展检索
- 方法:先让 LLM 对用户原始查询进行改写或生成多个相关子查询,然后用这些扩展后的查询分别进行检索,最后合并结果。
- 查询改写:将“它是什么时候发布的?”改写为包含具体实体名的查询,如“iPhone 15 是什么时候发布的?”。
- 多查询生成:让 LLM 生成几个不同的表述方式,例如“高血压怎么预防?”可生成“如何降低血压?”“高血压的预防措施有哪些?”。
- 优点:缓解查询本身信息不足或表述模糊的问题。
5. 基于元数据过滤的检索
- 方法:在进行向量或关键词检索前,先根据时间、类别、作者、来源等元数据缩小搜索范围。这可以视为一种“粗召回路”。
- 例子:用户问“今年的诺贝尔奖得主是谁?”,可以先过滤出时间范围为“今年”的文档,再在其中检索。
6. 基于知识图谱的检索
- 方法:如果知识库以知识图谱形式组织,可以先用查询提取实体和关系,在图谱中检索相关三元组或子图,作为上下文补充。
- 适用场景:需要多跳推理、关系复杂的问题(如“周杰伦的妻子主演过哪些电影?”)。
7. 基于摘要的检索(或分层检索)
- 方法:先对文档块生成摘要,将摘要作为检索入口;检索到相关摘要后,再取回对应的原始文档块。这样可以用较小的开销快速过滤大量无关文档。
8. 子问题分解检索
- 方法:对于复杂问题,先让 LLM 将其分解为多个子问题,然后对每个子问题分别检索,最后将所有相关文档合并。这类似于思维链 + 检索。
三、如何融合多路召回结果?
多路召回后,需要将不同来源的文档合并成一个候选池,并确保交给 LLM 的内容既相关又精简。主要步骤如下:
1. 结果合并与去重
- 将各路返回的文档列表(通常每路取 Top-K)合并到一个大列表中。
- 根据文档的唯一 ID 进行去重。如果同一文档被多路同时命中,只保留一份(可以保留最高的分数或直接保留)。
2. 重排序(Reranking)
这是多路召回后的关键环节。由于各路评分尺度不同(BM25 分数和向量距离无法直接比较),且简单的合并可能包含噪声,因此需要用一个更精确的模型对合并后的候选文档重新打分排序。
- 常用方法:
- 交叉编码器(Cross-Encoder):如 Cohere Rerank、bge-reranker。将查询和文档拼接输入,输出一个相关性分数。精度高但速度慢,适合对小规模候选集(如几十到几百条)进行重排。
- LLM 自身打分:可以让 LLM 对候选文档进行相关性评估(需谨慎设计 prompt,避免消耗过多 token)。
- 基于规则的加权融合:给不同路赋予不同权重(如 BM25 权重 0.3,向量权重 0.7),加权求和后排序。这种方法简单但不精确。
- 推荐做法:先用多路召回获取一个相对小的候选集(如每路 20 条,合并去重后约 50 条),然后用一个高性能的交叉编码器进行重排序,取 Top-K(如 5-10 条)送入 LLM。
3. 动态权重调整
可以根据业务反馈(如点击率、答案采纳率)离线或在线调整各路的权重,或者训练一个学习排序(LTR)模型来动态决定每路召回结果的重要性。
四、工程实现考虑
在实现 RAG 多路召回时,需要考虑以下几点:
- 并发与延迟:多路检索通常是并行的,各路由不同的线程或协程独立执行,以最小化整体耗时。需要设置合理的超时和最大返回数量。
- 缓存:对高频查询,可以缓存其检索结果,减少重复计算。
- 存储选型:选择一个支持多种索引的向量数据库(如支持 BM25 + 向量混合检索的 Elasticsearch、支持多租户过滤的 Milvus)可以简化系统架构。
- 可观测性:记录每一路召回的命中率和贡献度,方便后续优化和剔除无效路。
五、总结
在 RAG 中做多路召回,本质上是一个 “分而治之,再择优录用” 的过程:
- 分而治之:用多种检索策略从不同维度挖掘潜在相关文档。
- 再择优录用:通过融合与重排序,选出最精华的部分供给 LLM。
通过精心设计的策略组合(如 BM25 + 向量 + 查询改写)和精确的重排序,多路召回能够显著提升 RAG 系统对复杂、模糊或信息密集型问题的回答质量,是构建生产级 RAG 应用的关键一环。
- Author:guderain
- URL:https://wangguanxi.space/article/3212b727-a3a3-8030-a0b4-cf0388b5b308
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!
Relate Posts


.webp?table=collection&id=92be88af-5f71-4631-9d3e-ee3bd53dcced&t=92be88af-5f71-4631-9d3e-ee3bd53dcced&width=1080&cache=v2)