核心要点
向量召回是 bi-encoder,query 与文档独立编码,精度有限
Rerank 用 cross-encoder 联合编码 query-文档对,精度更高
两阶段:先粗召回 Top-N(高召回),再精排 Top-K(高精度)
标准回答
问题根源:向量检索用 bi-encoder(双塔),query 和文档各自独立编码成向量再算相似度。为支撑海量库的快速近邻搜索,它牺牲了精度——语义相近但不真正相关的内容也可能排在前面。
Rerank 的作用:重排序用 cross-encoder(交叉编码器),把 query 和每个候选文档拼在一起送入模型,直接输出相关性分数。因为做了 query 与文档的深度交互,判断更准,但计算量大、无法预先索引。
两阶段检索(Retrieve-then-Rerank)
- 粗召回:向量/混合检索快速取回 Top-N(如 50–100),追求高召回。
- 精排:cross-encoder 对这 N 个候选打分,取 Top-K(如 3–5)喂给 LLM,追求高精度。
这样既享受向量检索的速度,又用 rerank 补足精度,显著提升进入上下文片段的相关性,减少 幻觉。详见 RAG 架构指南。
常见误区
⚠️ 常见踩坑
以为 rerank 能召回向量检索漏掉的文档。Rerank 只在召回候选集内重新排序,无法找回未被召回的内容,所以粗召回阶段仍需保证足够高的召回率。
追问
追问 1:bi-encoder 和 cross-encoder 的本质区别是什么?
bi-encoder 把 query 和文档分别编码成向量,可离线建索引、检索快但交互浅;cross-encoder 把两者拼接联合编码,能建模细粒度交互、精度高,但必须在线逐对计算,无法预索引。
追问 2:Rerank 会带来多少额外延迟?如何权衡?
延迟与候选数 N 和 reranker 大小成正比。常见做法是控制 N 在几十量级、用小型或蒸馏过的 reranker,或用 GPU 批量打分。权衡点是 N 越大召回越全但 rerank 越慢。
追问 3:什么场景下可以省去 rerank?
当库很小、向量检索本身已足够准,或对延迟极敏感且可接受精度损失时可省略。但知识密集、易混淆、对准确性要求高的场景强烈建议保留 rerank。
延伸学习
与本题相关的知识库文章、术语、工具与行业资讯。
🛠️ AI 工具