Rerank
对初步检索结果进行重排序,提升相关性排序质量,是RAG管道中检索与生成之间的关键质量控制节点
简介
Rerank(重排序)是RAG系统中介于检索(Retrieve)和生成(Generate)之间的关键步骤。初步检索(如向量检索或混合检索)快速召回TopK候选文档,但召回的文档排序未必最优(可能高相关的文档排在后面,低相关的文档排在前面)。Rerank阶段使用更精细的模型(如Cross-Encoder或专用Rerank模型)对候选文档重新打分排序,提升最终输入到LLM的上下文质量。相比粗排,Rerank计算成本更高但准确性更强,是生产级RAG系统提升回答质量的标准环节。
关键信息
| 项目 | 内容 |
|---|---|
| 类型 | 技术方法 |
| 在RAG管道中的位置 | Retrieve → Rerank → Compress → Generate |
| 输入 | 初步检索的TopK文档(如Top20) |
| 输出 | 重排序后的TopN文档(如Top5) |
| 常用模型 | Cross-Encoder、BGE-Reranker、Cohere Rerank API |
| 核心作用 | 提升相关性排序质量,降低无关文档干扰 |
核心特性
为什么需要Rerank
初步检索的局限:
- 向量检索(单塔模型):Query和Document分别编码为向量,只能用向量相似度(如COSINE)排序,无法捕获Query与Document之间的精细交互关系
- 混合检索(RRF融合):虽然结合了语义和关键词,但RRF融合策略是简单的倒数排名加权,没有利用Query和Document的深层语义匹配
Rerank的优势:
- 深层交互建模:Cross-Encoder同时编码Query和Document,通过Transformer的Attention机制捕获两者之间的精细匹配关系
- 更准确的相关性评分:相比向量相似度,Rerank模型的评分更接近人类对相关性的判断
- 过滤无关文档:将低相关文档排到后面,减少输入LLM的噪声,降低幻觉风险
Rerank在RAG管道中的位置
典型RAG管道(以天涯轩100元RAG实验为例):
Query → Retrieve (Top20) → Rerank (重排序得到Top5) → Compress (压缩上下文) → Generate → Evaluate分工逻辑:
- Retrieve:快速召回(强调召回率),宁可多召回也不漏掉相关文档
- Rerank:精细排序(强调准确率),把最相关的文档排到最前面
- Compress:压缩冗余(强调上下文效率),去除重复信息和无关细节
- Generate:基于高质量上下文生成回答
- Evaluate:评估答案质量,失败则触发重试
Rerank模型类型
1. Cross-Encoder模型
将Query和Document拼接后输入BERT/RoBERTa等模型,输出相关性分数:
# 伪代码
input = f"[CLS] {query} [SEP] {document} [SEP]"
score = cross_encoder(input) # 输出0-1之间的相关性分数优点:捕获深层交互关系,准确率高 缺点:每对(Query, Document)都需要单独推理,计算成本高(不适合粗排,只用于精排)
2. 专用Rerank API
- Cohere Rerank API:商业API,输入Query和候选文档列表,返回重排序结果
- BGE-Reranker:开源Rerank模型(北京智源研究院),支持中英文,可本地部署
3. LLM作为Reranker
直接用LLM对候选文档打分排序(如GPT-4、Claude),但成本高、延迟大,通常只在对质量要求极高的场景使用。
Rerank的成本与收益权衡
成本:
- 计算成本:Cross-Encoder需要对每对(Query, Document)单独推理,Top20候选需要20次推理
- 延迟增加:增加100-300ms(取决于模型大小和部署方式)
- API成本:如使用Cohere Rerank API,每1000次请求约0.2-0.5美元
收益:
- 相关性提升:通常可提升10-20%的准确率(相比不Rerank)
- 幻觉降低:过滤掉无关文档,减少LLM基于错误上下文生成的风险
- 用户体验提升:答案更准确,引用来源更相关
适用判断:
- 需要Rerank:企业知识库、客服系统、法律/医疗专业领域(对准确率要求高)
- 可选Rerank:简单FAQ、闲聊型对话(对准确率要求不高)
- 不建议Rerank:实时性要求极高(如100ms内响应)且对准确率容忍度高的场景
不同素材中的观点
来自 2026-05-30-ai-rag-production-100-yuan:
- 天涯轩在100元RAG实验中,LangGraph十节点管道的标准流程是:retrieve → rerank → compress → generate → evaluate
- Rerank节点的作用是”对TopK结果重排序,提升相关性”,与后续的compress(压缩上下文)和evaluate(质量评估)共同构成质量控制闭环
- 核心设计原则:不在retrieve阶段硬过滤低分结果(如设0.7阈值),而由rerank + grade承担质量控制。原因是通义v3的COSINE分数常在0.2-0.45区间,过早硬过滤会导致全部被过滤,无文档可用
- Rerank与Evaluate的分工:Rerank负责排序候选文档的相关性,Evaluate负责评估生成答案的质量(忠实度、完整性),两者分别控制”输入质量”和”输出质量”
实用信息
常用工具
开源模型:
- BGE-Reranker(BAAI/bge-reranker-base):北京智源研究院开源,支持中英文,适合本地部署
- Cross-Encoder-MS-MARCO:Microsoft开源,英文场景,在MS-MARCO数据集上训练
商业API:
- Cohere Rerank API:输入Query和候选列表,返回重排序结果,支持多语言
- Jina AI Rerank API:类似Cohere,提供更灵活的定价
集成框架:
- LangChain:提供ContextualCompressionRetriever,支持集成Rerank模型
- LlamaIndex:提供Rerank后处理节点,支持多种Rerank模型
实现示例(伪代码)
# 1. 初步检索Top20
documents = vector_db.search(query, top_k=20)
# 2. Rerank重排序得到Top5
reranked = rerank_model.rank(
query=query,
documents=[doc.content for doc in documents],
top_n=5
)
# 3. 输入LLM生成答案
context = "\n\n".join([doc.content for doc in reranked])
answer = llm.generate(f"基于以下上下文回答问题:\n{context}\n\n问题:{query}")调优建议
- Retrieve召回量与Rerank输出量的比例:常见配置是Top20召回 → Rerank → Top5输出。如果召回质量差,可增加召回量(如Top50),但会增加Rerank计算成本
- Rerank模型选择:中文场景优先BGE-Reranker,英文场景可选Cross-Encoder-MS-MARCO
- 成本优化:如果Rerank成本过高,可考虑”粗排+精排”两阶段——先用轻量模型粗排Top100 → Top20,再用精细模型精排Top20 → Top5
- A/B测试验证收益:Rerank是否有效需要在真实业务数据上A/B测试,不同领域收益差异较大
注意事项
- 不要过度依赖Rerank:如果初步检索召回质量很差(Top20中只有1-2个相关文档),Rerank也无法挽救。应先优化Embedding模型和检索策略
- Rerank不能替代Evaluate:Rerank只负责排序文档,不评估生成答案的质量。生成答案后仍需Evaluate节点检查忠实度、完整性
- 避免过拟合:如果在固定测试集上调优Rerank参数,容易过拟合。应在真实用户查询上持续监控效果