Rerank 在 RAG 中解决什么问题?
Rerank 在 RAG 中解决什么问题?和向量检索有什么区别?

面试里问到 Rerank,基本是在考你对 RAG 检索流程的理解深度。这道题考察的是:你知不知道 RAG 有两道检索关卡,知不知道向量检索的局限性在哪,更知道 Rerank 怎么补上这些短板。
核心就一句话:向量检索是粗筛快速捞候选集,Rerank 是精筛精细评估重新排序。 两者构成漏斗结构,缺一不可。
RAG 检索漏斗的两道关卡
先搞清楚 Rerank 在 RAG 流程里扮演什么角色。
整个 RAG 检索可以理解成一个漏斗形状:
海量文档 → 向量检索(粗筛) → Top-50 候选集 → Rerank(精筛) → Top-5 精准结果 → LLM 生成答案
第一道关卡是向量检索。Embedding 模型把文档和查询都转成向量,在向量空间里找相似度最高的候选。这步追求的是快和大,从海量文档里快速捞出可能相关的几十条。
第二道关卡才是 Rerank。它拿到向量检索筛出来的 Top-50,做更精细的评估和重新排序,输出最终的 Top-5 交给 LLM。

类比一下找工作的场景:
HR 先用简历关键词快速筛选 100 份候选简历——这就是向量检索的粗筛作用。然后技术面试官逐一深入评估,选出 5 个人进入终面——这就是 Rerank 的精筛作用。
你想想,让 HR 一个人从一万份简历里精挑细选找出最好的 5 份,可能吗?同样,让 LLM 直接在海量文档里找答案,效果肯定差。漏斗结构让每个环节做自己擅长的事:向量检索负责广度,Rerank 负责精度。
Bi-Encoder 与 Cross-Encoder 的架构差异
理解了漏斗结构,再来看看两种编码器的本质区别。这个是面试高频考点。
Bi-Encoder(双向编码器)的工作方式:Query 和 Document 各自独立进入编码器,生成两个向量,然后计算余弦相似度来判断相关性。
Cross-Encoder(交叉编码器)的工作方式:Query 和 Document 拼接在一起进入编码器,通过自注意力机制充分交互,直接输出一个相关性分数。

用人话来说这个区别:
Bi-Encoder 就像两个人各自填好简历表,然后根据简历的相似度来推断他们适不适合。你只能通过简历上的关键词匹配度来判断,但看不到他们真正面对面交流时的表现。
Cross-Encoder 就像两个人坐在一起面对面深度交流。面试官能观察到每一个细节反应、每一个语义理解,真正知道这两个人到底适不适合。
关键差异在于交互深度:
Bi-Encoder 在编码时就完成了信息压缩,后续相似度计算是"事后比较",缺乏真正的语义交互。Cross-Encoder 让 Query 和 Document 在同一个 Transformer 里充分交互,能捕捉细粒度的语义匹配。
举个例子感受一下:
Query: "苹果多少钱一斤"
Document A: "水果价格查询,今日苹果5元一斤"
Document B: "苹果公司股票价格,今日AAPL报价150美元"
用 Bi-Encoder 编码后,两个文档的向量可能和 Query 的相似度差不多——因为"苹果"这个关键词在两边都出现了。
用 Cross-Encoder 编码后,把 Query 和 Document 拼接输入模型,模型能看到完整的上下文:"苹果"+"多少钱一斤"+"水果"这几个词一起出现的时候,Document A 的相关性得分会明显高于 Document B。Cross-Encoder 能理解"多少钱一斤"这个查询意图,Document B 虽然也包含"苹果",但语义完全不匹配。
向量检索的三大局限与 Rerank 的解决方案
说完架构差异,再看看为什么非得用 Rerank。
向量检索有三个绕不开的痛点:
第一,相似度阈值难设。
Embedding 模型输出的相似度分数是一个连续值,但你需要一个截断点来决定"哪些相关、哪些不相关"。设高了会漏掉相关文档,设低了会召回太多噪音。
这个阈值在不同场景、不同时期的数据分布下都不一样,很难调到最优。向量检索是"一锤子买卖",要么进要么出,没有中间地带。
第二,语义歧义难以消除。
Embedding 把 Query 和 Document 都压缩成固定维度的向量,在这个压缩过程中,多义词、歧义表达的信息会丢失。
"芯片"可以指半导体芯片,也可以指电脑内部的 CPU/GPU 芯片。"苹果"可能是水果也可能是公司。这些在向量空间里很难精确区分。
第三,信息丢失不可避免。
Embedding 模型通常把几百字的文档压缩成 768 维或 1024 维的向量。这就像把一篇完整的文章缩成一句话摘要——核心信息可能保留,但大量细节必然丢失。

