跳到主要内容

为什么需要 RAG — 它不知道自己不知道

这一章讲三件事: 为什么一个 demo 很顺的聊天机器人,一碰到公司内部的问题就崩; 这个崩塌为什么在原理上不可避免;以及 RAG 用哪两步动作接住它。 读完你会拿到全书一直在用的那张图:一条离线备料的流水线,加一条在线答题的流水线。 这一章不需要任何基础,遇到的词都在当场讲明白。

1. 顶层全景:先看那个崩掉的下午

书里开篇是一个具体到日子都没有、但你大概率经历过的场景1:

一个工程师用现成的大模型,花一个下午给公司搭了个内部客服机器人。开头一切惊艳: 它能聊、能总结长文档、还能写代码。直到有人问:「明年 1 月以后,我们的退款政策是什么?」

回答听起来很专业,条理清楚、措辞自信——但和公司真实的政策毫无关系。 它甚至能编出一份不存在的监管条款。作者把这一刻称为撞上「production wall」: 演示(POC,proof of concept,概念验证)和企业级应用之间的那道鸿沟2

这本书的全部内容,就是回答一个问题:怎么把「一下午的魔法」变成「敢放上关键业务的系统」。 而它的答案是围绕一个核心动作展开的:

用户问:「明年 1 月后的退款政策是什么?」


先去公司的资料库里「检索」一遍:找出和退款政策相关的几段原文


把这几段原文连同问题,一起交给大模型:「根据这些材料回答」


模型照着材料写出答案,并标出来自哪份文件

图说:这就是 RAG 的全部骨架——先检索,再照着检索结果生成。
全书十章,讲的就是怎么把这个骨架做到「敢上生产」。

这条链就是本章的主走查。 下面每一节都往它上面装东西: 第 2、3 节讲为什么非检索不可,第 4 节把「检索」和「交给模型」各自拆成流水线, 第 5 节讲从 demo 到生产中间隔着哪些清单。

2. 核心原理(一):它为什么会一本正经地胡说

先说清两个词

全书反复出现的两个词,在这里一次说清,后面不再解释。

大语言模型(large language model,简称 LLM,中文常说「大模型」): 一个读了海量人类文字之后、学会了「给定一段开头,下一个词最可能是什么」的程序。 你见过的 ChatGPT、Claude、Gemini 都是。它生成的最小单位严格说不是「词」而是「词元」—— 英文常写作 token——它是模型切分文字的最小单位,可能只是一个词的一小截,本文在不影响理解的地方一律说「词」3

第二个词是训练:不是培训员工那个训练。指「把海量文字喂给模型, 让它把内部上千亿个可以调的数一点点调到位」的过程。调完,这些数就固定下来了。 这些数叫参数——可以把它们想成模型内部一张巨大的、调好之后就不再动的「经验表」。

它知道的一切,都存在那张表里

关键事实来了:模型没有「查资料」这个动作。 它知道的东西,全部在训练那一刻被压进了参数里。作者给这种知识起了个名字: 参数化知识(parametric knowledge)——以参数的形式存起来的知识4

于是那个退款问题的崩塌就不是意外,而是结构性的:

  • 公司的退款政策,训练时根本不在它读的材料里;
  • 就算在,上周刚改过的那一版也肯定不在——训练一结束,它就永远停在那一刻5;
  • 它没有「我不知道」的内部状态。它只会做一件事:接着上文,写出最像样的文字。

书里给这种现象下的定义值得记住:幻觉(hallucination)—— 生成的内容「流畅而自信,却完全没有真实数据支撑」6。 注意这个定义里没有「模型坏了」。它没坏,它在忠实地执行「写得像」, 只是「像」和「对」恰好不是一回事。

那把训练数据搞大一点行不行

书里直接否决了这条路:世界上的信息——公开的、私密的、结构化的、非结构化(没有预定义行列结构的,如自由文本、图片)的、 还在天天变化的——不可能被一次训练全部装进去;而且装进去的瞬间就开始过时7

