真实面经题目 · 原创解析

RAG 中既然向量检索已经计算相似度,为什么还需要 Cross-Encoder 重排?

这道题考察 RAG 检索链路中双塔向量召回和 Cross-Encoder 重排的职责边界。好的回答要说明向量检索适合在大规模语料上做低成本粗召回,但它把 query 和文档分别编码,主要比较全局语义相似度,难以精细判断短语匹配、否定关系、字段约束、时效和答案可用性。Cross-Encoder 把 query 与候选片段一起输入模型,可以做 token 级交互和上下文相关判断,因此通常用于小候选集精排。回答还应覆盖成本、延迟、候选规模、失败模式、评估指标和何时不需要重排。

出现于:快手 · 后端开发

60 秒回答模板

向量检索和 Cross-Encoder 解决的是 RAG 中不同阶段的问题。向量检索一般是 bi-encoder,把问题和文档片段分别编码成向量,再用 ANN 在海量语料里快速找 topK。它的优势是可预计算、吞吐高、延迟低,适合做第一层召回;但因为 query 和文档在编码时没有逐 token 交互,分数更像粗粒度语义接近度,容易把主题相似但不回答问题、条件不匹配、时间过期或细节相反的内容排到前面。Cross-Encoder 重排是在召回后的几十到几百个候选上,把 query 和每个候选拼在一起输入模型,让模型同时看到双方词、句子和字段关系,判断这个片段是否真正支持答案。它能更好处理精确实体、否定、比较、数字、时间、权限、标题与正文关系,也能加入 freshness、来源质量等特征。代价是每个 query-candidate pair 都要在线推理,不能对文档预先算好向量,所以不适合全库检索。一个常见设计是向量召回 top100 或 top200,再用 Cross-Encoder 排到 top5 或 top10,最后交给生成模型;是否启用要看任务精度要求、延迟预算和评测收益。

考点 召回与精排分工
难度 真实面经题
回答目标 让读者能清楚区分向量召回与 Cross-Encoder 重排的目标、能力边界和成本,并能设计一条可评估的 RAG 检索精排链路。

深入解析

01

两阶段定位

RAG 的检索通常先解决“从百万到百”的召回问题,再解决“从百到几”的排序问题。向量检索承担高召回、低成本、可扩展的粗筛;Cross-Encoder 承担高精度、强交互、低候选量的精排。二者不是重复计算相似度,而是在不同成本区间优化不同目标。

02

Bi-Encoder 限制

向量检索多使用双塔或离线 embedding,query 和文档分别编码,最后用 cosine、dot product 或近似距离比较。因为文档向量必须提前计算,它无法在编码时针对当前 query 重新关注某个句子、字段或限定条件,所以容易把“同主题”误当成“能回答”。

03

交互建模价值

Cross-Encoder 把 query 与候选片段作为一个输入序列,模型的注意力可以直接比较问题词和证据词。例如问题问“2024 年之后是否仍支持某功能”,重排模型可以关注时间、版本、否定词和功能名之间的关系,而不是只看整体语义相近。

04

排序目标差异

向量相似度通常优化语义接近,Cross-Encoder 可以优化 relevance、answerability、grounding strength 或 pairwise ranking。对 RAG 来说,最重要的不是候选看起来相关,而是它能否为最终回答提供可引用、未冲突、未过期、粒度合适的证据。

05

工程链路

常见链路是多路召回,包括 BM25、dense vector、实体或规则召回;然后合并去重、做元数据过滤,再把 topK 候选送入 Cross-Encoder;最后按重排分数、时效、来源质量、片段多样性和 token 预算选择上下文。Cross-Encoder 通常只跑在较小候选集上。

06

成本取舍

Cross-Encoder 的主要代价是在线计算量与候选数线性增长,top200 就是 200 次 pair 推理或一个批处理矩阵;长片段还会放大 token 成本。因此需要通过候选截断、批量推理、轻量模型、缓存、早停和分层重排控制延迟。低风险问答可能不需要每次都重排。

