RAG12 12 分钟

混合检索和重排,到底是在补 RAG 的哪两个漏洞?

向量检索负责把可能相关的证据找进候选集,重排负责把真正能回答问题的片段放到前面;两者不是二选一。

原理 实现 边界 追问
问题面试官到底在判断什么
机制系统如何工作
证据代码、指标与取舍
表达30 秒回答骨架

用户问:“线上报错 ERR_AUTH_403 怎么处理?”

纯向量检索可能找到一篇讲“登录失败”的长文,却把错误码本身排在后面。纯关键词检索又可能只找到一行错误码,没有处理步骤。这个时候,混合检索和重排各自补一个漏洞。

先给一个能复述的答案

混合检索并行使用语义召回和关键词召回,兼顾同义表达与精确词项;重排模型再对候选片段做更细粒度的相关性判断。前者扩大“找得到”的概率,后者提高“排得对”的概率。它们都不能替代权限过滤、版本过滤和离线评测。

一、为什么向量和关键词要并行

向量擅长“怎么处理登录失败”这类自然表达,关键词擅长命中 ERR_AUTH_403、版本号、类名和接口路径。企业知识库里两类查询都很多,单一路径必然会丢一部分。

融合时要注意三件事:不同检索器的分数不可直接相加;同一 chunk 可能被两路重复召回;权限和租户过滤必须在结果进入上下文前完成。常见做法是各路先取候选,做 rank fusion,再去重和截断。

二、重排不是“再算一次相似度”

初排通常追求快,使用向量索引从百万级数据里取 top 20 或 top 50;重排可以看问题和整段候选的交互关系,更适合判断“这段能不能支撑当前问题”。但它成本更高,所以不应该对全库运行。

一个可观测的流水线

{
  "query": "ERR_AUTH_403 怎么处理",
  "vector_hits": 20,
  "keyword_hits": 20,
  "fused_hits": 28,
  "reranked_hits": 6,
  "filters": ["tenant:acme", "version:2025.3"],
  "latency_ms": {"retrieve": 42, "rerank": 86}
}

把这些数字记录下来,才能回答“是没召回,还是重排后掉了”。否则每次错误都只能凭感觉改 prompt。

三、候选集里没有答案,重排也救不了

这是面试里很容易被追问的一句。重排只能在候选集里重新排序,不能凭空生成缺失证据。遇到“正确片段在 top 100 之外”,应该回查分块、查询改写、关键词词典和过滤条件,而不是继续调重排阈值。

60 秒面试回答

“我们用向量和 BM25 并行召回,分别覆盖语义表达和错误码、版本号等精确词项,再做融合、去重和权限过滤。候选集进入 reranker 后取少量高质量片段给模型。评估时拆开看 Recall@k、MRR、重排收益、端到端延迟和引用准确率,避免把召回缺失误判成模型生成问题。”

继续追问

  • RRF 和加权分数融合分别有什么取舍?
  • 重排 top-k 取 3、5、8 的依据是什么?
  • 低延迟场景如何做分层或缓存?