现在很多 AI 知识库、智能客服、文档问答、代码助手,背后都会提到一个词:RAG

RAG 的全称是 Retrieval-Augmented Generation,中文一般叫:

检索增强生成

简单说就是:

大模型回答问题之前,先去知识库里找资料,再根据资料生成答案。

而在 RAG 里,最常见的几个模型就是:

模型

中文理解

主要作用

Embedding 模型

向量化模型

把文本变成语义向量,用来召回相关内容

Rerank 模型

重排序模型

对召回结果重新打分,把最相关的排前面

LLM 大模型

生成模型

根据资料生成自然语言答案

这几个模型不是互相替代的关系,而是分工协作。

一、为什么需要 RAG?

大模型本身虽然很强,但它有几个天然问题:

  1. 不知道你的私有资料

    比如公司的接口文档、内部业务流程、项目代码规范,大模型训练时根本没见过。

  2. 知识可能过期

    比如某个框架的新版本、新 API、新配置方式,大模型不一定知道。

  3. 容易编

    如果没有资料约束,大模型可能会根据“看起来合理”的内容生成答案,也就是常说的幻觉。

所以 RAG 的思路是:

不要求大模型死记硬背所有知识,而是让它回答前先查资料。

这就像一个人写文章之前,先去资料库查资料,再整理成答案。

二、Embedding 模型:负责“先找可能相关的资料”

Embedding 模型的作用是:

把文本变成一组数字向量。

但这里的重点不是“文字变数字”,而是:

把文本的语义变成可以计算距离的数字。

比如这几句话:

文本

汽车怎么保养

车辆维护有哪些注意事项

苹果手机怎么截屏

从字面上看,第一句和第二句用词不同。

但是从语义上看:

  • 汽车车辆 相关

  • 保养维护 相关

所以 Embedding 模型会让前两句话的向量距离更近,而让第三句话距离更远。

这就是语义向量的价值。

在 RAG 里,系统会提前把知识库里的文档切成片段,然后用 Embedding 模型转成向量,存到向量数据库里。

用户提问时,也会把问题转成向量,然后去向量数据库里找距离最近的文档片段。

所以 Embedding 模型主要解决的问题是:

从大量资料中,快速找出“可能相关”的内容。

三、为什么向量化也需要模型?

很多人第一次听到 Embedding 会疑惑:

向量化不就是转数字吗?为什么还要模型?

因为普通的转数字不懂语义。

比如 Unicode、ASCII、Hash 这些方式,也能把文本变成数字,但它们只知道字符编号,不知道文字含义。

方法

能不能转数字

懂不懂语义

Unicode

不懂

Hash

不懂

词频统计

粗略懂关键词

TF-IDF

偏关键词匹配

Embedding 模型

懂语义关系

Embedding 模型之所以需要训练,是因为它要学会大量语言关系:

  • SSO单点登录 相关

  • Spring Security认证授权 相关

  • ControllerAdvice统一异常处理 相关

  • HandlerThread后台线程 相关

  • AlarmManager定时任务 相关

这些语义关系不是简单规则能写死的,所以需要模型学习。

因此,Embedding 模型不是普通编码器,而是一个“语义压缩器”。

它把文本含义压缩成一个向量坐标,让机器可以计算:

哪些内容和用户问题更接近?

四、Rerank 模型:负责“从候选内容里挑最准确的”

Embedding 模型虽然能快速召回内容,但它通常是“粗排”。

比如用户问:

Spring Security 如何实现单点登录?

Embedding 可能召回这些内容:

召回内容

是否相关

Spring Security 登录流程

相关

OAuth2 授权码模式

很相关

SSO 单点登录方案

很相关

JWT Token 认证

部分相关

Session 共享方案

相关

Java Web 过滤器

有点相关

这里面有些非常相关,有些只是沾边。

这时候就需要 Rerank 模型。

Rerank 模型会拿“用户问题”和“候选文档”放在一起判断,然后重新打分排序。

它解决的问题是:

从一批可能相关的内容里,挑出真正最适合回答问题的内容。

可以这样理解:

阶段

像什么

Embedding

海选

Rerank

复试

LLM

写最终答案

Embedding 负责快,Rerank 负责准。

五、LLM 大模型:负责“根据资料生成答案”

当 Embedding 找到候选资料,Rerank 排好顺序后,系统会取前几段最相关的内容交给大模型。

大模型的任务是:

