Skip to content

01 · RAG 是什么:先查资料再回答 ​

学完你能说出:

  • RAG 的完整流程:离线建库(切块 → 向量化 → 入库)+ 在线问答(问题向量化 → 检索 → 拼提示词 → 生成)。
  • RAG 解决了大模型的哪三个问题。
  • RAG 和微调的区别,什么时候用哪个。

先看地图 ​

大模型基础讲完了:模型会接龙(01)、会看上下文(02)、文字能变成向量(03)、提示词能引导它(04)。

把这四样拼起来,就是 RAG。本篇讲 4 个点:① 大模型直接用有什么问题 → ② RAG 的完整流程 → ③ 为什么这么设计 → ④ RAG vs 微调。

一句话本质 ​

RAG(检索增强生成)= 回答之前,先从资料库里找出相关的几段,连同问题一起交给大模型,让它照着资料回答。

生活类比:开卷考试 ​

  • 直接问大模型 = 闭卷考试:全凭记忆,记不清就靠「感觉」编(幻觉)。
  • RAG = 开卷考试:允许翻书,但只给你 3 页(上下文窗口有限),所以关键是先快速找到最相关的那 3 页。
  • 找页的过程叫检索,看着这几页写答案的过程叫生成。

一步步看:「公司年假几天?」 ​

← 左右滑动看完整图 →离线:提前建好资料库(只做一次,资料更新时再做)原始文档PDF / 网页切块每块约 500 字Embedding文字 → 向量向量数据库存「向量 + 原文」在线:每次提问都走一遍用户问题「年假几天?」Embedding问题 → 向量检索 Top-K找最像的 3 块拼进提示词问题 + 3 块资料按向量相似度去库里找大模型回答「依据第 3 条:5 天」关键:模型不是「记住」了资料,而是每次回答前「现查现看」。
RAG 分两段:离线把资料切块、转成向量存进库;在线把问题也转成向量,找出最相似的几块,和问题一起塞给大模型。模型的答案来自「这次塞进来的资料」,所以能引用、能更新,幻觉也更少。

离线阶段(提前做好,资料更新时再做一次):

  1. 收集资料:员工手册 PDF,共 50 页。
  2. 切块:切成约 200 块,每块 500 字左右。
  3. 向量化:每块用 Embedding 模型算出一个向量。
  4. 入库:把「向量 + 原文 + 来源(第几页)」存进向量数据库。

在线阶段(每次提问都走一遍):

  1. 用户问:「年假几天?」
  2. 问题也用同一个 Embedding 模型转成向量。
  3. 在库里找余弦相似度最高的 3 块(Top-K,这里 K = 3)。比如找到「第 12 页:年假规定……」。
  4. 拼成提示词:
[system] 请只根据下面的资料回答;资料里没有就说不知道,并注明出处页码。
[资料1] (第12页) 员工入职满一年,享有带薪年假 5 天……
[资料2] ……
[user]   年假几天?
  1. 大模型回答:「入职满一年后有 5 天带薪年假(见第 12 页)。」

为什么这么设计 ​

为什么需要 RAG?直接问大模型有什么问题? ​

大模型直接用,有三个问题:

问题例子RAG 怎么解决
不知道私有资料你们公司的手册它没见过现查现给
知识过时训练数据有截止日期资料库可以随时更新
会编(幻觉)不知道时会编一个像样的答案要求「只根据资料回答,并注明出处」

一句话答法

大模型不知道私有和最新的资料,还会编;RAG 在回答前先检索相关资料、拼进提示词,让答案有依据、可溯源、可更新。

为什么要切块,不把整本手册塞进去? ​

  • 问题:整本手册可能有几十万字,超出上下文窗口;就算塞得下,成本高、速度慢,无关内容还会干扰模型。
  • 方案:切成小块,每次只取最相关的几块。
  • 好处:便宜、快,而且模型注意力集中在相关内容上。

一句话答法

上下文窗口有限、按 Token 计费,而且无关内容会干扰回答;切块后只取最相关的几块,又省又准。

为什么提示词里要写「没有就说不知道」? ​

  • 问题:检索不一定每次都能找到答案。找不到时,模型还是会照着「接龙」的习惯编一个。
  • 方案:在 system 里明确要求:只根据资料回答,资料里没有就说不知道,并注明出处。
  • 好处:降低幻觉;有出处,用户可以自己核对。