判断(我们的,不是书里的): 这一节是全书所有工程决策的总根源。 后面十六章里的每一个组件——切块、向量库、重排、护栏、评测—— 追到底都是在补「它不知道该什么、又不知道自己不知道」这一个洞。 如果错,会错在: 如果未来的模型把「知道自己不知道」做成了可靠的内建能力 (比如稳定地拒答训练外的问题),这本书的一部分动机就会变弱—— 但「你的私有数据它没见过」这一条,任何模型架构都改不了。

3. 核心原理(二):RAG 是哪两个动作

既然模型里的知识改不动,那就别改模型,改它看到的东西

RAG 的全名是 retrieval-augmented generation,中文叫「检索增强生成」:retrieval=检索(查资料),generation=生成(写答案)。这个名字拆开,就是两个动作8:

字母动作干什么
R(retrieval)检索从你的资料里,找出和这个问题最相关的几段
A(augmented)增强把找出来的这几段加进给模型的指令里
G(generation)生成模型照着这些材料写出回答

作者用了一个考试类比,一句话点透:让模型只凭参数答题,是闭卷考试; RAG 是开卷考试——允许它翻书,答案自然贴着书走9

主走查第 ①② 步:那条链具体长什么样

回到退款问题。RAG 版的过程是(检索到的段落编号是为演示编的):

① 检索:拿着问题去资料库找,找回两段:
[12]「自 2026-01-01 起,订阅类产品支持 30 天内无理由退款……」
[47]「退款需经原支付渠道退回,处理周期 5-10 个工作日……」

② 增强+生成:把问题与这两段拼成一条指令交给模型。
书里的基础模板长这样(变量逐字替换):
「根据下面的 context 回答 question。不知道就说不知道。
question: 明年 1 月后的退款政策是什么?
context: [12] 的内容…… [47] 的内容……」

③ 模型输出:「2026 年起订阅产品 30 天内可无理由退款,款项 5-10 个工作日
原路退回[12][47]。」

图说:答案里每个事实都能指回一个编号——这就是 RAG 与裸模型的全部差别。

这条指令——把问题、材料、以及「照什么规矩答」拼在一起的那段文字—— 在书里叫 prompt——中文常叫「提示词」,就是写给模型的那段指令。书里模板中有一句看似不起眼、实则全书会反复引用的指令: 「如果你不知道答案,就说你不知道10。裸模型几乎一定会硬答, 因为「硬答」才像人写的;只有把材料摆在它面前、再给一句明确的退路指令, 「承认不知道」才变成一个可执行的选项。

4. 核心原理(三):RAG 不是一条链,是两条流水线

上面那条链里藏着两种节奏完全不同的事,作者把它们画成两个(flow)11:

摄入流(ingestion flow)——离线,新数据到来时跑
你的文件 → 解析出文字 → 切成小块 → 转成向量 → 存进可检索的库

查询流(query flow)——在线,每个用户问题触发一次
用户问题 → 转成向量 → 在库里找最相似的几块 → 拼进 prompt → 模型生成 → 答案

图说:两条流在「向量库」这一点上相接。摄入流把资料备成「好找」的样子,
查询流在毫秒级里把「好找」兑现成答案。

摄入流里有两个本章只点名的概念,第 04、05 章会讲透,这里只需记住它们的职责: 嵌入(embedding)是把一段文字转成一串数字(向量)的技术,让「意思相近」 变成「数字相近」;向量库(向量数据库)就是存这些数字、并能毫秒级找出 「和这串数字最像的其它串」的库12

作者还顺手钉死了三个常被混用的词,它们在第 07 章规模化时会变成真问题13:

指什么类比
dataset你手里的原始文件堆一屋子没整理的文件
corpus(语料——清洗整理过、准备使用的文件集合)清洗整理过、准备使用的文件集合编目上架的图书
index(索引)为高性能检索专门建的结构图书馆的检索卡片柜