阅读这些资料,然后组织成自然语言答案。

比如最终给大模型的内容可能包括:

  • SSO 的基本流程

  • OAuth2 授权码模式

  • Spring Security OAuth2 Client 配置

  • 认证中心和业务系统的关系

  • Token 和本地登录态的处理方式

然后大模型根据这些资料生成一篇完整答案。

注意,这时候大模型不是凭空回答,而是基于检索出来的资料回答。

这也是 RAG 能降低幻觉的原因。

六、完整 RAG 流程

一个典型 RAG 流程大概是这样的:

flowchart TD A[用户提问] --> B[Embedding 模型生成问题向量] B --> C[向量数据库召回候选文档] C --> D[Rerank 模型重新排序] D --> E[选择 Top K 相关片段] E --> F[LLM 大模型生成答案] F --> G[返回最终回答]

如果再拆细一点,可以分成两个阶段。

第一阶段:文档入库

步骤

说明

文档收集

收集 PDF、Markdown、网页、接口文档、代码说明等

文档切片

把长文档切成多个小片段

向量化

用 Embedding 模型把每个片段变成向量

存储

把向量和原文存入向量数据库

第二阶段:用户提问

步骤

说明

问题向量化

用 Embedding 模型把用户问题变成向量

向量召回

从向量数据库里找相似片段

Rerank 精排

对候选片段重新打分

拼接上下文

取最相关的内容作为参考资料

大模型生成

让 LLM 根据资料回答

七、用 Java Web 知识库举个例子

假设你有一个 Java Web 学习知识库,里面有这些内容:

  • Spring Security 登录认证

  • OAuth2 授权码模式

  • Sa-Token 登录体系

  • JWT Token 认证

  • Session 共享

  • Redis 存储登录态

  • SSO 单点登录方案

  • Spring Boot 统一异常处理

用户问:

Java Web 项目怎么实现单点登录?

系统不会直接让大模型硬答,而是先走 RAG。

Embedding 先召回可能相关的内容:

内容

召回原因

SSO 单点登录方案

和问题直接相关

OAuth2 授权码模式

常用于标准 SSO

Session 共享

是一种传统 SSO 方案

JWT Token 认证

和登录态传递相关

Spring Security 登录认证

和认证流程相关

然后 Rerank 重新排序:

排名

内容

1

SSO 单点登录方案

2

OAuth2 授权码模式

3

Spring Security OAuth2 Client

4

Session 共享方案

5

JWT Token 认证

最后大模型根据这些资料生成答案。

这样回答会更贴合你的知识库,而不是泛泛而谈。

八、Embedding、Rerank、LLM 的区别

对比项

Embedding 模型

Rerank 模型

LLM 大模型

输入

文本

用户问题 + 候选文档

用户问题 + 参考资料

输出

向量

相关性分数

自然语言答案

主要目标

快速召回

精准排序

生成回答

强项

表达能力强

常见位置

检索前半段

检索后半段

最终生成阶段

一句话总结:

Embedding 负责找资料,Rerank 负责挑资料,LLM 负责写答案。

九、是不是所有 RAG 都需要 Rerank?

不一定。

如果知识库比较小,或者对准确率要求没那么高,可以只用:

Embedding + 向量数据库 + LLM

如果知识库比较大,内容相似度高,或者问题对准确率要求比较高,就建议加 Rerank。

比如这些场景更适合加 Rerank:

  • 企业内部知识库

  • 法律文档问答

  • 医疗资料检索

  • Java / Android 技术文档问答

  • 大型代码库搜索

  • 客服知识库

  • 多产品、多版本文档检索

因为这些场景里,光靠向量相似度容易召回一些“看起来相关,但不是最合适”的内容。

Rerank 可以明显提升最终答案质量。

十、总结

Embedding、Rerank 和 LLM 是 RAG 系统里的三个关键角色。

模型

核心作用

Embedding 模型

把文本变成语义向量,用来快速召回相关资料

Rerank 模型

对候选资料重新排序,把最相关的内容放前面

LLM 大模型

根据资料生成最终答案

如果用一句话理解:

RAG 不是让大模型凭空回答,而是让大模型先查资料,再基于资料回答。

而 Embedding 和 Rerank 的价值就在于:

它们决定了大模型能不能拿到正确的资料。

资料找错了,大模型再强也容易答偏。

资料找准了,大模型的回答质量才会真正稳定。