07

失败模式

没有重排时常见问题是召回片段主题相关但细节不满足、旧版本文档压过新文档、相似实体混淆、只命中背景段落而非答案段落。重排也可能失败,例如候选阶段没召回真正证据、重排模型训练分布不匹配、长文截断丢证据,或过度偏向短文本和标题。

08

评估方法

评估不能只看 embedding topK 命中率。应分别看召回 recall@K、重排后的 MRR/NDCG、最终答案 groundedness、引用准确率、过期证据率、冲突证据率、端到端延迟和成本。只有当重排显著提升最终答案质量并在延迟预算内,才值得长期启用。

易错点

  • 认为向量检索已经有相似度,所以重排只是重复排序。
  • 把 Cross-Encoder 当成全库检索模型,忽略它不能像 embedding 一样离线建索引。
  • 只说 Cross-Encoder 更准,不解释 token 级交互和 answerability 判断。
  • 把主题相关性等同于证据可用性,忽略时间、版本、否定和字段条件。
  • 盲目把候选 topK 拉大,导致延迟和成本不可控。
  • 认为重排能解决所有问题,忽略召回漏掉正确文档时精排无能为力。
  • 只评估检索 NDCG,不看最终回答是否 grounded、是否引用正确证据。
  • 没有考虑缓存、批处理、模型蒸馏和按风险启用重排的工程取舍。

面试官追问

Cross-Encoder 重排的候选数一般如何选择,top50、top100、top200 的取舍是什么?

候选数要从召回曲线和延迟预算一起定。top50 延迟低但可能漏掉正确证据,top200 覆盖更好但推理成本明显增加。常见做法是先用评测集看 recall@K 何时趋于平缓,再按 P95 延迟、上下文预算和业务风险选择默认值,并允许高风险问题动态放大候选。

BM25、向量召回和 Cross-Encoder 在混合检索里分别解决什么问题?

BM25 擅长精确词、实体名、代码符号和罕见短语匹配;向量召回擅长语义改写和同义表达;Cross-Encoder 负责在合并候选后判断哪段证据最能回答当前问题。混合检索通常先多路召回扩大覆盖,再去重、过滤、重排,避免单一路径的偏差。

如果 Cross-Encoder 延迟太高,可以用哪些分层重排或蒸馏方案?

可以先用轻量特征或小模型把 top200 缩到 top50,再用更强 Cross-Encoder 精排 top10;也可以把大模型排序结果蒸馏到小模型,配合批量推理、缓存热门 query-candidate、缩短片段长度和按风险启用重排。关键是保留质量评测,不能只为了降延迟牺牲证据正确性。

Cross-Encoder 的训练数据应该标注相关性、可回答性,还是最终答案正确性?

最好分层标注。相关性保证候选和问题主题相关,可回答性判断片段是否足以支撑答案,最终答案正确性用于端到端校准。RAG 重排更依赖可回答性和证据强度,因为主题相关但不能回答的问题很多。训练时可以把无答案、过期、冲突和条件不匹配样本作为负例。

重排模型如何处理长文档切片、重复片段和多证据合成场景?

长文档应先按语义和结构切片,保留标题、章节、时间和来源元数据;重复片段要在重排前后做去重或多样性约束。多证据问题不能只选最高分单段,应按实体、时间线或条件覆盖选择互补证据,并在生成前标明证据角色,避免多个片段互相冲突。

什么时候可以只用向量检索而不接 Cross-Encoder?

如果问题风险低、语料干净、切片粒度稳定、topK 召回已经能稳定命中可用证据,并且延迟预算非常紧,可以先只用向量检索。典型场景是内部 FAQ、短文本语义搜索或召回结果只给人看。只要进入自动生成答案,仍建议用评测数据确认重排收益是否可以省略。