云计算百科
云计算领域专业知识百科平台

Spring AI 30 · 重排序 Rerank 集成

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,处理复杂/模糊问题,把查询改写、扩展并路由到正确的数据源。

赞(0)
未经允许不得转载:网硕互联帮助中心 » Spring AI 30 · 重排序 Rerank 集成
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!