☰
RAG 检索架构:向量粗排 + Reranker 精排,到底怎么配合?
2026/10/20 11:06:20 网站建设 项目流程

在RAG检索增强生成、知识库问答、文本检索系统开发中,向量检索与Reranker重排模型是两大核心组件。很多开发者落地RAG时会遇到经典痛点:向量检索返回文本语义看着很像,但和用户实际问题无关,直接导致大模型幻觉、回答错误。本文拆解双编码器Bi‑Encoder与交叉编码器Cross‑Encoder底层原理,讲清楚向量检索的固有缺陷、Reranker纠错机制,以及工业界通用的向量粗排+Reranker精排双阶段落地架构,同时说明为什么不能直接用Reranker做全库检索。

一、前言

搭建RAG系统,绝大多数同学第一版都会直接使用向量检索做知识库召回。 上线之后很容易踩坑:检索出来的片段句式、语义相似度很高,但关键实体、条件对不上,属于“看似相似,实则无关”,把错误上下文喂给大模型,就会产出错误答案。

想要解决该问题,Reranker重排模型是标准解法。

记住核心结论:

  • 向量检索:各自编码、粗看相似度,问题和文档打分前零交互。Reranker:拼接比对、深度交互,问题和文档逐词匹配,精准区分真伪相关。
  • 向量检索:负责从海量知识库中快速捞出一批候选文档(粗排召回)
  • Reranker:针对召回出来的候选集合,做精细打分、重新排序(精排纠错)

整套RAG检索链路的原理,都围绕这个分工展开。

二、向量检索为什么经常误召?Bi‑Encoder双编码器架构

向量检索底层依赖双编码器(Bi‑Encoder),这是它速度快,但精度存在上限的根源。

2.1 向量检索运行逻辑

双编码器最大特点:用户问题和知识库文档完全独立编码,互相感知不到对方。

业务示例:

用户Query:客户A上次拜访需要什么产品?

候选文档片段:客户B上周拜访,需要产品Y...

完整检索三步流程:

  1. 编码查询:单独把用户问题送入编码器,输出768维查询向量。[0.12, -0.88, 0.33, ...]
  2. 编码文档:提前离线把知识库所有文档编码成向量,存入向量数据库。[0.11, -0.85, 0.35, ...]
  3. 相似度计算:余弦相似度计算向量距离,得到相似度得分0.94,判定为高度相关,召回这条文档。

问题:查询问的是客户A,文档讲的是客户B,实体完全不一样,向量检索却打出高分。这就是RAG开发高频遇到的误召现象。

2.2 向量检索三大固有缺陷

整个计算链路中,文档编码的时候用户问题还不存在;编码查询的时候知识库文档不参与运算。两边全程隔离,只依靠向量数值距离判断相似度,带来三个无法规避的短板:

  1. 语义压缩不可逆损耗文本完整语义被压缩到固定维度向量,大量细节信息被抹平。例如客户A和客户B这种关键实体差异,压缩到向量空间之后差异变得微弱,很难区分。
  2. 措辞相似不等于业务相关向量检索擅长识别句式、文本结构相似度,不理解真实业务语义。客户A拜访记录与客户B拜访记录文本结构高度接近,向量距离很近,但业务层面完全无关。
  3. 对实体、条件、编号不敏感客户名称、时间、订单ID这类需要精确匹配的字段,是向量检索的弱项。向量检索擅长模糊语义匹配,不擅长精准实体校验。

2.3 向量检索能力定位

✅ 优势:

  • 查询速度快,百万级文档毫秒级响应
  • 文档向量支持离线预计算入库
  • 适合海量数据快速筛选

❌ 短板:

  • 语义细节丢失,容易被近义文本干扰
  • 实体、条件匹配能力弱
  • 只能判断文本大概像不像,无法确认内容是否真正满足用户问题

向量检索适合做粗排召回,不适合直接作为最终排序结果。

三、Reranker精排模型:Cross‑Encoder交叉编码器精准纠错

Reranker之所以可以弥补向量检索的缺陷,核心是更换底层架构:交叉编码器Cross‑Encoder,抛弃分开编码的思路。

3.1 Reranker运行原理

Reranker不再把query和文档分开编码,而是将查询与文档拼接在一起送入模型。

沿用上面案例,模型输入格式:

[CLS] 客户A上次拜访需要什么产品? [SEP] 客户B上周拜访,需要产品Y... [SEP]

