面试题 13:讲讲 RAG 的多路召回与重排?为什么它们在生产环境中必不可少?
2026/6/23大约 4 分钟面试题面试题
一、 痛点分析:为什么单一的“纯向量检索”不够用?
在基础的 RAG(Naive RAG)中,通常只使用向量数据库进行语义检索(Dense Retrieval)。但这在真实的生产业务中存在致命缺陷:
- 对专有名词“脱敏”:向量模型擅长捕捉“语义”,但对具体的订单号、产品型号(如 "XJ-9527")、人名、缩写非常迟钝。
- 长尾词匹配差:如果用户搜索的词在训练向量模型时很少出现,模型生成的向量就会有偏差,导致根本搜不到原文中明明存在的字眼。

二、 核心解法第一步:多路召回 (Hybrid Search)
为了弥补向量检索的缺陷,工业界采用了“混合双打”的策略。
1. 两路检索的互补
路 A:向量检索 (Dense Retrieval)
工具:Milvus, Pinecone 等向量数据库。
优势:语义泛化能力强(搜“苹果手机”能召回“iPhone”),容错率高。
路 B:关键词检索 (Sparse Retrieval / 倒排索引)
工具:ElasticSearch (基于 BM25 算法)。
优势:精准的字面匹配,对专有名词、编号、特定术语的命中率极高。
2. 结果合并:RRF 算法 (Reciprocal Rank Fusion)
两路检索会返回两份不同的排名列表,且它们的分数体系不同(向量是余弦相似度,BM25 是词频得分),无法直接比较分数。
解决方案:使用 RRF(倒数秩融合)算法。它不看绝对分数,只看排名(Rank)。
公式:$
k$ 通常取 60)。通过 RRF,可以将两路结果公平地合并去重,得到一个粗筛的 Top-N(如 Top 100)候选集。
三、 核心解法第二步:重排 (Reranking)
经过多路召回,我们得到了 100 篇候选文档。如果全部喂给 LLM,不仅 Token 成本爆炸,还会导致 LLM 遭遇“大海捞针(Lost in the Middle)”问题,注意力分散。因此需要重排模型(Reranker)进行精筛。
1. 为什么不直接用向量模型做精筛?(Bi-encoder vs Cross-encoder)
- 向量模型(Bi-encoder,双塔模型):在召回阶段使用。它把 Query 和 Document 分别独立计算成向量,然后算个距离。速度极快,但因为两者没有进行深度的语义交互,精度较粗。
- 重排模型(Cross-encoder,交叉编码器):在重排阶段使用(如 BGE-Reranker, Cohere Rerank)。它将 Query 和 Document 拼接在一起输入到 Transformer 中,让 Query 的每一个词和 Document 的每一个词进行深度的 Attention(注意力)计算。
- 代价与收益:Cross-encoder 计算极其缓慢且消耗算力,无法用于百万级文档的全局搜索;但它对相关性的判断极其精准。
2. 重排的作用
将 RRF 合并后的 Top 100 候选集输入给 Reranker 模型,模型输出 0 到 1 的精准相关度得分。系统根据得分重新排序,截取最核心的 Top 5 喂给最终的生成式大模型(LLM)。
四、 面试高分答题话术(💡 划重点)
- 抛出“漏斗模型”概念:“RAG 的检索本质上是一个漏斗(Funnel)。多路召回是漏斗的上方,目标是高召回率(High Recall),确保相关文档不被漏掉;重排是漏斗的下方,目标是高准确率(High Precision),剔除噪音,只留精华。”
- 强调工程上的 Trade-off(权衡):“面试官,我们之所以不直接用 Reranker 去搜全局库,是因为算力成本不允许。所以我们用极其轻量快速的向量+BM25 组合做粗筛(过滤到 100 篇),再用沉重的 Reranker 做精排(过滤到 5 篇)。这是典型的用空间换时间,再用算力换精度的工程实践。”
- 直击业务痛点:“在我们的实际项目中,引入多路召回和重排后,系统对专有名词的回答准确率从 60% 提升到了 95% 以上,极大地压制了大模型因为‘上下文无关’而产生的幻觉。”