绪论:从对话机器到知识引擎
1.1 大语言模型的能力边界:强大但并非全知
2022 年 11 月,OpenAI 发布 ChatGPT,五天内用户突破百万,两个月内突破一亿,创造了消费类应用的用户增长纪录。当我们用自然语言向它提问、写诗、翻译、甚至讨论微积分题时,往往会产生一种错觉:它似乎"无所不知"。但当你把问题落回到自己的学校、自己班级上周发生的事、或者昨天刚刚发布的某条新闻时,ChatGPT 给出的答案常常是含糊的、过时的,甚至是凭空编造的。这种"言之凿凿却所言非实"的现象,正是大语言模型最根本的能力边界。
要理解这种边界,需要从大语言模型的工作原理说起。当前所有主流大模型,包括 GPT-4、Claude、Gemini、文心一言、通义千问,它们的核心都是"下一个词预测":给定一段上文,模型根据统计规律预测最可能出现的下一个词,再把这个词加入上文,继续预测下一个,直到生成完整的回答。这套机制的强大之处在于,当训练数据足够大、参数足够多时,模型能够隐式地学到语法、常识、推理模式乃至代码生成能力。但它的局限也同样清晰,可以归结为三个根本性短板。
第一是幻觉问题(Hallucination)。模型在生成时并不"知道"自己不知道什么,它只会选择统计上最合理的下一个词。当被问到训练数据中从未出现过的事实性问题,例如"《大模型知识引擎》这本书的作者是谁",模型不会回答"我不知道",而是会用流畅的句式给出一个看似合理、实则虚构的人名。OpenAI 在 2023 年的一篇技术报告中曾估计,即使是最先进的 GPT-4,在封闭领域问答任务中产生幻觉的比例也接近 15%。这意味着,对于"事实准确性"要求高的场景,如法律咨询、医疗问诊、学术写作,单纯依赖模型生成结果是不可靠的。
第二是知识截止(Knowledge Cutoff)。模型的"知识"全部来自训练数据,而训练数据是某个时间点之前抓取的快照。GPT-4 的训练数据截止到 2023 年 10 月,Claude 3 截止到 2024 年初。这意味着模型不知道截止日期之后发生的任何事:你问它"今天北京天气如何",它无法回答;你问它"2024 年奥运会金牌榜",它可能给出过时或错误的数据。对于需要实时信息的应用——新闻聚合、股票分析、电商价格监控——大模型本身就是一个"时间冻结"的系统。
第三是私域知识盲区(Private Domain Blindness)。每一家企业、每一所学校、每一个家庭,都有大量从未公开在互联网上的内部知识:公司的产品手册、学校的规章制度、个人的笔记、团队的代码仓库。这些数据要么因为隐私不能公开,要么因为规模太小不会被抓取进通用训练集。无论模型多大、训练多久,它都不可能知道"我们学校图书馆周二闭馆"、"我们公司这款产品的保修期是三年"。这是大模型作为通用智能与具体业务需求之间最尖锐的矛盾。
正是这三大局限,催生了一个朴素而深刻的问题:如果我们不想重新训练模型,又想让它知道"最新"、"最准确"、"最专属"的答案,应该怎么办?答案就藏在一个看似简单实则革命性的思想里——在生成之前,先去查一查。这就是本书要讲的核心范式:检索增强生成(Retrieval-Augmented Generation,RAG)。
1.2 从规则到模型:自然语言处理的百年简史
要理解 RAG 为何在这一时刻复兴,需要把它放回自然语言处理(Natural Language Processing, NLP)技术演进的脉络中看待。这条脉络大致可以分为四个阶段。
规则系统时代(1950s—1990s)。NLP 的起点可以追溯到 1950 年图灵发表的《计算机器与智能》,文中提出了著名的"图灵测试"。1966 年,MIT 的 Joseph Weizenbaum 发布了 ELIZA,一个模拟心理治疗师的对话程序。ELIZA 没有任何真正的"理解",它只是基于关键词匹配的模板替换:当用户说"我今天很难过",它就回复"你为什么觉得难过?"。这种"机械式对话"在今天看来简陋,但在当时却让很多测试者产生了"机器在理解我"的错觉。同一时期,学者们尝试用人工编写的语法规则和词典,让机器完成翻译、问答等任务。然而,纯规则系统的脆弱性很快暴露:自然语言极其复杂,例外情况太多,人工编写的规则永远覆盖不全。
统计学习时代(1990s—2010s)。随着互联网的兴起和计算能力的提升,研究者们开始转向数据驱动的方法。这一阶段的核心思想是:与其让人来写规则,不如让机器从大规模语料中自动学习概率分布。隐马尔可夫模型(HMM)、条件随机场(CRF)、支持向量机(SVM)、统计机器翻译(SMT)相继成为主流。Google Translate 在 2006 年推出的第一代翻译系统,本质上就是基于短语统计的机器翻译。这一时期,IBM 的"问答系统"项目也初具雏形:在企业内部文档库中检索关键词,再拼接出答案。可以看到,"先检索、再生成"的思想在二十年前就已经萌芽,只是当时受限于检索技术和语言模型的表达力,效果远不如人意。
深度学习时代(2013—2017)。2013 年,Word2Vec 横空出世,让单词可以被表示为稠密向量,语义相近的词在向量空间中也相近。2015 年,RNN、LSTM、GRU 等序列模型在机器翻译、文本生成上取得突破。深度学习让模型第一次具备了"端到端"从原文到答案的能力,不再依赖人工特征工程。但这个阶段的语言模型规模仍然有限,通常在几亿参数以内,能力天花板明显。
大模型时代(2017—至今)。2017 年,Google 发表论文《Attention Is All You Need》,提出了 Transformer 架构。这是 NLP 历史上最关键的转折点之一:Transformer 通过"自注意力"机制,能够并行处理任意长度的文本,并捕捉远距离的语义关联。2018 年,OpenAI 发布 GPT-1(约 1.17 亿参数),Google 发布 BERT(约 3.4 亿参数),语言模型的能力开始质的飞跃。此后几年,模型规模呈指数级增长:GPT-2(15 亿)、GPT-3(1750 亿)、PaLM(5400 亿),能力随之水涨船高。2022 年底 ChatGPT 的发布,标志着大模型从"研究原型"走向"大众产品",也正式宣告了大模型时代的到来。
然而,正如上一节所述,大模型的强大并不等于全知。当人们把大模型部署到真实业务中时,那三大局限开始集中暴露。整个行业开始重新审视一个"老问题":能不能让大模型在回答之前,先去查一下相关的资料?于是,沉寂多年的检索增强生成思想,在 2023 年迎来了全面复兴。
1.3 RAG 的核心思想:让模型"开卷考试"
在介绍 RAG 之前,先打一个青少年熟悉的比方。考试有两种形式:闭卷考试和开卷考试。闭卷考试要求学生把所有知识都记在脑子里,考查的是记忆和背诵能力;开卷考试允许学生带资料入场,考查的是查找、理解、整合、应用的能力。传统的生成式大模型,本质上是一种"超级闭卷考生"——它必须把训练阶段见过的所有知识都"内化"在参数里,回答问题时全凭记忆。但 RAG 的核心思想,是把模型变成一个"开卷考生":在生成回答之前,先去外部知识库里检索相关内容,然后把检索到的资料和问题一起交给模型,让模型"带着资料作答"。
这个思想并非全新。Facebook AI 研究院的 Patrick Lewis 等人在 2020 年发表了一篇里程碑式的论文《Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks》,首次系统地提出 RAG 框架。论文中,他们把生成式模型(BART)与一个稠密检索器(DPR)相结合,在多项知识密集型任务上取得了当时的最优结果。但彼时大模型尚未爆发,RAG 的影响力有限。2023 年以后,随着 ChatGPT 的普及和企业级应用的爆发,RAG 重新进入主流视野,并在 2024 年成为大模型应用层最热门的技术方向之一。Gartner 在 2024 年发布的技术成熟度曲线中,将 RAG 列为"期望膨胀期"的代表性技术,预计在未来 2—5 年内将进入大规模商用阶段。
RAG 的工作流程可以清晰地分为离线索引和在线问答两个阶段。
离线索引阶段发生在系统部署之前,目的是把外部知识"准备好"。假设我们要把一本 500 页的产品手册接入大模型,首先需要做四件事:第一步是文档解析(Parsing),把 PDF、Word、网页等不同格式的原始文档,转换成纯文本;第二步是文档切块(Chunking),把长文本切成若干较小的片段,每个片段 200—1000 字左右,因为大模型的输入窗口(Context Window)虽然越来越长,但仍然有限,且过长的上下文会引入噪声;第三步是向量化(Embedding),用嵌入模型把每个文本块转换为一个高维向量(通常是 768 维或 1024 维甚至更高),这一步的关键是让语义相近的文本在向量空间中也距离相近;第四步是入库(Indexing),把这些向量连同原始文本一起存入专门的向量数据库(如 Milvus、Qdrant、Chroma、Weaviate 等),并建立索引以便快速检索。
在线问答阶段发生在用户提问时,目的是把检索结果"用起来"。当用户输入一个问题,RAG 系统会做四件事:第一步是问题理解(Query Understanding),对用户的原始问题做必要的改写、扩展或拆解,以提高检索命中率;第二步是检索(Retrieval),把问题也转换成一个向量,然后在向量数据库中搜索最相似的若干个文本块;第三步是重排(Reranking),用更精细的排序模型对初检结果做二次排序,挑出最相关的 Top-N 段落;第四步是生成(Generation),把检索到的段落作为上下文,连同用户问题一起打包成提示词(Prompt)交给大模型,由大模型基于这些证据生成最终答案。
这个流程可以用一张总览图来概括:
```mermaid flowchart TD A[原始文档] --> B[文档切块] B --> C[向量化] C --> D[(向量数据库)] E[用户提问] --> F[问题向量化] F --> G[相似度检索] D --> G G --> H[重排] H --> I[Prompt构建] I --> J[大模型生成] J --> K[返回答案] ```
理解这张图的关键,是看到离线索引是"建图书馆",在线问答是"在图书馆里找书"。大模型本身并不需要"记住"所有知识,它只需要在每次回答之前"现查"即可。这种"动态接入知识"的能力,正是 RAG 区别于传统微调和单纯提示工程的核心价值。
1.4 RAG vs 微调 vs 提示工程:三种知识增强方案的权衡
当我们意识到大模型"不知道"某些知识时,工程界总结出三种主流的解决方案:提示工程(Prompt Engineering)、微调(Fine-tuning)和检索增强生成(RAG)。这三种方案并非互斥,而是可以组合使用;但它们在成本、实时性、可控性、适用场景上各有侧重,需要根据具体需求做选择。
提示工程是成本最低、迭代最快的方式。它不改变模型参数,而是通过精心设计提示词,引导模型在回答时调用训练阶段学到的知识。例如,我们可以在提示词中写"你是一个熟悉《哈利·波特》所有细节的巫师",模型就会倾向于从相关知识中生成回答。提示工程的优势是几乎零成本(只需要写好提示词),可以即时调整,且不会影响模型本身的能力。局限在于:第一,模型对提示词的响应依赖训练数据的覆盖度,如果它从未见过相关知识,再精巧的提示词也"挤"不出答案;第二,上下文窗口有限,不能塞入大量文档;第三,提示词技巧本身存在不确定性,不同模型对同一提示词的响应差异很大。
微调是中等成本的方式。它通过在特定领域数据上继续训练模型,让模型的参数发生更新,从而把领域知识"内化"到模型里。例如,我们可以用 10 万条法律问答对微调一个开源大模型,让它变成"法律专家"。微调的优势是:模型在微调后,推理时不再需要额外资料,回答速度更快;可以通过指令微调改变模型的行为风格;领域适应性强。局限在于:第一,微调需要高质量、大规模的标注数据,数据准备成本极高;第二,训练过程需要 GPU 资源,单次微调成本可能高达数万到数十万元;第三,模型权重更新后是"静态"的,新知识进入仍需重新训练,无法做到实时更新;第四,微调过的模型可能出现灾难性遗忘(Catastrophic Forgetting),在新知识进入的同时可能丢失一部分通用能力。
RAG是另一种中等成本、但实时性最强的方式。它不改变模型参数,而是在推理时动态地从外部知识库中检索相关内容,把它注入到提示词中。RAG 的优势是:知识更新只需更新向量数据库,无需重新训练;可解释性强(可以展示"模型是基于哪几条资料回答的");适合处理私域、长尾、时效性强的知识;成本远低于全量微调。局限在于:检索质量直接决定回答质量,如果检索不到相关内容,模型仍然会产生幻觉;对向量数据库和检索基础设施有依赖;提示词工程同样关键,需要把检索结果和用户问题巧妙地组合。
下表从七个维度对三种方案做了系统对比:
| 维度 | 提示工程 | 微调 | RAG | |---|---|---|---| | 实施成本 | 极低 | 高 | 中 | | 知识更新方式 | 改提示词 | 重新训练 | 更新向量库 | | 实时性 | 弱 | 弱 | 强 | | 可解释性 | 中 | 弱 | 强 | | 数据需求 | 无标注数据 | 大量标注数据 | 仅需原始文档 | | 适用场景 | 通用任务微调 | 领域专精模型 | 私域知识问答 | | 典型工具 | 提示词框架 | LoRA、QLoRA | LangChain、LlamaIndex |
在实际工程中,一个成熟的大模型应用往往是三种方案的组合:用提示工程定义模型角色和行为规范,用 RAG 接入实时和私域知识,用轻量级微调(如 LoRA)调整模型的输出风格或特定任务能力。本书将重点讨论 RAG,但它会反复触及与提示工程和微调的边界。
1.5 RAG 工程的五大核心问题
把 RAG 想象成一个"看起来简单、实则复杂"的系统并不困难。朴素 RAG 的核心代码确实可以压缩到 50 行以内,但要把一个 RAG 系统从"能跑"打磨到"好用",工程上需要面对五个相互关联的核心问题。理解这五个问题,是理解本书全部分章内容的钥匙。
第一是文档切块(Chunking)问题。大模型的输入窗口虽然不断增长(GPT-4 Turbo 支持 128K tokens,Claude 3 支持 200K tokens),但把所有文档一次性塞进去既不经济也不高效。更关键的是,过长的上下文会引入噪声,模型会"分心"。文档切块的目标是把长文档切分成语义完整、长度适中的片段,让检索时既能定位到具体信息,又不会丢失上下文。切块策略包括:按固定长度切、按段落切、按句子切、按语义切,每种都有适用场景。切块过大,会降低检索精度;切块过小,会丢失上下文。如何在粒度和上下文之间取得平衡,是切块问题的核心。
第二是检索召回问题(Retrieval Recall)。召回率是 RAG 系统的"第一道关卡":如果相关文档根本没能被检索到,再好的生成模型也无济于事。检索质量取决于多个因素:嵌入模型的选择(不同模型对中英文、代码、数学公式的语义捕捉能力不同)、检索算法(向量检索、BM25 关键词检索、混合检索各有优劣)、查询改写(用户的问题往往口语化、含糊,需要被改写为更"检索友好"的查询)、多路召回与融合。检索召回问题,本质上是如何让"找得到"这一前提成立。
第三是重排与上下文选择问题(Reranking & Context Selection)。初步检索往往返回几十甚至上百个候选片段,但最终喂给大模型的上下文窗口有限(通常 4K—16K tokens),必须做精细化筛选。重排模型(Cross-Encoder)能够对"问题—段落"对做更精细的相关性打分,显著提升 Top-N 质量。但重排本身也有成本:Cross-Encoder 比 Embedding 模型慢 10—100 倍。如何在召回率和延迟之间做权衡,是工程上必须面对的问题。
第四是评测问题(Evaluation)。一个 RAG 系统是否真的"好用",不能只靠主观感觉,必须有可量化的评测指标。评测分两层:一是检索质量评测,关心"检索到的文档是否相关",可以用 Recall@K、MRR、NDCG 等指标;二是生成质量评测,关心"最终回答是否准确、是否基于证据、是否流畅",更复杂,需要结合人工评估、自动评估(如 LLM-as-a-Judge)和业务指标。缺乏评测体系,RAG 系统的迭代就成了"盲人摸象"。
第五是迭代演化问题(Iteration)。RAG 系统不是"一次性工程",而是一个需要持续优化的系统。用户会产生新的问题类型,文档会更新,业务需求会变化。RAG 系统的演化需要建立闭环:用户反馈 → 数据采集 → 失败案例分析 → 检索/切块/重排/生成调优 → 重新部署 → 监控回流。这个闭环决定了 RAG 系统的长期生命力。
这五大问题——检索、切块、重排、评测、迭代——就是本书全部 15 章内容的骨架。每一章都会从原理、算法、工程实践、常见陷阱几个角度,对其中一个问题做深度剖析。
1.6 全书学习路径与技术路线图
本书共 15 章,按照"原理 → 架构 → 实现 → 优化 → 前沿"的递进逻辑组织,可以分为五个部分。
第一部分:基础概念(第 1—3 章)。第 1 章即本章,介绍 RAG 的来龙去脉和核心思想;第 2 章深入剖析大模型的"知识困境",从信息论角度解释为什么会产生幻觉;第 3 章讲解文本表示与向量化基础,理解 Embedding 模型的原理与评测。
第二部分:核心架构(第 4—6 章)。第 4 章详解文档切块策略;第 5 章详解稠密检索与稀疏检索;第 6 章详解重排模型与多路召回融合。这三章构成 RAG 系统的"检索骨干"。
第三部分:生成与提示(第 7—9 章)。第 7 章讲 RAG 场景下的提示工程;第 8 章讲生成质量控制与幻觉抑制;第 9 章讲多轮对话与上下文管理。
第四部分:评测与工程化(第 10—12 章)。第 10 章系统讲解 RAG 评测体系;第 11 章讲向量数据库选型与系统性能优化;第 12 章讲生产级 RAG 系统的部署、监控、成本控制。
第五部分:高级主题与未来(第 13—15 章)。第 13 章讲 Agentic RAG,让 RAG 系统具备自主决策能力;第 14 章讲多模态 RAG,把图像、表格、音频纳入知识库;第 15 章展望 RAG 的未来方向