30 · 重排序 Rerank 集成
🎯 学完能做什么:理解「粗排 + 精排」两阶段检索,用 Rerank 模型对候选结果重新精排,显著提升 RAG 最终准确率。
⏱️ 预计耗时:40 分钟(含动手)
🔗 依赖前置:第 10(检索)、18(调优)、29(混合检索)章
🧩 难度:🔴
一句话:向量检索是"快而粗"的初筛,Rerank 是"慢而准"的精排;先粗排召回一批候选,再用重排模型挑出真正最相关的几条,是生产级 RAG 的标配。
1. 为什么需要重排
向量检索为了快,用的是「近似 + 单向量相似度」,排序未必精准:
问:"退货需要什么条件?"
向量检索 TopK:
1. 配送说明… ← score 0.72 但其实不相关
2. 退货政策:7天完好 ← score 0.70 才是真答案,却排第2
Rerank 模型(cross-encoder)会把「问题 + 每个候选」成对深入比对,给出更准的相关性分数,重新排序。
2. 两阶段检索架构
① 粗排(召回):向量/混合检索,快,取较多候选(如 TopK=20)
│
▼
② 精排(重排):Rerank 模型对 20 个候选逐一打分,取真正最相关的 TopN(如 4)
│
▼
喂给 LLM 生成回答
- 粗排负责「别漏」(高召回),精排负责「排准」(高精度)。
- 粗排取 20、精排选 4 是常见配置。
3. 为什么不直接用 Rerank 检索全库
Rerank 精度高但慢——它要对「每个候选」都跑一次深度比对。全库几万条都 rerank 不现实。所以必须先用向量检索快速缩小到几十个候选,再 rerank。这就是两阶段的意义。
4. 在 Spring AI 中集成 Rerank
思路:粗排拿候选 → 调用 Rerank 模型/API 打分 → 按新分数排序取 TopN。
@Service
class RerankSearchService {
private final VectorStore vectorStore;
private final RerankClient rerankClient; // 你封装的重排模型调用(如 bge-reranker / cohere)
RerankSearchService(VectorStore vectorStore, RerankClient rerankClient) {
this.vectorStore = vectorStore;
this.rerankClient = rerankClient;
}
List<Document> search(String query, int recallK, int finalN) {
// ① 粗排:多召回一些候选
List<Document> candidates = vectorStore.similaritySearch(
SearchRequest.builder().query(query).topK(recallK).build());
// ② 精排:对候选逐一打分
List<String> texts = candidates.stream().map(Document::getText).toList();
List<Double> scores = rerankClient.rerank(query, texts); // 返回每个候选的相关性分
// ③ 按重排分数排序,取前 finalN
return IntStream.range(0, candidates.size())
.boxed()
.sorted((i, j) -> Double.compare(scores.get(j), scores.get(i)))
.limit(finalN)
.map(candidates::get)
.toList();
}
}
5. 常见 Rerank 模型
| bge-reranker-large | 开源、中文好,可本地部署 |
| Cohere Rerank | 云 API,效果强 |
| Jina Reranker | 云 API,多语言 |
Rerank 是独立于 Chat/Embedding 的第三类模型,选型时单独评估。
6. 收益与代价
| 准确率 | ✅ 通常显著提升,尤其候选很多时 |
| 延迟 | ⚠️ 增加一次重排调用(几十~几百 ms) |
| 成本 | ⚠️ 云 Rerank 按调用/token 计费 |
| 复杂度 | ⚠️ 多一个模型依赖 |
用第 18/32 章的评测集量化 rerank 前后的提升,确认收益值得代价再上线。
7. 完整链路:混合检索 + 重排 + RAG
查询
→ 混合检索(向量+关键词,第29章)召回 TopK=20
→ Rerank 精排 → TopN=4
→ 拼进 prompt(第17章模板)
→ LLM 生成带出处的回答(第21章)
这套「混合召回 + 重排精排」是当前生产级 RAG 的主流高准确率方案。
8. 一句话总结
Rerank 是两阶段检索的「精排」:向量/混合检索粗召回一批候选,再用 cross-encoder 重排模型精挑 TopN,显著提准;代价是额外延迟与成本,需用评测集验证收益。
➡️ 下一章:31-查询转换与路由.md,处理复杂/模糊问题,把查询改写、扩展并路由到正确的数据源。
网硕互联帮助中心





评论前必须登录!
注册