依靠Transformer自注意力机制,实现查询里每一个字词和文档中每一个字词充分交叉比对。模型可以直接识别出核心实体差异:查询是客户A,文档是客户B,二者不匹配,输出相关性分数0.12,直接判定为低相关。

向量检索看“文本大概像不像”;Reranker是逐词比对,判断“内容到底是不是答案”。

注意:单条Query‑Doc对打分只是Reranker最小计算单元;Rerank语义本身就是重新排序,业务场景一定是对多条候选文档做重排。

3.2 Reranker完整重排流程

标准RAG检索链路:

  1. 用户输入Query;
  2. 向量检索从百万知识库召回Top‑K候选,例如Top100;
  3. Reranker遍历每一条候选,构造Query + Doc输入对;
  4. Cross‑Encoder推理输出每一条文档相关性分数;
  5. 根据分数降序重排;
  6. 取Top‑N(Top3/Top10)送入Prompt,交给大模型生成回答。

举个实例演示重排效果:

向量粗排输出结果:

初始排名候选文档向量相似度
1客户B上周拜访,需要产品Y...0.94
2客户A上次拜访,需要产品X...0.92
3客户C昨天拜访,需要产品Z...0.90

经过Reranker打分:

候选文档Reranker分数说明
客户B上周拜访,需要产品Y...0.12实体客户B不匹配
客户A上次拜访,需要产品X...0.95实体客户A匹配
客户C昨天拜访,需要产品Z...0.20实体客户C不匹配

重排之后新顺序:

重排排名候选文档Reranker分数
1客户A上次拜访,需要产品X...0.95
2客户C昨天拜访,需要产品Z...0.20
3客户B上周拜访,需要产品Y...0.12

最终选取Top‑N给到LLM。向量检索完成第一轮粗排序,Reranker完成第二轮纠错重排。

3.3 粗排与精排能力对比表

对比维度向量检索(粗排)Reranker(精排)
编码方式查询、文档独立编码查询文档拼接统一编码
文本交互打分前零交互全局逐词交叉交互
处理对象全量知识库向量召回输出Top‑K候选
核心强项速度极快,海量文档筛选精度高,识别实体、细微语义差异
核心短板容易误召,细节丢失推理慢,算力开销大
底层架构Bi‑EncoderCross‑Encoder
所处阶段粗排召回精排纠错
输出结果Top‑K候选集合Top‑N最终检索结果

一句话概括:向量检索负责快速捞候选,Reranker负责精准挑答案。

四、为什么不用Reranker直接检索全量知识库?

既然Reranker精度更高,为什么工业界不会直接拿Reranker跑百万级全量文档?核心原因:算力开销巨大,算不动。

4.1 计算成本差异

向量检索

  • 文档向量可以离线提前计算好存入向量库
  • 查询阶段:1次查询编码 + 全库向量相似度比对
  • 百万文档毫秒级返回,成本很低。

Reranker

  • 不存在离线预计算;每一组Query+Doc都需要完整跑一遍模型推理
  • 如果直接对百万文档做Reranker检索,需要百万次模型推理,耗时数十秒,业务完全不可接受。

Reranker精度强,但不能直接作用全库;向量检索速度快,但精度存在上限。二者必须组合使用。

4.2 工业界标准双阶段RAG检索架构

兼顾检索效率与检索准确率,成熟RAG系统几乎全部采用向量粗排 + Reranker精排双阶段架构。

全库百万级文档 ↓ 向量检索粗筛:毫秒级过滤,召回Top100候选 牺牲部分精度,换取查询效率 ↓ Reranker精排:仅对Top100做模型推理,算力可控 过滤伪相关文档,输出Top3/Top10高质量片段 ↓ 将最优候选送入Prompt,交给大模型生成回答

架构本质:

向量检索解决效率问题:如何从海量文档快速筛选候选;

Reranker解决精度问题:如何从候选集合里过滤虚假相关,拿到真正有用上下文。

五、总结

  1. 向量检索基于Bi‑Encoder双编码器,查询和文档分开编码,速度快,但无法分辨细微实体差异,容易召回伪相关文本,适合粗排召回。
  2. Reranker基于Cross‑Encoder交叉编码器,查询文档拼接输入,逐词深度交互,相关性判断能力强,但是推理成本高,只能做精排。
  3. 不要直接拿Reranker检索全量知识库;工业最优实践:向量粗排召回TopK,Reranker做二次精排取TopN,再喂给大模型。
  4. RAG效果差,不要一味怪大模型,很多时候根源在检索环节,检索拿不到正确上下文,LLM再强也会产生幻觉。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询