向量检索、BM25、重排在混合 RAG 中如何配合?

考查重点:多路召回、融合与重排。向量召回覆盖语义,BM25 抓精确词,两路合并去重或融合后重排;先统一权限过滤,再按预算组装上下文

本题目录

参考答案

核心回答

向量检索与 BM25 负责从不同角度召回候选,融合负责合并两路排序,重排负责进一步判断问题与候选片段的相关性。 它们通常按以下流程协作:

  1. 确定租户、权限和版本等检索范围,让两路召回都遵守这些条件。
  2. 并行执行向量召回和 BM25 召回:前者覆盖语义改写,后者保留错误码、型号等词项信号。
  3. 按片段 ID 合并候选,保留各路排名与来源,再用 RRF 等方法融合。
  4. 对有上限的候选集合执行 Rerank,选取更相关的片段;最后去冗余、补充必要上下文并保留引用,交给大模型生成答案。

例如,问“E1042 导致频繁退出怎么办”,BM25 有助于找准错误码,向量检索补充不同表述的排障资料,重排再区分“只提到故障”和“给出适用处理步骤”的候选。候选里没有正确证据时,重排无法把它补回来。

从召回到上下文,怎样接起来?

下面展示在线检索部分。权限和业务范围应进入两路检索条件,不能等资料进入模型上下文后才处理。

%%{init: {"themeVariables":{"fontSize":"16px"},"flowchart":{"nodeSpacing":16,"rankSpacing":30,"padding":10}}}%%
flowchart TB
    Q[问题与过滤条件] --> V[向量召回]
    Q --> B[BM25 召回]
    V --> U[按 ID 合并<br/>保留两路排名与来源]
    B --> U
    U --> F[RRF 融合]
    F --> R[有限候选重排]
    R --> C[构建证据上下文]
    C --> A[生成并引用来源]

图中把融合和模型重排分成了两步:前者利用已有检索名次,后者重新阅读问题与候选文本。

先保住候选,再统一排序

向量召回按模型学到的语义表示找相近片段;BM25 根据词项频次、稀有程度及长度等信号排序。假设某篇“E1042 处理手册”只在 BM25 通道命中,取两路候选的并集就能保留它,避免直接取交集造成漏召回。

同一片段可能被两路同时命中。合并时用稳定的片段 ID 关联结果,并保留它在两个列表中的名次,不能去重后只剩一个分数。文档版本不同的片段也不应仅因文字相近而混成同一证据。过滤发生在 ANN 前、搜索过程中还是搜索后,要核对具体引擎;严格过滤导致结果不足时,还需要检查候选规模与过滤后的有效召回。

融合不直接相加异构原始分数

BM25 分数与向量相似度通常没有统一量纲和取值范围,直接相加可能让某一路支配结果。RRF 使用名次规避这一步校准,其等权形式为:

RRF(d) = Σ 1 / (c + rank_i(d))

其中 rank_i 从 1 开始,只对片段实际出现的列表求和;没有命中的一路贡献为 0。c 是平滑常数,与每路召回多少条的 Top-K 不同。设 c=60,A 在两路都排第 2,则得分约为 0.03226;B 只在一路排第 1,则得分约为 0.01639,因此 A 会排在 B 前面。这个推演说明多路一致命中如何影响排名,并不表示 A 的内容一定更正确。Azure RRF 文档解释了融合过程及其与后续语义重排的关系。

RRF 会舍弃原始分数之间的距离信息。若要采用加权分数融合,应先定义并验证归一化与权重;RRF 的平滑常数本身也不等于通道权重。

重排之后,仍要构建证据上下文

常见 Cross-Encoder 将“问题—候选片段”一起输入模型,让两段文本直接交互,比独立向量比较更细致;代价是每个候选都需要额外推理。因此,召回量、送入重排的数量、最终上下文大小应分别设置,结合延迟和成本调优。

排在前面的片段还要经过证据组织:删除高度重复内容,必要时补回相邻条款,保留产品、版本、否定条件和来源位置,再按 Token 预算组装上下文。重排分数衡量相关性,不负责验证手册是否过时、处理步骤是否真实有效。

常见追问

怎样验证混合检索确实有收益? 固定知识库、切块、过滤条件、查询集和生成配置,对比 BM25、向量、混合、混合加重排四组。分别检查候选证据的 Recall@K、排序质量、最终答案与引用,以及延迟、成本;再按错误码和自然语言改写等查询类型看变化。评测方法可参考如何设计 RAG 评估方案和指标。