一句话答法

因为检索可能失败,必须约束模型「只依据资料、没有就承认」,再要求给出处,答案才可信、可核对。

RAG vs 微调 ​

微调(Fine-tuning):用你的数据继续训练模型,改的是模型的参数。

RAG微调
改的是什么每次给的输入模型的参数
适合让模型知道新知识、私有资料让模型学会风格、格式、特定行为
资料更新改库就行,立刻生效要重新训练
能否给出处能难
成本低,起步快需要数据和训练资源

类比:RAG 是给学生发参考书,微调是让学生上培训班。要他知道公司新制度,发手册(RAG);要他养成特定的写作风格,上培训班(微调)。两者也可以一起用。

英文术语拆解 ​

术语拆开看一句话意思
RAGRetrieval 检索 + Augmented 增强的 + Generation 生成检索增强生成:先查资料,再生成回答
Chunk块文档切出来的一小段
Vector Databasevector 向量 + database 数据库专门存向量、能快速找「最相似向量」的数据库
Top-Ktop 最前面 + K 个取相似度最高的 K 条
Retrieverretrieve 取回 + -er 「做…的东西」检索器,负责找资料
Fine-tuningfine 精细 + tuning 调节微调:用自己的数据继续训练模型
Groundingground 地面、根据让回答「落地」到给定资料上

面试怎么问 ​

Q:讲一下 RAG 的完整流程。

离线:文档加载 → 清洗 → 切块 → 用 Embedding 模型向量化 → 存入向量库(同时存原文和元数据)。在线:问题向量化 → 在向量库中检索 Top-K 相似块(常配合关键词检索和重排)→ 把检索结果和问题拼成提示词 → 大模型生成回答,并附上出处。

Q:RAG 和微调怎么选?

补充知识、知识经常更新、需要出处的场景用 RAG;改变模型的输出风格、格式或特定领域的行为模式用微调。两者不互斥,可以先 RAG,效果不够再考虑微调。

Q:RAG 能完全消除幻觉吗?

不能。检索可能找错或找不到,模型也可能不忠实于资料。要靠提示约束(只依据资料、不知道就说)、提升检索质量(混合检索、重排)、回答附带出处,以及做忠实度评估来降低。

容易混的地方 ​

  • RAG 不会让模型「学会」资料:模型参数不变,每次都是现查现用。换一个问题,查到的就不一样。
  • 检索用的 Embedding 模型 ≠ 回答用的大模型:两个不同的模型,分工不同。
  • K 不是越大越好:K 太大,无关内容会混进来、成本上升;太小可能漏掉答案。常见取 3–10,要实测。

和其他知识的连接 ​

自测 3 问 ​

Q1:用「开卷考试」类比讲清 RAG。

点开看答案

直接问大模型像闭卷考试,记不清就编;RAG 像开卷考试,但只能带几页纸,所以先检索出最相关的几页,再看着这几页生成答案。

Q2:RAG 解决了大模型的哪三个问题?

点开看答案

① 不知道私有资料;② 知识过时(训练有截止日期);③ 容易幻觉。RAG 现查现给资料,库可随时更新,并约束模型只依据资料回答、注明出处。

Q3:要让模型知道公司最新的报销制度,用 RAG 还是微调?为什么?

点开看答案

RAG。这是补充知识,而且制度会变;RAG 改库就生效,还能给出处。微调更适合改变风格和行为,更新知识要重新训练,成本高。

✅ 验收清单 ​

  • 能不看图画出 RAG 的离线、在线两段流程
  • 能说出 RAG 解决的三个问题,并各举一个例子
  • 能讲清「为什么要切块」「为什么要求没有就说不知道」(问题 → 方案 → 好处)
  • 能用一张表对比 RAG 和微调,并说出各自适合的场景
  • 能说出 RAG 不能完全消除幻觉的原因

下一步该懂什么 ​

  • 切块切多大、怎么切?→ 切块与入库
  • 你 5 月做过的项目(E:\Desktop\1,FastAPI + Chroma)就是一个 RAG。学完本模块,可以回头对照它的 rag.py。