【AI Agent面试题】检索 rerank 为什么重要,怎么做?
从"向量召回不够准"讲到召回 + 精排两阶段 · 面向做 RAG 的开发者
做 RAG 时经常遇到这样的怪事:把 top-k 从 5 调到 20,答案反而更差了。检查召回,正确的那段其实在里面,但排在第 12 位,被前面一堆"看起来相关、实际没用"的片段淹没了。面试里这道题常被问:既然向量检索已经能召回,为什么还要 rerank?它到底解决什么、又是怎么做的?核心答案就一句:用"召回 + 精排"两阶段,把粗筛的量和精排的准分开做。
为什么单靠向量召回不够
向量检索(dense retrieval)的做法是:离线把每段文档用 embedding 模型压成一个固定长度的向量存进向量库;在线时把 query 也编码成向量,用近似最近邻(ANN)搜相似的片段。它最大的优点是快——百万级文档也能毫秒级返回。但快的代价是"糊":
- query 和文档是分开编码的
:这叫 bi-encoder(双塔),两边各自压成向量后只做一次点积/余弦。文档在入库时并不知道将来会被什么 query 检索,只能编码成一个"平均意义上都还行"的向量。
- 一个向量装不下全部语义
:一段几百字的文档被压成 768 维,细粒度的匹配信号(某个关键实体、某种否定关系)在压缩中被抹平。
- 相似 ≠ 相关
:向量相似度衡量的是"整体语义接近",但"接近"的片段未必真能回答问题。近义词、同话题但答非所问的段落,分数经常虚高。
结果就是:向量召回擅长"把可能相关的都捞上来"(高召回),却不擅长"把最该在前面的排到前面"(精度有限)。真正有用的那一两段,常常排在中游。
解法:召回 + 精排两阶段
rerank 的核心思想是分工——不追求一个模型既快又准,而是拆成两级流水线:
- 召回(retrieve / 粗排)
:用便宜的向量检索(或再叠加 BM25 关键词检索)从海量文档里快速捞出一批候选,比如 top-50 或 top-100。这一步只求"别漏",宽进。
- 精排(rerank)
:用一个更强但更慢的模型,对这几十个候选逐一和 query 做精细打分,重新排序,取最终 top-3 或 top-5 喂给大模型。这一步只求"排准",严出。
为什么要分两步而不是直接用精排模型扫全库?因为精排模型太贵,扫百万文档根本跑不动。让向量检索把候选从百万砍到几十,精排就只需处理几十条——又快又准,各取所长。
# 两阶段检索的典型流程 candidates = vector_search(query, top_k=50) # 阶段一:粗召回,宽进 scored = cross_encoder.rank(query, candidates) # 阶段二:精排打分 context = scored[:5] # 严出:只留最相关的几条精排怎么做:cross-encoder 是关键
精排能"更准",靠的不是更大的向量,而是换了一种模型结构——cross-encoder(交叉编码器)。
它和召回用的 bi-encoder 最本质的区别在于:把 query 和候选文档拼在一起,一次性送进模型,让两者从第一层就开始做逐词的交叉注意力(cross-attention),最后直接输出一个相关性分数。
# bi-encoder(召回):两边分开编码,事后算相似度 score = cos( encode(query), encode(doc) ) # cross-encoder(精排):拼在一起送进模型,直接出分 score = model( "[CLS] " + query + " [SEP] " + doc )因为 query 的每个词都能直接"看到"文档的每个词,cross-encoder 能捕捉 bi-encoder 丢掉的细粒度信号:否定、限定条件、实体是否精确对上、问题和答案的逻辑对应。这也是它更准的根本原因。
但代价同样明确:它无法预先离线编码——每来一个 query,都得把它和每个候选现算一遍,没法像向量那样建索引。所以 cross-encoder 只能用在"已经被砍到几十条"的候选上,绝不能扫全库。这恰好和两阶段架构互补:bi-encoder 负责规模,cross-encoder 负责精度。
| 维度 | 召回 · Bi-encoder(双塔) | 精排 · Cross-encoder(交叉) |
|---|---|---|
| 输入方式 | query 与 doc 分开编码 | query 与 doc 拼接后一起送入 |
| 能否离线建索引 | 能,文档向量可预存 | 不能,每次 query 现算 |
| 速度 | 快,百万级毫秒返回 | 慢,只能处理几十条候选 |
| 精度 | 有限,细粒度信号被压平 | 高,逐词交叉注意力 |
| 定位 | 第一阶段,宽进保召回 | 第二阶段,严出保精度 |
落地时的实用要点
- 召回宽度要够
:精排只能重排它拿到的候选,召回漏了就补不回来。top-k 召回建议给到 50~100,用 rerank 后再收窄到 3~5。宁可粗召回多捞,也别在第一步就漏掉答案。
- 混合召回更稳
:向量检索 + BM25 关键词检索并联(hybrid),能同时覆盖"语义相近"和"字面命中"两类情况,再统一交给 rerank,比单路召回鲁棒得多。
- rerank 是延迟大头
:cross-encoder 一次要跑几十次前向,是整条链路里最慢的一环。可以选轻量 rerank 模型、控制候选数量,或用现成的 rerank API(如 Cohere Rerank、BGE-reranker、Jina Reranker)平衡效果与延迟。
- 别把 rerank 当万能药
:它只能在召回结果里排序。如果召回本身质量差、正确片段根本没进候选,rerank 也无能为力——问题得回到切分策略、embedding 模型和召回宽度上解决。
一句判断:如果你发现"答案其实召回到了,但排在中游被噪声挤下去",那正是 rerank 的用武之地;如果"答案压根没被召回",那要修的是召回,不是精排。
一句话总结
向量召回快但糊,bi-encoder 分开编码只能保召回、保不了精度;rerank 用召回 + 精排两阶段破局——先用向量检索宽进捞出几十个候选,再用 cross-encoder 把 query 和文档拼在一起逐词精算重排,取最准的几条。规模交给召回,精度交给精排,各司其职,这就是 rerank 重要且好用的原因。
这里给大家精心整理了一份全面的AI大模型学习资源,包括:AI大模型全套学习路线图(从入门到实战)、精品AI大模型学习书籍手册、视频教程、实战学习、面试题等,资料免费分享!
👇👇扫码免费领取全部内容👇👇
1. 成长路线图&学习规划
要学习一门新的技术,作为新手一定要先学习成长路线图,方向不对,努力白费。
这里,我们为新手和想要进一步提升的专业人士准备了一份详细的学习成长路线图和规划。可以说是最科学最系统的学习成长路线。
2. 大模型经典PDF书籍
书籍和学习文档资料是学习大模型过程中必不可少的,我们精选了一系列深入探讨大模型技术的书籍和学习文档,它们由领域内的顶尖专家撰写,内容全面、深入、详尽,为你学习大模型提供坚实的理论基础。(书籍含电子版PDF)
3. 大模型视频教程
对于很多自学或者没有基础的同学来说,书籍这些纯文字类的学习教材会觉得比较晦涩难以理解,因此,我们提供了丰富的大模型视频教程,以动态、形象的方式展示技术概念,帮助你更快、更轻松地掌握核心知识。
4. 2026行业报告
行业分析主要包括对不同行业的现状、趋势、问题、机会等进行系统地调研和评估,以了解哪些行业更适合引入大模型的技术和应用,以及在哪些方面可以发挥大模型的优势。
5. 大模型项目实战
学以致用,当你的理论知识积累到一定程度,就需要通过项目实战,在实际操作中检验和巩固你所学到的知识,同时为你找工作和职业发展打下坚实的基础。
6. 大模型面试题
面试不仅是技术的较量,更需要充分的准备。
在你已经掌握了大模型技术之后,就需要开始准备面试,我们将提供精心整理的大模型面试题库,涵盖当前面试中可能遇到的各种技术问题,让你在面试中游刃有余。
7. 资料领取:全套内容免费抱走,学 AI 不用再找第二份
不管你是 0 基础想入门 AI 大模型,还是有基础想冲刺大厂、了解行业趋势,这份资料都能满足你!
现在只需按照提示操作,就能免费领取:
👇👇扫码免费领取全部内容👇👇
