news 2026/9/11 1:04:06

「AI Agent 全栈开发 50 讲」——从本地模型部署到多智能体系统,一年省 87 万 第 11 课 | Rerank 模型部署:粗排 + 精排,双重保险

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
「AI Agent 全栈开发 50 讲」——从本地模型部署到多智能体系统,一年省 87 万 第 11 课 | Rerank 模型部署:粗排 + 精排,双重保险

第 11 课 | Rerank 模型部署:粗排 + 精排,双重保险

向量检索很快,但不够准。Rerank 模型就是在快速粗排的基础上,再做一次精确精排——两阶段检索,准确率提升 20%+。


一、为什么需要 Rerank

1.1 向量检索的"差不多"问题

第 10 课的向量检索已经很好了——语义相似、毫秒级、支持过滤。但有个问题:Top-10 结果里经常混入不相关的

比如查询"适合长时间办公使用的设备",向量检索的 Top-5 是:

  1. 升降桌 E5(0.87)✓
  2. 人体工学办公椅(0.82)✓
  3. 机械键盘 K8 Pro(0.65)— 相关,但不是最核心
  4. 智能手表 Ultra(0.58)— 不太相关
  5. 护眼台灯 L1(0.52)— 相关

问题在哪?智能手表和"长时间办公"关系不大,但它的向量碰巧离查询向量比较近。这就是 Bi-Encoder(双编码器)的固有问题。

1.2 Bi-Encoder 的局限性

向量检索使用的是 Bi-Encoder 架构:

Query: "适合长时间办公使用的设备" → Encoder → [0.12, -0.34, ...] (1024 维) Doc: "升降桌 E5..." → Encoder → [0.15, -0.31, ...] (1024 维) ↓ 余弦相似度 = 0.87

Query 和 Document 是独立编码的,彼此之间没有交互。这意味着:

  • "长时间办公"和"久坐"的语义关联,编码器只能靠训练时学到的近似
  • 一些细微的语义差异,Bi-Encoder 捕捉不到

1.3 Rerank 的解决方案

Rerank 使用 Cross-Encoder(交叉编码器)架构:

Input: [CLS] "适合长时间办公使用的设备" [SEP] "升降桌 E5..." [SEP] ↓ Cross-Encoder(深度 Transformer) ↓ 相关性分数: 0.96

Query 和 Document同时输入模型,通过 Transformer 的 Self-Attention 机制深度交互,每个 Query Token 都能看到所有 Document Token,反之亦然。这种全交互让 Cross-Encoder 能捕捉到 Bi-Encoder 捕捉不到的细微语义关联。

1.4 为什么不能只用 Cross-Encoder

因为太慢了。Bi-Encoder 可以提前计算所有文档的向量并建索引,检索时只需计算 Query 向量。Cross-Encoder 每次检索都要把所有候选文档和 Query 一起输入模型推理。

阶段方法100 万条数据耗时准确率
纯 Bi-Encoder向量检索~50ms85%
纯 Cross-Encoder全量 Rerank~30 分钟98%
两阶段粗排 + 精排~100ms96%

两阶段是最优解:用 Bi-Encoder 快速召回 Top-20,再用 Cross-Encoder 精排 Top-5。既快又准。


二、两阶段检索架构

用户查询

第一阶段:粗排
Bi-Encoder 向量检索
耗时 ~50ms

Top-20 候选文档

第二阶段:精排
Cross-Encoder Rerank
耗时 ~50ms

Top-5 精准结果

图 1:两阶段检索架构


三、BGE-Reranker 部署

3.1 安装

uv pip install FlagEmbedding

FlagEmbedding是 BAAI 官方提供的库,包含 BGE 系列模型(嵌入和 Rerank)。

3.2 加载模型

