第 7 章:RAG——给模型接上外部知识库
📚 系列:[大模型入门:从原理到实践,技术人的认知升级指南]
一个合理的需求,一个显而易见的问题
假设你在一家公司做技术负责人,领导找到你:
“我们有几百份内部技术文档、产品手册、历史项目报告。新员工入职要花好几周才能熟悉这些内容,客户咨询也经常需要翻文档。能不能做一个 AI 助手,让它直接回答关于这些文档的问题?”
这个需求非常合理。大模型能对话、能理解文档、能生成回答——听起来只需要把文档"喂"给模型就行了。
你的第一个念头可能是:把所有文档直接放进 Prompt,让模型读完再回答。
这个方案有几个现实问题:
几百份文档可能超过数百万个 Token,而大多数模型的上下文窗口装不下(即便装得下,处理成本也极其高昂);每次提问都把所有文档重新发送一遍,速度慢、费用高;文档会持续更新,每次更新都要重新发送。
你需要的不是"把文档塞进 Prompt",而是一种更聪明的机制:只在需要的时候,取出最相关的那部分内容。
这就是 RAG 要解决的问题。
RAG 是什么
RAG 的全称是 检索增强生成(Retrieval-Augmented Generation)。
名字拆开来理解:先检索相关内容,再用检索到的内容增强大模型的生成。
用一个类比来说:这就像开卷考试。
闭卷考试时,你只能依靠记忆——这相当于直接问大模型,它只能用训练时学到的知识回答。记忆有限,知识有截止日期,还可能记错(幻觉)。
开卷考试时,你带着参考书进考场——但你不是一字一句地把书全读完再答题,而是根据题目,快速翻到最相关的章节,读几段,然后组织成自己的回答。
RAG 做的就是这件事:根据你的问题,快速找到知识库里最相关的内容片段,把它们放进上下文,再让模型基于这些内容生成回答。
图 7-1:RAG 就像开卷考试。模型不依赖记忆(训练数据),而是实时检索知识库,找到相关片段放进"参考材料",再基于参考材料回答问题。
RAG 的核心流程
RAG 系统的工作分两个阶段:构建阶段(把文档处理成可检索的形式)和查询阶段(用户提问时实时检索并生成)。
构建阶段(通常一次性完成):
- 切块:把长文档切成小段落(通常几百个词一段),每块都能独立表达一个完整的意思;
- 向量化:用一个嵌入模型(Embedding Model)把每个文本块转化成一组数字(向量),这组数字捕捉了文本的语义含义;
- 存储:把所有文本块和对应的向量存进一个专门的向量数据库。
查询阶段(每次用户提问时执行):
- 问题向量化:把用户的问题也转化成向量;
- 相似度检索:在向量数据库里找出与问题向量最接近的几个文本块;
- 注入上下文:把检索到的文本块和用户问题一起发给大模型;
- 生成回答:大模型基于检索内容回答问题。
图 7-2:RAG 的完整工作流程。构建阶段将文档处理成可检索的向量形式;查询阶段实时检索相关内容,作为上下文提供给大模型生成回答。
向量是什么——语义的数学表示
流程里有一个词需要单独解释:向量(Vector)。
如果你没有数学背景,可以这样理解:向量是一种把"意思"转化成"数字"的技术。
经过训练的嵌入模型,能把语义相近的文本映射到"数字空间"里相近的位置。"苹果是一种水果"和"苹果是甜的"在数字空间里距离很近,而"苹果"和"汽车发动机"距离很远。
当用户问"苹果的营养价值",这个问题被转化成向量之后,系统在数据库里找到的,就是语义上最相关的文本块——可能是"苹果含有丰富的维生素C……"这段话,而不是某段碰巧提到"苹果"这个词但讲的是 iPhone 的文字。
这是 RAG 比传统关键词搜索更强大的原因:它做的是语义匹配,而不是关键词匹配。
图 7-3:向量空间示意。语义相似的文本在数字空间中距离相近,语义不相关的文本距离较远。问题向量(黄色星形)在空间中找到距离最近的文档块(绿色点),这就是"语义检索"。
RAG 能解决哪些问题
理解了 RAG 的机制,就能清楚它能解决什么,不能解决什么:
RAG 擅长的场景:
- 企业内部知识库问答(产品手册、技术文档、政策规定)
- 基于私有数据的智能客服
- 文档搜索和内容问答
- 需要引用具体来源的场景(RAG 可以把检索来源一并返回)
- 知识频繁更新的场景(更新文档库就行,不需要重新训练模型)
RAG 解决不了的场景:
- 需要改变模型的回答风格或语气(这是微调的领域)
- 需要模型掌握全新的技能,而不只是访问新知识
- 文档质量很差,或者没有结构化的内部知识库
RAG vs 微调:该用哪个
这是实际落地大模型应用时最常被问到的问题之一。
微调(Fine-tuning) 是在基础模型上,用特定数据继续训练,让模型的参数本身发生改变。微调之后,模型"内化"了新知识,不需要在每次推理时检索。
两者的区别,可以用这个类比理解:
RAG 像是给一位顾问配一个助理,助理随时帮他查资料,顾问基于资料回答。知识在助理手里,随时可以更新替换。
微调像是让顾问本人参加专业培训,知识直接刻进他的脑子里。培训结束后,他不需要查资料就能回答,但换新知识需要再培训一次。
图 7-4:RAG vs 微调的选择决策树。绝大多数企业落地场景(知识库问答、文档检索、私有数据问答)都更适合 RAG;微调更适合需要改变模型行为风格或深度领域适配的场景。
实际项目中,一个粗略的判断框架:
| 维度 | 倾向 RAG | 倾向微调 |
|---|---|---|
| 知识更新频率 | 频繁更新 | 相对稳定 |
| 知识存放位置 | 在文档/数据库里 | 需要植入模型行为 |
| 需要可追溯来源 | 是 | 否 |
| 预算 | 相对有限 | 充足 |
| 核心需求 | 访问特定知识 | 改变回答风格/能力 |
RAG 的局限
RAG 不是银弹,它也有自己的局限:
检索质量决定一切。如果检索到的文本块和问题不够相关,模型拿到的就是错误的"参考材料",最终回答质量很差——这叫做"垃圾进,垃圾出"。
跨文档推理困难。如果回答一个问题需要综合多个文档的内容,RAG 的检索机制可能只取到其中一个来源,遗漏关键信息。
文档质量要求高。扫描件、格式混乱的文档、无结构的表格,都会影响切块质量,进而影响检索和回答。
不能替代专业判断。RAG 让模型"看到"了相关文档,但模型仍然是在做语言生成,而不是真正的专业推理。医疗、法律等高风险领域,RAG 系统的输出仍然需要专业人员复核。
本章小结
- RAG(检索增强生成) = 先检索相关文档片段,再让模型基于检索内容生成回答;
- 解决了"无法把所有文档塞入上下文"和"模型知识截止"这两个核心问题;
- 核心流程:文档切块 → 向量化 → 存入向量数据库 → 问题检索 → 注入上下文 → 生成回答;
- 向量检索做的是语义匹配,比关键词搜索更能理解用户意图;
- RAG vs 微调:知识需要频繁更新、有私有文档库、需要来源可追溯 → 选 RAG;需要改变模型行为风格、知识相对稳定 → 考虑微调;
- RAG 的局限:检索质量是瓶颈,跨文档推理弱,不能替代专业判断。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)