答案仍然不准,先调哪一层? 正确片段未召回,先查数据、查询和召回;已经召回却被排掉,查融合、候选截断与重排;进入上下文后仍答错,再查证据组织与生成。这样才能把改动与具体失败关联起来。

混合检索一定要加模型重排吗? 不一定。RRF 可以直接融合两路排名;如果融合结果已经满足质量与延迟要求,可以先保留这条基线。增加模型重排后,再比较排序质量、答案效果和额外成本,决定是否采用。

对应教程

参考资料

相关面经

19 篇

启云方

AI 应用开发工程师
一面
查看原面经 →
了解混合检索 / 多路召回吗?

小天才

AI 应用工程师(穿戴)
校招秋招一面
查看原面经 →
了解 BM25 和混合检索吗?

欧达光电

信息管培生
查看原面经 →
混合检索怎么实现?多路召回后怎么做重排?

字节跳动

Agent 开发工程师
一面、二面
查看原面经 →
多种检索方式同时使用时,最终结果怎样选出来?

顺丰科技

AI 开发工程师
校招一面
查看原面经 →
检索使用关键词、向量还是混合检索?
展开剩余 14 篇面经

百度

前端开发工程师
秋招
查看原面经 →
介绍RAG多路召回。

小红书

Product Engineer(AI 与全栈方向)
一面
查看原面经 →
追问
保留了向量检索 / 混合检索接口,具体怎么实现?

字节跳动

Agent 开发后端实习生
日常实习一面
查看原面经 →
简历里写了多种检索方式,分别是什么,为什么需要这么多种?

百度

Agent 开发工程师
日常实习
查看原面经 →
项目追问
你的混合检索是用什么做的?

中科创达

后端开发工程师(AI / RAG 方向)
查看原面经 →
RAG 的多路召回策略是怎么设计的?

字节跳动

大数据开发工程师
校招秋招一面
查看原面经 →
追问
AI怎么从知识库中召回内容?

虾皮

Agent 开发工程师
秋招一面
查看原面经 →
BM25关键词检索和向量检索通常如何结合使用?Rerank模型应该放在哪个阶段?

超参数

Agent 开发工程师
社招一面
查看原面经 →
Hybrid Search

字节跳动

后端开发工程师(AI)
实习一面
查看原面经 →
介绍你做的混合检索RAG方案,MeloWorth向量库、HNSW、BM25、Rerank各模块起到什么作用?

蚂蚁集团

Agent 应用开发工程师
一面
查看原面经 →
讲讲RAG的混合召回

阿里巴巴

Agent 算法工程师
一面
查看原面经 →
说明关键词检索+向量检索混合检索设计原因

美团

后端开发工程师
暑期实习一面
查看原面经 →
双路召回是什么?

字节跳动

后端开发工程师(Agent)
二面
查看原面经 →
什么是多路检索(Multi-way Retrieval)?向量检索和关键词检索分别解决什么问题?

阿里巴巴

Agent 开发工程师
查看原面经 →
为什么在向量检索的基础上还要加 BM25 精确检索?具体解决了什么 bad case?

收录题集

8 个来源,共13 份题集

RAG与知识库

阿东玩 AI · AgentGuide · 3 条原题

查看题集 →

推荐搜索与广告

阿东玩 AI · AgentGuide · 1 条原题

查看题集 →

向量数据库与嵌入

AMIT SHEKHAR · ai-engineering-interview-questions · 1 条原题

查看题集 →

Agent_RAG与混合检索工程

Rocky Ding · AIGC-Interview-Book · 2 条原题

查看题集 →

蚂蚁集团高频面试题

Rocky Ding · AIGC-Interview-Book · 1 条原题

查看题集 →
展开剩余 8 份题集

字节跳动高频面试题

Rocky Ding · AIGC-Interview-Book · 1 条原题

查看题集 →

提示工程:应用大模型的高级方法

Rocky Ding · AIGC-Interview-Book · 1 条原题

查看题集 →

大模型与多模态数学专题

Rocky Ding · AIGC-Interview-Book · 1 条原题

查看题集 →

大语言模型

Datawhale · daily-interview · 1 条原题

查看题集 →

AI 智能体与大模型应用开发面试题库

didilili · ai-agents-from-zero · 1 条原题

查看题集 →

RAG 知识库

沉默王二 · 王二讲 Agent · 2 条原题

查看题集 →

检索与知识工程问答

Guide · JavaGuide · 2 条原题

查看题集 →

八股集锦(高频问题)

小熊饼干_ · 个人整理 · 1 条原题

查看题集 →

相关题目

4 题