查询流这边,作者给了检索方式的名字,所谓语义搜索(semantic search):「语义」即按「意思」而不按字面来找—— 所以搜「退款」能找到写着「退订返还」的段落; 它的反面是词法搜索(lexical search),按字面词找。 把两者合起来用叫混合搜索,在第 08 章会作为规模化的关键手段登场14

主走查第 ④ 步:答案之后还有一道岗

主走查还没完。模型照着材料写出答案之后,生产级的系统还要过一道检查: 这个回答真的用了检索到的材料吗?有没有顺手编?有没有不该说的内容? 这道岗叫 guardrails(护栏)——流水线里专门负责「安全可靠」的步骤, 第 08 章会细讲它怎么拦截15

5. 作者的判断与证据:这本书为什么从「生产」倒着写

书的前言和第一章结尾,摊开了一张多数 RAG 教程不提的清单。这部分是作者的判断, 依据来自他做 RAG 平台公司(Vectara)时见到的失败项目——这个身份既是经验来源, 也是利益相关,读的时候要知道他站在哪16

他的核心主张:多数 RAG 项目不是死于模型不行,而是死于把 RAG 当成即插即用的功能, 而不是一门工程学科17。他给的清单,每一条都对应本书后面的一章:

  • 检索质量:文档量从一千份涨到十万份,原来够用的检索精度会散成「语义噪声」——第 08 章;
  • 持续评测:上线不是终点,数据和模型都在漂移,要有指标驱动的评测框架——第 11 章;
  • MLOps/LLMOps:摄入要事件驱动自动刷新、prompt 和组件要版本化可回滚、 每个请求可追踪、每个组件的成本要单独看得见——第 09 章;
  • 性能与成本:数据库调优、缓存、推理端点自动扩缩——第 09 章;
  • 安全:按数据级权限过滤(财务的问题不给HR文档)、加密、防提示注入、PII 脱敏——第 08、09 章;
  • 多模态、知识图谱、agent:文档里不止有文字,问题不止一步能答——第 14、15、12 章18

这份清单里没有一条是「换一个更强的模型」。这是作者刻意摆出的姿态: 模型只是系统的一个组件,而系统是工程问题。

6. 边界与局限

  • 这一章的论证全是定性判断,没有数据。「demo 会崩」「扩训练集不可行」都是 经验性断言;真正的量化(用数字度量)证据(成本、延迟、检索精度的数字)要到第 07、09、11 章才出现。

  • RAG 不是免费的。 第 3 节那条链多了一次检索、多了一倍的输入长度, 意味着更多的延迟与费用——第 07 章会算这笔账,本章先欠着。

  • 「照材料答」不等于「答得对」。 材料本身是错的、检索找错了段落、 模型误读了材料,都会照样产生错误答案——第 11 章把失败拆成了三层的分类学。

  • 书里假设读者会 Python、用过 LLM 的 API(程序间约定好的调用接口);我们的拆解不假设这些,但代码例子的细节(异步(不等待结果返回、先做别的事的)调用)只做走查级讲解,不逐行复述。

  • 原书的配套代码在 GitHub 仓库 ofermend/hands-on-rag,是 Jupyter notebook 形式;具体 SDK(软件开发工具包)的参数,以仓库里的可运行代码为准19

7. 可带走的

  1. demo 很顺 ≠ 能上线:模型对训练外的数据是「盲」的,fluency(流畅)恰好掩盖了 blindness(盲);
  2. 幻觉不是故障,是默认值:它只会「写得像」,而「像」与「对」不是一回事;
  3. 知识改不动,就改它看到的东西——RAG = 先检索,再把检索结果加进指令里生成;
  4. 开卷 vs 闭卷:带材料 + 「不知道就说不知道」的指令,才给模型提供了「不硬答」的选项;
  5. 两条流水线:摄入流离线备料(解析→切块→嵌入→入库),查询流在线服务(检索→拼 prompt→生成→护栏);
  6. dataset / corpus / index 是三样东西:原始堆、整理过的集合、为检索建的结构;
  7. 语义搜索按意思找,词法搜索按字面找——两者的分工会在规模化时变成生死问题;
  8. RAG 项目的死因通常是工程,不是模型——这份判断是全书目录的由来。

