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}")

调优建议

  1. Retrieve召回量与Rerank输出量的比例:常见配置是Top20召回 → Rerank → Top5输出。如果召回质量差,可增加召回量(如Top50),但会增加Rerank计算成本
  2. Rerank模型选择:中文场景优先BGE-Reranker,英文场景可选Cross-Encoder-MS-MARCO
  3. 成本优化:如果Rerank成本过高,可考虑”粗排+精排”两阶段——先用轻量模型粗排Top100 → Top20,再用精细模型精排Top20 → Top5
  4. A/B测试验证收益:Rerank是否有效需要在真实业务数据上A/B测试,不同领域收益差异较大

注意事项

  • 不要过度依赖Rerank:如果初步检索召回质量很差(Top20中只有1-2个相关文档),Rerank也无法挽救。应先优化Embedding模型和检索策略
  • Rerank不能替代Evaluate:Rerank只负责排序文档,不评估生成答案的质量。生成答案后仍需Evaluate节点检查忠实度、完整性
  • 避免过拟合:如果在固定测试集上调优Rerank参数,容易过拟合。应在真实用户查询上持续监控效果

相关页面