核心要点

  • 向量召回是 bi-encoder,query 与文档独立编码,精度有限

  • Rerank 用 cross-encoder 联合编码 query-文档对,精度更高

  • 两阶段:先粗召回 Top-N(高召回),再精排 Top-K(高精度)

标准回答

问题根源:向量检索用 bi-encoder(双塔),query 和文档各自独立编码成向量再算相似度。为支撑海量库的快速近邻搜索,它牺牲了精度——语义相近但不真正相关的内容也可能排在前面。

Rerank 的作用重排序用 cross-encoder(交叉编码器),把 query 和每个候选文档拼在一起送入模型,直接输出相关性分数。因为做了 query 与文档的深度交互,判断更准,但计算量大、无法预先索引。

两阶段检索(Retrieve-then-Rerank)

  1. 粗召回:向量/混合检索快速取回 Top-N(如 50–100),追求高召回。
  2. 精排:cross-encoder 对这 N 个候选打分,取 Top-K(如 3–5)喂给 LLM,追求高精度。

这样既享受向量检索的速度,又用 rerank 补足精度,显著提升进入上下文片段的相关性,减少 幻觉。详见 RAG 架构指南

常见误区

⚠️ 常见踩坑

以为 rerank 能召回向量检索漏掉的文档。Rerank 只在召回候选集内重新排序,无法找回未被召回的内容,所以粗召回阶段仍需保证足够高的召回率

追问

追问 1bi-encoder 和 cross-encoder 的本质区别是什么?

bi-encoder 把 query 和文档分别编码成向量,可离线建索引、检索快但交互浅;cross-encoder 把两者拼接联合编码,能建模细粒度交互、精度高,但必须在线逐对计算,无法预索引。

追问 2Rerank 会带来多少额外延迟?如何权衡?

延迟与候选数 N 和 reranker 大小成正比。常见做法是控制 N 在几十量级、用小型或蒸馏过的 reranker,或用 GPU 批量打分。权衡点是 N 越大召回越全但 rerank 越慢。

追问 3什么场景下可以省去 rerank?

当库很小、向量检索本身已足够准,或对延迟极敏感且可接受精度损失时可省略。但知识密集、易混淆、对准确性要求高的场景强烈建议保留 rerank。

延伸学习

与本题相关的知识库文章、术语、工具与行业资讯。

🛠️ AI 工具

  • LangChain

    最流行的 LLM 应用开发框架,137K+ stars。提供链式编排、RAG 检索增强生成、Agent 构建等核心能力,覆盖 Python 和 JavaScript 双语言生态,是构建 LLM 应用的基础设施

  • qdrant

    高性能向量数据库,6.3K+ stars。高性能、大规模向量数据库和向量搜索引擎,支持相似度检索和语义搜索