8. 原文地图

主题原书章原文位置
退款政策崩塌、「fluency vs blindness」Chapter 1text/07-ch01-chapter-1-introduction-to-retrieval-augmented-ge.txt:6(搜「it is its blindness」)
production wallPrefacetext/06-fm-preface.txt:21(搜「production wall」)
幻觉定义Chapter 1text/07-ch01-chapter-1-introduction-to-retrieval-augmented-ge.txt:9(搜「entirely unsupported by any real data」)
扩训练集不可行Chapter 1text/07-ch01-chapter-1-introduction-to-retrieval-augmented-ge.txt:12(搜「not a viable solution」)
闭卷/开卷、参数化知识Chapter 1text/07-ch01-chapter-1-introduction-to-retrieval-augmented-ge.txt:79(搜「closed-book」) · text/07-ch01-chapter-1-introduction-to-retrieval-augmented-ge.txt:82(搜「parametric knowledge」)
RAG 两步、prompt 模板Chapter 1text/07-ch01-chapter-1-introduction-to-retrieval-augmented-ge.txt:25(搜「two steps」) · text/07-ch01-chapter-1-introduction-to-retrieval-augmented-ge.txt:66(搜「If you don't know the answer」)
双流架构Chapter 1text/07-ch01-chapter-1-introduction-to-retrieval-augmented-ge.txt:97(搜「ingestion flow」)
dataset/corpus/indexChapter 1text/07-ch01-chapter-1-introduction-to-retrieval-augmented-ge.txt:126(搜「corpus」)
语义/词法/混合搜索Chapter 1text/07-ch01-chapter-1-introduction-to-retrieval-augmented-ge.txt:143(搜「hybrid search」)
guardrailsChapter 1text/07-ch01-chapter-1-introduction-to-retrieval-augmented-ge.txt:155(搜「guardrails」)
生产清单(MLOps/性能/安全)Chapter 1text/07-ch01-chapter-1-introduction-to-retrieval-augmented-ge.txt:200(搜「event-driven」) · text/07-ch01-chapter-1-introduction-to-retrieval-augmented-ge.txt:244(搜「RBAC」)
「工程学科而非即插即用」Prefacetext/06-fm-preface.txt:24(搜「plug-and-play」)

Footnotes

  1. 出处:「Chapter 1. Introduction to Retrieval-Augmented Generation (RAG)」第 6 段(text/07-ch01-chapter-1-introduction-to-retrieval-augmented-ge.txt:6,搜「it is its blindness」)。原文:「The core issue is not the model's fluency; it is its blindness.」

  2. 出处:「Preface」第 21 段(text/06-fm-preface.txt:21,搜「production wall」)。作者把 POC 与企业级应用之间的鸿沟称为 production wall,并说多数项目死在这里。

  3. 出处:「Chapter 1」第 6 段(text/07-ch01-chapter-1-introduction-to-retrieval-augmented-ge.txt:6,搜「large language model (LLM)」)。补充(不在书里,来自通用知识):词元(token)的切分规则每个模型不同,英文常几个字母一个,中文常一个字一个;API 计费按词元数量算。

  4. 出处:「Chapter 1」第 82 段(text/07-ch01-chapter-1-introduction-to-retrieval-augmented-ge.txt:82,搜「parametric knowledge」)。

  5. 出处:「Chapter 1」第 9 段(text/07-ch01-chapter-1-introduction-to-retrieval-augmented-ge.txt:9,搜「last week's updates」)。原文:训练语料「永远不可能包含公司的私有文档、内部知识库,或上周对某个小众库的更新」。

  6. 出处:「Chapter 1」第 9 段(text/07-ch01-chapter-1-introduction-to-retrieval-augmented-ge.txt:9,搜「fluent and confident, yet entirely unsupported」)。

  7. 出处:「Chapter 1」第 12 段(text/07-ch01-chapter-1-introduction-to-retrieval-augmented-ge.txt:12,搜「not a viable solution」)。原文:「Increasing the size of training sets is not a viable solution.」

  8. 出处:「Chapter 1」第 25 段(text/07-ch01-chapter-1-introduction-to-retrieval-augmented-ge.txt:25,搜「retrieval」)与第 58 段(text/07-ch01-chapter-1-introduction-to-retrieval-augmented-ge.txt:58,搜「augmented」)。「augmented」在原文里被明确解释为「把检索结果加进 prompt」。

  9. 出处:「Chapter 1」第 79 段(text/07-ch01-chapter-1-introduction-to-retrieval-augmented-ge.txt:79,搜「closed-book」)。原文把裸模型答题比作 closed-book exam,RAG 比作 open-book exam。

  10. 出处:「Chapter 1」第 66 段(text/07-ch01-chapter-1-introduction-to-retrieval-augmented-ge.txt:66,搜「If you don't know the answer」)。原模板全文含 question 与 context 两个变量。

  11. 出处:「Chapter 1」第 97 段(text/07-ch01-chapter-1-introduction-to-retrieval-augmented-ge.txt:97,搜「ingestion flow」)与第 107 段(同文件,搜「query flow」)。原文:ingestion 是「从源抽取并索引」,query 是「每次用户查询触发」。

  12. 出处:「Chapter 1」第 117 段(text/07-ch01-chapter-1-introduction-to-retrieval-augmented-ge.txt:117,搜「vector embedding」)。原文:原文文本与向量并存于库中。

  13. 出处:「Chapter 1」第 126 段(text/07-ch01-chapter-1-introduction-to-retrieval-augmented-ge.txt:126,搜「corpus」)。

  14. 出处:「Chapter 1」第 143 段(text/07-ch01-chapter-1-introduction-to-retrieval-augmented-ge.txt:143,搜「semantic search」)与第 143 段(同文件,搜「hybrid search」)。原文在同一处提到 reranking(重排)是更进一步的升级,本书第 08 章讲。

  15. 出处:「Chapter 1」第 155 段(text/07-ch01-chapter-1-introduction-to-retrieval-augmented-ge.txt:155,搜「guardrails」)。原文:护栏包括幻觉检测(响应是否真用了检索到的事实)与偏见/毒性检查。

  16. 出处:「About the Authors」(text/135-fm-about-the-authors.txt:7,搜「Ofer Mendelevitch」)与同文件(text/135-fm-about-the-authors.txt:10,搜「cohead of machine learning at Vectara」)。两位作者都与 RAG 平台公司 Vectara 深度相关——Bao 曾任其机器学习联席负责人;Mendelevitch 是其创始人(这一句不在书里,来自通用知识)。利益相关的判读是我们加的。补充(不在书里,来自通用知识):Vectara 是本书第 10 章会反复举例的 RAG 平台公司,作者用它演示平台能力。

  17. 出处:「Preface」第 24 段(text/06-fm-preface.txt:24,搜「plug-and-play」)。原文:多数项目把 RAG 当「即插即用功能而非工程学科」,这是主要死因。

  18. 出处:「Chapter 1」第 120 段(text/07-ch01-chapter-1-introduction-to-retrieval-augmented-ge.txt:120,搜「multimodal」)、第 200 段(同文件,搜「event-driven」)、第 212 段(同文件,搜「trace」)、第 244 段(同文件,搜「RBAC」)与第 251 段(同文件,搜「prompt injection」)。RBAC=基于角色的访问控制,即「按用户角色决定能看哪些数据」;提示注入(prompt injection)是把恶意指令混进输入里的攻击,第 08 章细讲。

  19. 出处:「Preface」第 109 段(text/06-fm-preface.txt:109,搜「github.com/ofermend/hands-on-rag」)。