订阅更新

RAG 为什么要做混合检索和重排?

面试问 085 约 2 分钟读完 1 次阅读

本文目录
  1. 面试怎么回答
  2. 关键词和向量各自擅长什么?
  3. 两路分数不能直接相加
  4. 融合以后为什么还要重排?
  5. 过滤应该放在哪里?
  6. 怎么评估?

面试怎么回答

混合检索是为了利用词法精确匹配和向量语义召回的互补性,尤其能兼顾错误码、专有名词与自然语言表达。两路分数不能直接裸加,可用 RRF 按排名融合,或归一化后加权。第一阶段先高召回生成候选,再用更强模型重排少量结果,平衡效果、延迟和成本;权限与有效期等硬条件应尽量前置,并分别评估召回、融合和重排。

先把这段讲顺;面试官追问时,再展开下面的原理和细节。

详细讲解

用户搜索错误码 ERR_1047,向量检索返回了一堆“系统异常处理方案”,真正包含这个错误码的文档却排在后面。

语义相似找到了,精确事实反而丢了。这就是只做向量检索的典型边界。

关键词检索擅长精确词、编号和专有名词,向量检索擅长同义表达和语义召回;混合检索扩大候选覆盖,重排再用更强模型精细判断相关性。

关键词和向量各自擅长什么?

BM25 等词法检索对错误码、SKU、表名、人名和原文短语非常敏感,结果也容易解释。但用户换一种表达、使用同义词或描述意图时,字面匹配可能漏掉正确文档。

向量检索能找到“退款不到账”和“支付退回延迟”这类语义接近的内容,但对罕见编号、精确否定、数字和细粒度条件不一定稳定。

所以生产 RAG 常让两路并行召回,再把结果融合成一个候选集。

关键词与向量召回互补

两路分数不能直接相加

BM25 分数和向量相似度来自不同计算体系,数值范围和分布并不一致。直接 0.5 * bm25 + 0.5 * vector_score,表面公平,实际可能被某一路分数范围支配。

常见做法有两类:

  • RRF:不比较原始分数,按各结果列表中的排名融合
  • 归一化加权:先把各路分数缩放到可比较范围,再按业务调权

RRF 上手简单;需要加入时效、权威度、点击反馈等业务信号时,加权排序更灵活,但要有评测数据支持。

融合以后为什么还要重排?

第一阶段检索追求快速和较高召回,通常只用较轻的匹配信号。重排器则对“查询—候选文档”逐对判断,可以识别条件、否定关系和细粒度语义,再把真正相关的少量结果排到前面。

多阶段检索漏斗

但重排成本更高,所以不会对全库运行。典型漏斗是:关键词和向量各取一批候选,融合去重后保留几十条,重排得到前几条,再组装给大模型。

过滤应该放在哪里?

租户、权限、语言、地区、有效期等硬条件应尽量在召回阶段过滤,而不是召回后才删除。否则候选窗口可能全被无权限内容占满,最后虽然安全过滤掉了,却没有剩余相关结果。

同时要保留每一路的原始排名、融合排名和重排分数。坏答案出现时,才能判断是没召回、融合压低,还是重排判断错误。

怎么评估?

检索层至少看 Recall@K、MRR、NDCG、无结果率和权限过滤正确性;在线再观察引用点击、追问率、答案采纳率、延迟和成本。不要只看最终回答“像不像正确”,否则检索退化可能被模型措辞掩盖。

刷题进度保存在当前浏览器