Ch13 RAG修订于 二〇二六年七月二日

13.7 重排序 —— 提升精度的关键

混合检索给了你 Top-K 个候选文档(K 通常取 20-50),但这些候选文档的质量参差不齐。你需要一个”精选”环节——从 50 个候选中挑出最相关的 3-5 个,塞进 LLM 的 Prompt。这就是重排序。

13.7.1 为什么需要重排序

初检(Embedding + BM25)追求的是”快”和”召回率高”——宁可多找,不能漏掉。但初检的精度不够。Embedding 模型把整个文档压缩成一个向量,这个压缩过程是有信息损失的——就像把一本书概括成一句话,你只能知道”大概是什么”,但不知道细节。

重排序模型不做压缩,而是把”用户问题”和”候选文档”成对输入,仔细比较它们的语义匹配程度。它不需要快(只处理 50 个候选),但需要准。

13.7.2 Bi-Encoder vs Cross-Encoder

这是理解重排序的核心概念。

  • Bi-Encoder(双塔模型):分别编码问题和文档,然后计算相似度。这是 Embedding 检索的做法。优点:文档向量可以预先计算和存储,查询时只需要编码问题,非常快。缺点:问题和文档在编码时不”见面”,信息交互不充分,精度受限。
  • Cross-Encoder(交叉编码器):把问题和文档拼接在一起,一次性输入模型,模型同时看到问题和文档,输出一个相关性分数。优点:信息充分交互,精度远高于 Bi-Encoder。缺点:每个(问题,文档)对都要重新计算,不能预先缓存,速度慢——这就是为什么 Cross-Encoder 只用于重排序(处理少量候选),而不是初检(处理百万级文档)。

13.7.3 2026 主流重排序方案

  • Cohere Rerank 3:商业 API,目前综合性能最强。支持多语言,支持 4K 上下文。按调用量计费,适合不想自己部署模型的团队。
  • bge-reranker-v2:BAAI(北京智源人工智能研究院)开源系列,包括 bge-reranker-v2-m3(多语言)和 bge-reranker-v2-gemma(基于 Gemma 的更强大版本)。中文场景表现优异,是目前中文 RAG 的首选重排序器。
  • ColBERT:介于 Bi-Encoder 和 Cross-Encoder 之间的”延迟交互”(Late Interaction)模型。文档的每个 token 都单独编码和存储,查询时做细粒度的 token 级匹配。精度接近 Cross-Encoder,速度接近 Bi-Encoder。适合对延迟要求高的场景。
  • RankLLM:用 LLM 本身来做重排序。把候选文档列表给 LLM,让它排序。优点是零样本能力强(不需要训练数据),缺点是成本高(每次调用 LLM)、速度慢。适合候选数量很少(如 5-10 个)且质量要求极高的场景。

13.7.4 重排序的代价和收益

收益:重排序是 RAG 系统中最”划算”的优化之一。在混合检索的基础上加重排序,答案质量通常能提升 15%-30%(以 RAGAS 忠实度指标衡量)。原因是:LLM 对输入质量高度敏感——垃圾进,垃圾出。把最相关的文档放在 Prompt 最前面,LLM 更容易”看到”关键信息。

代价:每次查询增加 50-200ms 的延迟(取决于重排序模型和候选数量)。对于延迟敏感的应用(如实时对话),需要权衡。实践中,很多团队用 Cohere Rerank 3 的 API,延迟在 100ms 以内,用户几乎无感知。

2026 年建议:重排序已不是”可选”而是”标配”。中文场景优先选 bge-reranker-v2-m3(开源免费),全球多语言场景选 Cohere Rerank 3(商业 API)。


← 上一节:13.6 第三代:混合检索 | 下一节:13.8 生成阶段 —— 让 LLM 用上检索结果 →

关联6

知识图谱

局部图谱 · 点节点跳转