混合检索和重排,到底是在补 RAG 的哪两个漏洞?
向量检索负责把可能相关的证据找进候选集,重排负责把真正能回答问题的片段放到前面;两者不是二选一。
用户问:“线上报错 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 的依据是什么?
- 低延迟场景如何做分层或缓存?