Rerank(重排序)
一句话
粗筛之后,精挑一次。 先用 BM25/Embedding 快速召回 20 条候选,再用 Rerank 模型精确打分,取 top 3 送给 LLM。
为什么需要它
粗召回(BM25 + Embedding 混合检索)追求快和全——宁可多捞,别漏。但捞回来 20+ 条文档,部分相关性不高,全部塞给 LLM 会:
- Token 超限
- 噪声干扰回答质量
- 成本浪费
Rerank 用一个更强的模型(通常是 Cross-Encoder),把每一条文档和问题放在一起做精细的相关性判断。
流程
BM25 召回 10 条 ──→ 合并去重 ──→ Rerank 精排 ──→ 取 top 3 ──→ LLM
Embedding 召回 10 条 ↗ ↑
每条文档和原问题
做精确相关性打分应用场景
| 场景 | 说明 |
|---|---|
| 企业知识库 | 召回 20 条,需精准挑出最相关的那 3 条给 LLM |
| 客服机器人 | 候选答案多,需挑最匹配的一条回复 |
| 多路召回合并 | ES + Milvus 各召回 10 条,合并后 20 条 → Rerank 压缩到 top 3 |
横向对比:Embedding vs Rerank
| Embedding | Rerank | |
|---|---|---|
| 输入 | 一段文本 | 一个问题 + 一条文档(成对) |
| 输出 | 向量 | 相关性分数 |
| 角色 | 粗筛(海量) | 精排(少量) |
| 速度 | 快(向量索引) | 慢(逐对计算) |
| 模型类型 | Bi-Encoder | Cross-Encoder |
| 粒度 | 粗 | 细 |
为什么不用 Rerank 做全量检索? 因为太慢——Rerank 是逐对计算,20 万文档 × 每个问题 = 不可能。所以它只精排粗召回的 20 条。
优缺点
优点: 精排效果远超 Embedding 粗筛,显著提升最终回答质量 缺点: 逐对计算,速度慢;多一次 API 调用,成本 +1;依赖 Rerank 模型质量
如何选择
如果你的 RAG 管道召回量 ≤ 5 条且质量稳定 → 可以不用 Rerank。如果召回量 > 10 条且噪声多 → 上 Rerank。99% 的生产 RAG 都会加这一层。
小结
Rerank 是召回质检员。粗筛保证「不漏」,精排保证「不噪」。它不创造新信息,只负责把最相关的挑出来——但这一步对最终体验的影响是决定性的。
下一步
- 混合检索 — Rerank 的前置步骤
- Agentic RAG — 更高阶:让 LLM 自己决定要不要 rerank