主题
第 1 章 · RAG 基础理论:什么是 RAG,为什么需要它
🎯 本章目标:让一个完全零基础的人,能用大白话给同事解释清楚 "什么是 RAG,为什么我们要用它"。
目录
- 一个生活化的故事:为什么大模型会"胡说八道"
- RAG 的正式定义
- RAG 解决的三大痛点
- RAG vs Fine-tuning:开卷考试 vs 闭卷考试
- RAG 的核心组件全景图
- 一个最简 RAG 例子(不写代码)
- 常见误区与思考题
1. 一个生活化的故事
💡 在了解 RAG 之前,先了解大模型为什么需要 RAG。
1.1 场景:实习生小李的尴尬
想象你是一家公司的老板,你新招了一个实习生小李。小李很聪明,读过几乎所有公开的书(类比:GPT-4 已读完互联网上几乎所有公开文本)。
某天,你问小李:
老板:小李,我们公司的报销流程是怎样的?
小李有两种回答方式:
回答 A(不带 RAG 的大模型):
小李挠挠头:"嗯……一般公司的报销流程是这样的:先填申请单,找直属领导签字,然后送到财务部……"
听起来很专业,但其实小李在凭"一般经验"瞎猜,他根本没看过你公司的报销手册。如果你信了他的话,按照他说的流程去办,可能会被财务退回来三次。
这就是大模型常见的 "幻觉(Hallucination)" —— 听起来像真的,其实是编的。
回答 B(带 RAG 的大模型):
小李说:"请稍等",跑到资料室翻出公司的《员工手册 v3.2》,找到 "报销流程" 那一章,看完之后告诉你:
"老板,根据公司《员工手册 v3.2》第 47 页:报销需要在飞书提交 OA 单,附上发票照片,500 元以下经理审批即可,500 元以上还需要 CFO 审批……"
这就是 RAG 的本质:让大模型回答问题前,先去翻一下相关的资料,再基于资料组织答案。
1.2 一句话理解
| 没有 RAG 的大模型 | 一个聪明但只能凭记忆答题的人 |
| 有 RAG 的大模型 | 同一个聪明人,但答题前可以查资料 |
📌 核心洞察:RAG 不是让大模型变得更聪明,而是让大模型变得更可靠、更新、更专业。
2. RAG 的正式定义
2.1 名字拆解
RAG = Retrieval-Augmented Generation = 检索增强生成
| 单词 | 含义 | 对应小李故事 |
|---|---|---|
| Retrieval | 检索 | 跑到资料室翻员工手册 |
| Augmented | 增强 | 翻完手册之后比单纯凭记忆更靠谱 |
| Generation | 生成 | 把手册内容组织成自然语言告诉老板 |
2.2 学术定义
RAG 是 2020 年 Facebook(Meta)AI 团队在论文 Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks 中正式提出的一种范式:
在大语言模型生成回答之前,先从外部知识库中检索出相关的信息,将检索到的信息作为上下文(Context)和用户问题一起输入给大模型,由大模型基于这些信息生成最终回答。
2.3 一张图看懂
🧠 记忆口诀:问 → 找 → 拼 → 答
(用户问 → 检索器找 → 把资料和问题拼起来 → 大模型答)
3. RAG 解决的三大痛点
为什么需要 RAG?因为单纯的大模型有三个死穴。
3.1 痛点一:幻觉(Hallucination)
什么是幻觉?
大模型有时会一本正经地胡说八道。这不是 Bug,是它的工作原理决定的——它本质上是个概率预测器,会预测"下一个最可能出现的词",但"最可能"不等于"正确"。
生活例子
你问:「鲁迅和周树人是什么关系?」
没有 RAG 的大模型可能回答:「鲁迅和周树人是同一时代的文学家,他们曾在北京大学共事。」
(事实:鲁迅就是周树人的笔名,是同一个人)RAG 怎么解决?
让大模型回答前先去翻百科:
1. 检索器搜「鲁迅 周树人」
2. 找到百科条目:「鲁迅,本名周树人,浙江绍兴人……」
3. 大模型基于这个事实回答:「鲁迅是周树人的笔名,他们是同一个人。」📌 关键:RAG 把"凭印象答"变成"基于事实答",大幅降低幻觉。
3.2 痛点二:知识截止(Knowledge Cutoff)
什么是知识截止?
每个大模型都有一个 "训练数据截止日期"。比如 GPT-4o 训练数据截止到 2023 年 10 月,那它就不知道 2023 年 11 月之后发生的事。
生活例子
2024 年 6 月你问 GPT-4:「2024 年欧洲杯冠军是哪个国家?」
GPT-4 老老实实回答:「我的知识截止到 2023 年 10 月,无法回答 2024 年的事件。」RAG 怎么解决?
让大模型实时去查新闻:
1. 检索器去新闻数据库搜「2024 欧洲杯 冠军」
2. 找到最新报道:「西班牙 2-1 击败英格兰,第四次夺得欧洲杯冠军」
3. 大模型回答:「2024 年欧洲杯冠军是西班牙。」📌 核心价值:RAG 让大模型获得实时更新的能力,不需要重新训练。
3.3 痛点三:私有知识(Private Knowledge)
什么是私有知识?
大模型只学习过公开的互联网数据,它不可能知道:
- 你公司的内部财务报表
- 你公司的客户名单
- 你公司的产品技术文档
- 你正在读的那本"小众论文"
生活例子
你问 GPT-4:「腾讯 X 部门 2024 年 Q3 的 KPI 完成情况怎么样?」
GPT-4:「抱歉,我无法访问公司内部数据。」RAG 怎么解决?
把公司内部文档导入到知识库里:
1. IT 部门把内部 OKR 文档、周报、月报全部入库
2. 你问 KPI 完成情况
3. 检索器从内部知识库搜出 Q3 月报
4. 大模型基于月报回答具体数字📌 企业级价值:这是 RAG 在企业落地的最核心场景。 你不可能把公司机密发给 OpenAI 让他们重新训练 GPT,但你可以本地搭建一个 RAG。
3.4 三大痛点对比速查表
| 痛点 | 没有 RAG 的表现 | 用 RAG 后 |
|---|---|---|
| 幻觉 | 编造看似合理的错误答案 | 基于真实文档回答 |
| 知识截止 | 答不出新事件 | 接入新闻/最新文档实时查询 |
| 私有知识 | 答不出公司内部信息 | 从内部知识库检索 |
4. RAG vs Fine-tuning
这是面试必考题!每个 AI 工程师都要能脱口而出两者的区别。
4.1 用考试比喻
| RAG | Fine-tuning(微调) | |
|---|---|---|
| 比喻 | 开卷考试 | 闭卷考试(考前疯狂背书) |
| 运作方式 | 答题时翻书查资料 | 把书的内容硬塞进脑子,闭卷答 |
| 更新成本 | 改书就行,秒级生效 | 重新背书,几小时到几天 |
| 回答风格 | 死板,受资料约束 | 灵活,但可能记错知识 |
| 适合 | 知识型问题(事实、流程) | 风格型/技能型任务(写诗、口吻) |
4.2 详细对比
| 维度 | RAG | Fine-tuning |
|---|---|---|
| 解决的问题 | 知识不足、知识过时 | 风格不对、任务不会做 |
| 数据要求 | 文档即可(结构化/非结构化) | 需要大量高质量的标注样本(输入-输出对) |
| 训练成本 | 不需要训练,只需向量化 | 需要 GPU 训练,可能上千美元 |
| 更新速度 | 新增文档秒级生效 | 重新微调,几小时到几天 |
| 可追溯性 | 强(能给出引用来源) | 弱(无法解释为什么这么答) |
| 幻觉风险 | 低(有据可查) | 中(可能记错) |
| 典型场景 | 企业知识库、客服 FAQ、文档问答 | 风格模仿、特殊领域语言(如医学术语生成) |
| 成本 | 推理时多消耗一些 Token | 训练阶段一次性投入 |
4.3 怎么选?决策树
4.4 生活类比加深理解
| 场景 | 该用什么? | 解释 |
|---|---|---|
| 想让 AI 回答公司报销流程 | RAG | 这是事实知识,把员工手册入库即可 |
| 想让 AI 用鲁迅的文风写文章 | Fine-tuning | 文风是模式,需要训练让模型 "学会" |
| 想让 AI 答 "今天股价多少" | RAG(接 API) | 实时信息必须查 |
| 想让 AI 输出符合特定 JSON Schema 的结构 | Prompt 工程 + Fine-tuning | 任务格式固定 |
| 想让 AI 模仿客服话术风格回答 | RAG + Fine-tuning(组合) | 既要懂业务又要懂话术 |
💡 重要洞察:RAG 和 Fine-tuning 不是二选一,企业实战经常组合使用。 例如:用 Fine-tuning 让模型学会客服话术风格,再用 RAG 让它知道最新产品信息。
5. RAG 的核心组件全景图
5.1 三大核心阶段
| 阶段 | 中文名 | 做什么 | 频次 |
|---|---|---|---|
| Indexing | 索引/入库 | 把文档处理后存到向量库 | 离线,文档变化时执行 |
| Retrieval | 检索 | 根据问题找相关片段 | 在线,每次提问执行 |
| Generation | 生成 | 让大模型基于片段回答 | 在线,每次提问执行 |
🧠 记忆口诀:入库 → 检索 → 生成(IRG)
5.2 每个组件的角色
| 组件 | 比喻 | 关键技术 |
|---|---|---|
| Document Loader | 资料员(把各种格式的书搬进图书馆) | unstructured、LlamaParse |
| Text Splitter | 把厚书拆成便利贴 | RecursiveCharacterTextSplitter |
| Embedding Model | 给每张便利贴贴一个 DNA 标签 | text-embedding-3-small、BGE |
| Vector Database | 按 DNA 标签找便利贴的特殊图书馆 | Milvus、Qdrant、Chroma |
| Retriever | 图书管理员 | 相似度算法 |
| Reranker(可选) | 资深图书管理员(再精选一遍) | Cohere Rerank、BGE-Reranker |
| LLM | 写答案的人 | GPT-4、Claude、DeepSeek |
| Prompt Template | 答题模板 | "请基于以下资料回答……" |
6. 一个最简 RAG 例子
不写代码,用大白话走一遍完整流程。
6.1 场景设定
你建了一个"宠物医疗问答机器人",知识库里有一本 50 页的《宠物常见疾病手册》。
6.2 离线阶段(一次性准备)
步骤 1:加载文档
把 PDF 读进来,变成纯文本。
步骤 2:切分
50 页的书太长了,大模型一次塞不下。
切成 200 个 "Chunk"(片段),每个 Chunk 大概 300 字。
比如:
- Chunk #1:「猫咪发烧的常见原因有:感冒、感染、中暑……」
- Chunk #2:「狗狗腹泻的处理方法:……」
- Chunk #3:「猫咪疫苗接种时间表……」
步骤 3:向量化
用 Embedding 模型给每个 Chunk 算一个 1536 维的向量(一串数字)。
- Chunk #1 →
[0.12, -0.45, 0.78, ...](1536 个数字)- Chunk #2 →
[0.34, 0.21, -0.66, ...]- ...
这些向量代表 Chunk 的 "语义指纹",语义相近的 Chunk 向量也相近。
步骤 4:存入向量数据库
把每个 Chunk 的(原文 + 向量)存到 Milvus。
6.3 在线阶段(用户每次提问)
用户提问:「我家猫咪发烧 39 度怎么办?」
步骤 1:问题向量化
把用户问题也用 Embedding 模型算出向量
[0.15, -0.41, 0.80, ...]。
步骤 2:相似度检索
在向量库里找跟问题向量最相似的 Top-3 个 Chunk。
假设找到:
- Chunk #1(相似度 0.92):「猫咪发烧的常见原因有……」
- Chunk #15(相似度 0.88):「猫咪退烧的家庭处理方法:保持环境凉爽……」
- Chunk #23(相似度 0.85):「什么情况下需要立即送医……」
步骤 3:拼装 Prompt
把找到的 3 个 Chunk 和用户问题拼起来:
请根据以下参考资料回答用户问题。
若资料中没有相关信息,请回答"我不知道"。
【参考资料】
1. 猫咪发烧的常见原因有:感冒、感染、中暑……
2. 猫咪退烧的家庭处理方法:保持环境凉爽……
3. 什么情况下需要立即送医:体温超过 40 度……
【用户问题】
我家猫咪发烧 39 度怎么办?步骤 4:大模型生成
大模型基于参考资料生成回答:
"您家猫咪 39 度属于轻度发烧(猫咪正常体温 38-39.2 度)。建议:
- 保持环境凉爽通风
- 提供充足饮水
- 观察 24 小时,若体温持续升高或出现精神萎靡,请立即送医 (参考来源:宠物常见疾病手册 第 12 章)"
6.4 关键观察
| 观察点 | 说明 |
|---|---|
| ✅ 答案有据可查 | 引用了具体章节,可以追溯 |
| ✅ 专业可靠 | 基于专业手册,不是大模型瞎编 |
| ✅ 领域内 | 即使 GPT 没学过这本手册,也能用 |
| ✅ 可更新 | 手册更新了重新入库即可 |
7. 常见误区与思考题
7.1 常见误区
误区 1:「RAG 就是把所有文档塞给大模型」
❌ 错。Context Window 有限(哪怕 GPT-4o 200K Token 也装不下一个百科)。 ✅ RAG 的精髓是 "先精准检索,再喂给大模型",而不是无差别全塞。
误区 2:「有了 RAG 就不会有幻觉了」
❌ 错。RAG 大幅降低幻觉,但不能彻底消除。 比如:检索召回了错误的片段、大模型曲解了片段意思,都会产生幻觉。 解决方案:Rerank、Self-RAG、引用追溯(后续章节会讲)。
误区 3:「RAG 必须用向量数据库」
❌ 不一定。RAG 的 R 是检索,不是 "向量检索"。 关键词检索(BM25)、SQL 查询、API 调用、知识图谱查询都属于检索。 真实工业系统通常 混合检索(向量 + 关键词) 效果最好。
误区 4:「Chunk 切得越大越好」
❌ 错。Chunk 太大→召回片段太长→稀释问题相关信息→大模型抓不住重点。 ❌ Chunk 太小→片段缺乏上下文→语义不完整→答非所问。 ✅ 一般 300-1000 字是经验值,要根据文档结构调(第 3 章会详细讲)。
误区 5:「Embedding 模型随便选一个就行」
❌ 错。不同 Embedding 模型在不同领域差异极大。 中文场景建议用 BGE-M3、BGE-Large-zh、M3E、Qwen Embedding。 英文/多语场景可以用 OpenAI text-embedding-3、Cohere embed-v3。
7.2 思考题(可选,检验理解)
如果有人问你:"为什么不直接用更大的 Context Window 把所有文档塞进去?" 你怎么回答?
参考答案
- 成本:长 Context 等于每次调用都消耗几万 Token,按量计费贵到飞起
- 性能:长 Context "Lost in the Middle" 现象——中间内容容易被模型忽略
- 延迟:处理 100K Token 大模型也要十几秒,用户等不及
- 知识规模:企业知识库可能上 GB,长 Context 再大也装不下
一个公司想做一个回答内部财务问题的机器人,他们已经买了 GPT-4 API,应该用 RAG 还是 Fine-tuning?
参考答案
- 选 RAG。原因:
- 财务数据是事实型知识,正是 RAG 擅长的
- 财务数据经常更新(月报、季报),RAG 改文档就行,Fine-tune 要重训
- 财务数据敏感,需要严格控制访问,RAG 容易加权限控制
- Fine-tune GPT-4 成本高、流程复杂,企业自己控制不了模型
- 选 RAG。原因:
RAG 系统的回答质量主要由哪几个环节决定?哪个环节最容易被忽略?
参考答案
主要环节:
- 切分(Chunk 大小、重叠)
- Embedding 模型(语义表征能力)
- 检索算法(向量 / 混合 / Rerank)
- Prompt 模板(怎么让大模型基于资料答)
- 大模型本身(理解和生成能力)
最容易被忽略:切分。新手通常用默认 1000 字符切,不考虑文档结构,导致语义被切碎,召回效果差。
📌 本章小结
| 你应该已经知道 | ✅ |
|---|---|
| RAG 是什么(一句话能解释) | □ |
| RAG 解决了哪三个痛点(幻觉、知识截止、私有知识) | □ |
| RAG vs Fine-tuning 的区别(能给出 3-5 条对比) | □ |
| RAG 的三大阶段(Indexing/Retrieval/Generation) | □ |
| RAG 系统的核心组件(能画出全景图) | □ |
| 走过一遍 RAG 端到端的流程 | □ |
🚀 下一步
恭喜!你已经搞清楚了 RAG 是什么 和 为什么。
下一章我们会深入 怎么做,详细拆解 RAG 的完整工作流程:第 2 章 · RAG 工作流程详解