Rerank 怎么解决这三个问题:
针对阈值难设:Rerank 输出的是直接可比的分数,不是一个需要你设阈值的相似度。你只需要取 Top-K 就行,K 值可以根据效果灵活调整。
针对语义歧义:Cross-Encoder 在编码阶段就做了完整的语义交互,能根据 Query 上下文动态理解 Document 的真实含义,消除歧义。
针对信息丢失:Rerank 模型接收的是原始文本(或者至少是完整的文本片段),不依赖 Embedding 向量的中间表示,保留了完整的语义信息。
说白了:向量检索是在"压缩空间"里找相似,Rerank 是在"原始空间"里做判断。 压缩空间里丢失的信息,只有回到原始空间才能捡回来。
主流技术方案与选型建议
现在你知道为什么需要 Rerank 了,但具体怎么实现?
方案一:Cross-Encoder(最主流)
用专门的 Rerank 模型,比如 BGE-Reranker、bce-reranker-base、Cohere Rerank。
模型把 Query 和 Document 拼接输入,输出一个相关性分数。精度高,但每条候选都需要一次前向传播,延迟和成本都高于向量检索。
方案二:LLM-as-Judge(效果最好但贵)
直接用 GPT-4 或 Claude 这样的 LLM 来判断相关性。
效果最好,但成本极高、延迟很大,一般只用于离线评估或者对精度要求极高的场景。
方案三:特征融合(速度最快)
把向量检索的相似度分数和其他特征(比如 BM25 分数、关键词命中数)加权融合。
速度最快,但精度不如 Cross-Encoder,适合对延迟敏感的场景。

实际项目中,Cross-Encoder 是主流选择。推荐几个常用模型:
- BGE-Reranker:效果好,开源免费,适合技术团队自部署
- bce-reranker-base:专门针对中文优化,中文场景首选
- Cohere Rerank:开箱即用,API 调用方便,但需要付费
选型的时候想清楚你的场景:追求精度选 Cross-Encoder,追求成本选特征融合,追求极致效果不差钱选 LLM-as-Judge。
面试怎么答
基础版(约150字):
Rerank 是 RAG 检索漏斗的第二道关卡,负责对向量检索召回的 Top-20 到 50 候选集做精细排序。核心区别在于编码方式:向量检索用 Bi-Encoder 把 Query 和 Document 分开编码,靠向量相似度判断;Rerank 用 Cross-Encoder 把两者拼接后全注意力交互,能捕捉细粒度语义匹配。Rerank 主要解决三个问题:消除 Embedding 压缩导致的信息丢失、解决语义歧义、动态适配不同查询类型。
加分版(约200字):
Rerank 是 RAG 检索漏斗的第二道精筛关卡,通常对向量检索召回的 Top-20 到 50 做重新排序,输出 Top-5 送给 LLM。架构上,向量检索的 Bi-Encoder 方式分开编码靠相似度判断,而 Cross-Encoder 拼接后全注意力交互能理解完整上下文。实际调优中,候选集大小有个边际收益拐点,Top-30 左右性价比最高;低于 0.3 分的文档直接返回"未找到"效果更好。技术选型上,Cross-Encoder 精度最高是主流方案,中文场景推荐 bce-reranker,通用场景推荐 BGE-Reranker。需要强调的是,Rerank 的效果要用端到端 QA 评估,用标注数据集对比"有/无 Rerank"的最终回答准确率。
一句话总结
Rerank 就是 RAG 检索漏斗的精筛关卡,用 Cross-Encoder 的全注意力交互补上向量检索 Bi-Encoder 的精度短板,让最终送入 LLM 的文档质量更高。

