深色模式
01 · RAG 是什么:先查资料再回答
学完你能说出:
- RAG 的完整流程:离线建库(切块 → 向量化 → 入库)+ 在线问答(问题向量化 → 检索 → 拼提示词 → 生成)。
- RAG 解决了大模型的哪三个问题。
- RAG 和微调的区别,什么时候用哪个。
先看地图
大模型基础讲完了:模型会接龙(01)、会看上下文(02)、文字能变成向量(03)、提示词能引导它(04)。
把这四样拼起来,就是 RAG。本篇讲 4 个点:① 大模型直接用有什么问题 → ② RAG 的完整流程 → ③ 为什么这么设计 → ④ RAG vs 微调。
一句话本质
RAG(检索增强生成)= 回答之前,先从资料库里找出相关的几段,连同问题一起交给大模型,让它照着资料回答。
生活类比:开卷考试
- 直接问大模型 = 闭卷考试:全凭记忆,记不清就靠「感觉」编(幻觉)。
- RAG = 开卷考试:允许翻书,但只给你 3 页(上下文窗口有限),所以关键是先快速找到最相关的那 3 页。
- 找页的过程叫检索,看着这几页写答案的过程叫生成。
一步步看:「公司年假几天?」
离线阶段(提前做好,资料更新时再做一次):
- 收集资料:员工手册 PDF,共 50 页。
- 切块:切成约 200 块,每块 500 字左右。
- 向量化:每块用 Embedding 模型算出一个向量。
- 入库:把「向量 + 原文 + 来源(第几页)」存进向量数据库。
在线阶段(每次提问都走一遍):
- 用户问:「年假几天?」
- 问题也用同一个 Embedding 模型转成向量。
- 在库里找余弦相似度最高的 3 块(Top-K,这里 K = 3)。比如找到「第 12 页:年假规定……」。
- 拼成提示词:
[system] 请只根据下面的资料回答;资料里没有就说不知道,并注明出处页码。
[资料1] (第12页) 员工入职满一年,享有带薪年假 5 天……
[资料2] ……
[user] 年假几天?- 大模型回答:「入职满一年后有 5 天带薪年假(见第 12 页)。」
为什么这么设计
为什么需要 RAG?直接问大模型有什么问题?
大模型直接用,有三个问题:
| 问题 | 例子 | RAG 怎么解决 |
|---|---|---|
| 不知道私有资料 | 你们公司的手册它没见过 | 现查现给 |
| 知识过时 | 训练数据有截止日期 | 资料库可以随时更新 |
| 会编(幻觉) | 不知道时会编一个像样的答案 | 要求「只根据资料回答,并注明出处」 |
一句话答法
大模型不知道私有和最新的资料,还会编;RAG 在回答前先检索相关资料、拼进提示词,让答案有依据、可溯源、可更新。
为什么要切块,不把整本手册塞进去?
- 问题:整本手册可能有几十万字,超出上下文窗口;就算塞得下,成本高、速度慢,无关内容还会干扰模型。
- 方案:切成小块,每次只取最相关的几块。
- 好处:便宜、快,而且模型注意力集中在相关内容上。
一句话答法
上下文窗口有限、按 Token 计费,而且无关内容会干扰回答;切块后只取最相关的几块,又省又准。
为什么提示词里要写「没有就说不知道」?
- 问题:检索不一定每次都能找到答案。找不到时,模型还是会照着「接龙」的习惯编一个。
- 方案:在 system 里明确要求:只根据资料回答,资料里没有就说不知道,并注明出处。
- 好处:降低幻觉;有出处,用户可以自己核对。
一句话答法
因为检索可能失败,必须约束模型「只依据资料、没有就承认」,再要求给出处,答案才可信、可核对。
RAG vs 微调
微调(Fine-tuning):用你的数据继续训练模型,改的是模型的参数。
| RAG | 微调 | |
|---|---|---|
| 改的是什么 | 每次给的输入 | 模型的参数 |
| 适合 | 让模型知道新知识、私有资料 | 让模型学会风格、格式、特定行为 |
| 资料更新 | 改库就行,立刻生效 | 要重新训练 |
| 能否给出处 | 能 | 难 |
| 成本 | 低,起步快 | 需要数据和训练资源 |
类比:RAG 是给学生发参考书,微调是让学生上培训班。要他知道公司新制度,发手册(RAG);要他养成特定的写作风格,上培训班(微调)。两者也可以一起用。
英文术语拆解
| 术语 | 拆开看 | 一句话意思 |
|---|---|---|
| RAG | Retrieval 检索 + Augmented 增强的 + Generation 生成 | 检索增强生成:先查资料,再生成回答 |
| Chunk | 块 | 文档切出来的一小段 |
| Vector Database | vector 向量 + database 数据库 | 专门存向量、能快速找「最相似向量」的数据库 |
| Top-K | top 最前面 + K 个 | 取相似度最高的 K 条 |
| Retriever | retrieve 取回 + -er 「做…的东西」 | 检索器,负责找资料 |
| Fine-tuning | fine 精细 + tuning 调节 | 微调:用自己的数据继续训练模型 |
| Grounding | ground 地面、根据 | 让回答「落地」到给定资料上 |
面试怎么问
Q:讲一下 RAG 的完整流程。
离线:文档加载 → 清洗 → 切块 → 用 Embedding 模型向量化 → 存入向量库(同时存原文和元数据)。在线:问题向量化 → 在向量库中检索 Top-K 相似块(常配合关键词检索和重排)→ 把检索结果和问题拼成提示词 → 大模型生成回答,并附上出处。
Q:RAG 和微调怎么选?
补充知识、知识经常更新、需要出处的场景用 RAG;改变模型的输出风格、格式或特定领域的行为模式用微调。两者不互斥,可以先 RAG,效果不够再考虑微调。
Q:RAG 能完全消除幻觉吗?
不能。检索可能找错或找不到,模型也可能不忠实于资料。要靠提示约束(只依据资料、不知道就说)、提升检索质量(混合检索、重排)、回答附带出处,以及做忠实度评估来降低。
容易混的地方
- RAG 不会让模型「学会」资料:模型参数不变,每次都是现查现用。换一个问题,查到的就不一样。
- 检索用的 Embedding 模型 ≠ 回答用的大模型:两个不同的模型,分工不同。
- K 不是越大越好:K 太大,无关内容会混进来、成本上升;太小可能漏掉答案。常见取 3–10,要实测。
和其他知识的连接
- ← 来自 Embedding:检索就是比较向量相似度。
- ← 来自 Prompt 与采样参数:把资料拼进提示词,并约束「只依据资料」。
- → 影响 切块与入库、检索与重排:流程里每一步的细节。
- → 影响 Agent 是什么:「检索」可以作为 Agent 的一个工具。
自测 3 问
Q1:用「开卷考试」类比讲清 RAG。
点开看答案
直接问大模型像闭卷考试,记不清就编;RAG 像开卷考试,但只能带几页纸,所以先检索出最相关的几页,再看着这几页生成答案。
Q2:RAG 解决了大模型的哪三个问题?
点开看答案
① 不知道私有资料;② 知识过时(训练有截止日期);③ 容易幻觉。RAG 现查现给资料,库可随时更新,并约束模型只依据资料回答、注明出处。
Q3:要让模型知道公司最新的报销制度,用 RAG 还是微调?为什么?
点开看答案
RAG。这是补充知识,而且制度会变;RAG 改库就生效,还能给出处。微调更适合改变风格和行为,更新知识要重新训练,成本高。
✅ 验收清单
- 能不看图画出 RAG 的离线、在线两段流程
- 能说出 RAG 解决的三个问题,并各举一个例子
- 能讲清「为什么要切块」「为什么要求没有就说不知道」(问题 → 方案 → 好处)
- 能用一张表对比 RAG 和微调,并说出各自适合的场景
- 能说出 RAG 不能完全消除幻觉的原因
下一步该懂什么
- 切块切多大、怎么切?→ 切块与入库
- 你 5 月做过的项目(
E:\Desktop\1,FastAPI + Chroma)就是一个 RAG。学完本模块,可以回头对照它的rag.py。