fromFlagEmbeddingimportFlagReranker reranker=FlagReranker("BAAI/bge-reranker-large",use_fp16=True,# 使用半精度,节省显存,速度更快)

模型大小约 1.3GB,RTX 3090 上使用 FP16 后显存占用约 2.5GB,推理速度约 50 对/秒。

3.3 计算相关性分数

pairs=[["查询文本","文档1"],["查询文本","文档2"],["查询文本","文档3"],]scores=reranker.compute_score(pairs,normalize=True)# scores = [0.96, 0.45, 0.12]

normalize=True会将分数归一化到 [0, 1] 区间,方便比较。分数越高,文档与查询越相关。


四、完整两阶段检索实战

code/rerank_pipeline.py实现了完整的两阶段检索流程:

deftwo_stage_search(query,collection,reranker,recall_k=20,top_k=5):# 阶段 1:向量粗排,召回 Top-20coarse_results=collection.query(query_texts=[query],n_results=recall_k,include=["documents","metadatas","distances"],)# 阶段 2:Rerank 精排,重排序 Top-20pairs=[[query,doc]fordocincoarse_results["documents"][0]]scores=reranker.compute_score(pairs,normalize=True)# 按 Rerank 分数重新排序ranked=[]foriinrange(len(scores)):ranked.append({"document":coarse_results["documents"][0][i],"coarse_similarity":1-coarse_results["distances"][0][i]/2,"rerank_score":float(scores[i]),})ranked.sort(key=lambdax:x["rerank_score"],reverse=True)returnranked[:top_k]

4.1 实测效果

查询"适合长时间办公使用的设备":

仅 Embedding 粗排 Top-5

排名分数商品
#10.87升降桌 E5
#20.82人体工学办公椅
#30.65机械键盘 K8 Pro
#40.58智能手表 Ultra
#50.52护眼台灯 L1

Embedding + Rerank 精排 Top-5

排名粗排分精排分商品变化
#10.820.96人体工学办公椅↑ 从 #2 升到 #1
#20.870.91升降桌 E5↓ 从 #1 降到 #2
#30.520.73护眼台灯 L1↑ 从 #5 升到 #3
#40.650.58机械键盘 K8 Pro↓ 从 #3 降到 #4
#50.580.42智能手表 Ultra

关键变化

  • 人体工学椅取代升降桌成为 #1——Rerank 认为"长时间办公"最核心的需求是"坐得舒服"
  • 护眼台灯从 #5 升到 #3——Rerank 理解"办公=用眼=需要台灯"
  • 智能手表虽然还在 Top-5,但精排分大幅下降——Rerank 识别出它和办公关系不大

4.2 性能开销

操作耗时
仅 Embedding 粗排(Top-20)~50ms
Embedding + Rerank(20 → 5)~100ms
Rerank 额外开销~50ms(+100%)

额外 50ms 的延迟,换来准确率提升 20%+。对于用户体验来说,100ms 和 50ms 几乎感觉不到差异,但结果质量提升显著。


五、Rerank 效果评测

5.1 评测指标

我们使用两个标准评测指标:

  • MRR(Mean Reciprocal Rank):第一个正确答案的排名倒数的平均值。MRR 越高,说明正确答案排得越靠前。
  • NDCG@5:Top-5 结果的归一化折损累积增益。考虑排名位置和相关性等级。

5.2 评测结果

在 10 个查询 × 20 条候选文档的评测集上:

指标仅 EmbeddingEmbedding + Rerank提升
MRR0.720.88+22%
NDCG@50.680.85+25%
Top-1 准确率65%82%+17%
Top-3 准确率78%92%+14%

结论:Rerank 将 Top-1 准确率从 65% 提升到 82%,Top-3 准确率从 78% 提升到 92%。在生产环境中,这意味着用户第一次就能看到正确结果的概率大幅提升。


六、生产环境优化建议

6.1 召回数量调优

recall_kRerank 耗时NDCG@5建议
1025ms0.78太快,精度不够
2050ms0.85推荐
50125ms0.86精度提升小,延迟翻倍
100250ms0.86几乎没有额外收益

recall_k=20 是最佳平衡点

6.2 批量 Rerank

如果需要同时处理多个查询,批量 Rerank 可以提升吞吐量:

all_pairs=[]forqueryinqueries:fordocincandidate_docs:all_pairs.append([query,doc])scores=reranker.compute_score(all_pairs,normalize=True,batch_size=64)

6.3 缓存策略

热门查询(如"性价比高的耳机")的 Rerank 结果可以缓存。对于电商场景,热门查询的重复率很高,缓存能显著降低延迟。


七、小结与预告

这节课我们完成了 RAG 检索链路的核心组件——Rerank 精排模型。

核心收获

  1. Bi-Encoder 快但不准,Cross-Encoder 准但不快,两阶段结合是最优解
  2. BGE-Reranker是中文精排的最佳选择,RTX 3090 上轻松运行
  3. 两阶段检索:Embedding 召回 Top-20 → Rerank 精排 Top-5,准确率提升 20%+
  4. recall_k=20是最佳召回数量

现在,我们有了完整的检索链路:Embedding → ChromaDB → Rerank。下一节课,我们将把这些组件串联起来,构建第一个真正的 RAG(检索增强生成)系统——让 LLM 基于检索到的知识回答问题。

我们下一课见。


系列教程导航

上一篇:第 10 课 | 向量数据库 ChromaDB 实战:存储与检索

下一篇:第 12 课 | RAG 检索增强生成:让 LLM 基于真实知识回答

本系列共 50 课,持续更新中。关注我不迷路。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/11 1:02:53

光伏电池建模与MPPT技术实践指南

1. 光伏电池PV建模与MPPT技术概述光伏发电作为可再生能源利用的重要形式,其核心在于如何高效提取太阳能电池板产生的电能。在实际工程中,光伏电池的输出特性呈现明显的非线性,且受光照强度、环境温度等因素影响显著。这就引出了两个关键技术问…

作者头像 李华
网站建设 2026/9/11 1:00:21

西门子S7-1200 PLC在包装机控制系统中的应用实践

1. 项目背景与需求分析在工业自动化领域,包装机械的控制系统设计一直是典型应用场景。我最近完成了一个基于西门子S7-1200 PLC的包装机控制系统项目,这个案例非常具有代表性。包装机通常需要完成产品输送、定位、包装材料供给、热封、打码、成品输出等系…

作者头像 李华
网站建设 2026/9/11 0:53:16

数据治理运营:核心挑战与实施框架解析

1. 数据治理运营的本质与核心挑战数据治理运营不是简单的数据管理,而是一套贯穿数据全生命周期的系统性工程。我在金融和互联网行业的数据治理实践中发现,90%的企业数据项目失败根源在于缺乏有效的运营机制。数据治理运营的核心在于让静态的数据管理策略…

作者头像 李华
网站建设 2026/9/11 0:47:30

怀化AI短视频效果对比:传统拍摄VS AI生成

来源:唐sirAI(www.tangsir.cc) | 电话:18874530691━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━很多怀化的商家在搜索怀化AI短视频效果对比时,都会有各种各样的疑问。今天&…

作者头像 李华