RAG 为什么要做混合检索和重排?
面试怎么回答
混合检索是为了利用词法精确匹配和向量语义召回的互补性,尤其能兼顾错误码、专有名词与自然语言表达。两路分数不能直接裸加,可用 RRF 按排名融合,或归一化后加权。第一阶段先高召回生成候选,再用更强模型重排少量结果,平衡效果、延迟和成本;权限与有效期等硬条件应尽量前置,并分别评估召回、融合和重排。
先把这段讲顺;面试官追问时,再展开下面的原理和细节。
详细讲解
用户搜索错误码 ERR_1047,向量检索返回了一堆“系统异常处理方案”,真正包含这个错误码的文档却排在后面。
语义相似找到了,精确事实反而丢了。这就是只做向量检索的典型边界。
关键词检索擅长精确词、编号和专有名词,向量检索擅长同义表达和语义召回;混合检索扩大候选覆盖,重排再用更强模型精细判断相关性。
关键词和向量各自擅长什么?
BM25 等词法检索对错误码、SKU、表名、人名和原文短语非常敏感,结果也容易解释。但用户换一种表达、使用同义词或描述意图时,字面匹配可能漏掉正确文档。
向量检索能找到“退款不到账”和“支付退回延迟”这类语义接近的内容,但对罕见编号、精确否定、数字和细粒度条件不一定稳定。
所以生产 RAG 常让两路并行召回,再把结果融合成一个候选集。

两路分数不能直接相加
BM25 分数和向量相似度来自不同计算体系,数值范围和分布并不一致。直接 0.5 * bm25 + 0.5 * vector_score,表面公平,实际可能被某一路分数范围支配。
常见做法有两类:
- RRF:不比较原始分数,按各结果列表中的排名融合
- 归一化加权:先把各路分数缩放到可比较范围,再按业务调权
RRF 上手简单;需要加入时效、权威度、点击反馈等业务信号时,加权排序更灵活,但要有评测数据支持。
融合以后为什么还要重排?
第一阶段检索追求快速和较高召回,通常只用较轻的匹配信号。重排器则对“查询—候选文档”逐对判断,可以识别条件、否定关系和细粒度语义,再把真正相关的少量结果排到前面。

但重排成本更高,所以不会对全库运行。典型漏斗是:关键词和向量各取一批候选,融合去重后保留几十条,重排得到前几条,再组装给大模型。
过滤应该放在哪里?
租户、权限、语言、地区、有效期等硬条件应尽量在召回阶段过滤,而不是召回后才删除。否则候选窗口可能全被无权限内容占满,最后虽然安全过滤掉了,却没有剩余相关结果。
同时要保留每一路的原始排名、融合排名和重排分数。坏答案出现时,才能判断是没召回、融合压低,还是重排判断错误。
怎么评估?
检索层至少看 Recall@K、MRR、NDCG、无结果率和权限过滤正确性;在线再观察引用点击、追问率、答案采纳率、延迟和成本。不要只看最终回答“像不像正确”,否则检索退化可能被模型措辞掩盖。