RAG重排:先分召回还是排序

📅 2026/7/30 21:58:42 👁️ 阅读次数 📝 编程学习
RAG重排:先分召回还是排序

读完这篇你能带走什么

:reranker只修排序,修不了召回,加错地方白搭延迟。
适用场景:RAG答非所问、加了重排没效果 | 不适用:还没上向量检索

上周排查一个知识库问答,业务同学说“答得不准”。我们照着教程加了 bge-reranker,准确率没动,P95 延迟倒是涨了 120ms。回退,加回,反复三次,结论很反直觉:reranker 加在了错的地方。

后来定位到根因:用户问的那段内容,向量检索压根没捞回来。候选集里就没有正确答案,reranker 再怎么重排也变不出来。这不是重排的锅,是召回的锅。

reranker 只做一件事:重排候选

先把原理说透,才知道它能救什么、救不了什么。

两阶段检索是这样的:

  • 第一阶段(召回):向量/BM25 从百万文档里

粗筛出 30~100 个候选,快但糙。

  • 第二阶段(精排):cross-encoder 把 query 和

每个候选拼在一起打分,重新排序,慢但准。

关键在于:reranker 的输入,只有第一阶段捞回来的那几十个候选。正确文档如果没进候选集,它永远看不到。

所以一句话记牢:

reranker 修的是“捞回来了但排在后面”,
修不了“压根没捞回来”。

这就是为什么“加了 reranker 没效果”——你的问题多半是召回问题,不是排序问题。particula.tech 把这条列为重排的第一诊断项:先分清是召回漏了,还是排序乱了。

三步诊断:该不该加、加在哪

第一步:测 recall,分清病因

拿 100~200 条真实用户 query,标注正确文档,

测两个数:

  • recall@5:前 5 个候选里有正确答案的比例
  • recall@100:前 100 个候选里有的比例

对照下表定位:

recall@100recall@5病因该做什么
排序问题加 reranker 有效
召回问题先修 chunking/混合检索
没病别加,纯加延迟

判据来自 presenc.ai:只有当 recall@100 明显高于 recall@5,reranker 才有发挥空间——说明正确答案在候选里,只是排靠后了。

召回本身就低,别指望 reranker 救。那是 embedding、分块、混合检索的活。

第二步:候选给够,别让它无事可做

最常见的低级错误:召回 8 个,重排 8 个。

reranker 没有腾挪空间,等于没加。正确姿势

是召回 30~100,精排到 8:

python

召回给够,精排收窄

candidates = retrieve(query, top_k=50)
reranked = reranker.rerank(
query, candidates, top_n=8
)

第三步:小心 512 截断这个静默坑

多数 cross-encoder 的输入上限是 512 token。

chunk 超了会被静默截断——不报错,尾部

内容直接丢,打分自然失真。

两个办法:重排前把长 chunk 切短,或换长

上下文重排模型(如 Jina ColBERT v2)。

还有一条:**reranker 分数别和向量相似度混

着用**。两者量纲不同,平均出来是垃圾分。

要么只信 reranker 的顺序,要么用 RRF 融合。

你明天就能用的行动清单

动作一:先跑召回诊断,再决定加不加

python

最小召回诊断:算 recall@k

def recall_at_k(hits, gold, k):
topk = [h.id for h in hits[:k]]
return 1.0 if gold in topk else 0.0

对 100 条 query 求均值

r100 明显 > r5 → 加 reranker

r100 本身低 → 先修召回

动作二:自托管重排最小实现(BGE)

python
from sentence_transformers import CrossEncoder

进程级加载一次,别每次请求都 load

_m = CrossEncoder(
“BAAI/bge-reranker-v2-m3”,
max_length=512,
device=“cuda”, # CPU 会慢 3~5 倍
)

def rerank(query, cands, top_n=8):
pairs = [(query, c.text) for c in cands]
scores = _m.predict(pairs, batch_size=32)
order = sorted(
range(len(cands)),
key=lambda i: scores[i],
reverse=True,
)
return [cands[i] for i in order[:top_n]]

  • 模型进程级加载,冷启动省 3~8 秒。
  • GPU 上 bge-reranker-v2-m3 精排 50 候选约

50~100ms;CPU 会到 200~400ms。

  • 延迟敏感就换 MiniLM-L-12(33M),延迟约

为 v2-m3 的 1/5,精度差约 10%,后面还有

LLM 兜底,多数场景够用。

动作三:延迟超标先减输入,再换模型

  • 召回 100→重排 100 太慢?先砍到 30~50。
  • 还慢?开 FP16,延迟再降 30~40%。
  • 都不够?换更小的重排模型,别硬扛大模型。

工具不会替你思考病因。加 reranker 前先花半天测一次 recall,比盲目堆三个月组件都值。

学AI大模型的正确顺序,千万不要搞错了

🤔2026年AI风口已来!各行各业的AI渗透肉眼可见,超多公司要么转型做AI相关产品,要么高薪挖AI技术人才,机遇直接摆在眼前!

有往AI方向发展,或者本身有后端编程基础的朋友,直接冲AI大模型应用开发转岗超合适!

就算暂时不打算转岗,了解大模型、RAG、Prompt、Agent这些热门概念,能上手做简单项目,也绝对是求职加分王🔋

📝给大家整理了超全最新的AI大模型应用开发学习清单和资料,手把手帮你快速入门!👇👇

学习路线:

✅大模型基础认知—大模型核心原理、发展历程、主流模型(GPT、文心一言等)特点解析
✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑
✅开发基础能力—Python进阶、API接口调用、大模型开发框架(LangChain等)实操
✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用
✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代
✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经

以上6大模块,看似清晰好上手,实则每个部分都有扎实的核心内容需要吃透!

我把大模型的学习全流程已经整理📚好了!抓住AI时代风口,轻松解锁职业新可能,希望大家都能把握机遇,实现薪资/职业跃迁~

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费