第9章 知识库RAG实战:让智能体拥有你的专业数据
AI智能体实战训练营 · 章节 9/33 · 45 学时
知识库RAG实战:让智能体拥有你的专业数据
大模型虽然博学,但它有两个致命的弱点:一是知识有截止日期,不知道最新的信息;二是不知道你的私有数据(企业文档、产品手册、客户案例、内部制度等)。而RAG(检索增强生成,Retrieval-Augmented Generation)技术,正是为了解决这两个问题而生的。
通过RAG,你可以把自己的知识库(文档、手册、案例、数据等)注入智能体,让它在回答问题时先检索知识库中的相关信息,再基于检索到的信息生成回答。这样,智能体就拥有了你的专业知识,回答更准确、更贴合你的业务需求,同时还能有效减少幻觉。
RAG是当前企业级智能体应用中最核心、最实用的技术之一。本章将带你从零开始学习RAG的原理、实现和优化技巧。
• 知识时效性:大模型的训练数据有截止日期,RAG可以接入最新的信息
• 私有知识:大模型不知道企业内部的文档、制度、案例,RAG可以注入私有知识
• 减少幻觉:大模型基于检索到的真实信息回答,而不是凭空编造,大幅减少幻觉
• 可追溯性:回答可以标注信息来源,用户可以验证答案的准确性
• 知识更新方便:不需要重新训练模型,只需要更新知识库即可
• 成本低:相比微调模型,RAG的成本低得多,且更新更灵活
一、RAG的基本原理
1.1 什么是RAG?
RAG(Retrieval-Augmented Generation,检索增强生成)是一种结合了信息检索和文本生成的技术。它的核心思想是:在生成回答之前,先从外部知识库中检索相关的信息,然后把检索到的信息作为上下文,和用户的问题一起传给大模型,让大模型基于这些信息生成回答。
【直接提问】
用户:"我们公司的MES系统支持哪些设备对接协议?"
大模型:(凭记忆回答,可能编造)"通常MES系统支持OPC UA、Modbus、MQTT等协议..."
(问题:大模型不知道你们公司的MES系统具体支持什么,可能回答不准确,甚至编造)
【RAG提问】
用户:"我们公司的MES系统支持哪些设备对接协议?"
→ 第一步【检索】:从产品手册知识库中检索相关内容
→ 检索到:"本系统支持OPC UA、Modbus TCP、MQTT、HTTP REST API四种设备对接协议,其中OPC UA为推荐协议..."
→ 第二步【生成】:把检索到的内容和用户问题一起传给大模型
大模型:"根据产品手册,我们公司的MES系统支持以下四种设备对接协议:
1. OPC UA(推荐协议)
2. Modbus TCP
3. MQTT
4. HTTP REST API
其中OPC UA为推荐协议,适用于大多数工业设备场景。"
(优势:回答准确、有依据、不会编造)
1.2 RAG的完整工作流程
RAG的工作流程分为两个阶段:索引阶段(Indexing)和检索生成阶段(Retrieval & Generation)。
阶段一:索引阶段(离线处理,只做一次或定期更新)
- 文档收集:收集需要纳入知识库的文档(PDF、Word、Excel、网页、数据库等)
- 文档解析:解析各种格式的文档,提取纯文本内容
- 文本切片(Chunking):把长文本切分成合适大小的小块(Chunk)
- 向量化(Embedding):用Embedding模型把每个文本块转换成向量(一串数字)
- 存储:把向量和原始文本一起存入向量数据库
阶段二:检索生成阶段(在线处理,每次提问都执行)
- 问题向量化:把用户的问题也用同一个Embedding模型转换成向量
- 相似度检索:在向量数据库中搜索与问题向量最相似的Top K个文本块
- 上下文组装:把检索到的文本块组装成上下文,和用户问题一起传给大模型
- 生成回答:大模型基于检索到的上下文,生成准确的回答
- (可选)来源标注:在回答中标注信息来源,方便用户验证
1.3 RAG的核心组件
| 组件 | 功能 | 常见选择 |
|---|---|---|
| 文档解析器 | 解析各种格式的文档,提取文本 | PyPDF2、pdfplumber、LangChain文档加载器、Unstructured |
| 文本切片器 | 把长文本切分成合适大小的块 | 固定大小切片、递归字符切片、语义切片、按标题切片 |
| Embedding模型 | 把文本转换成向量 | OpenAI text-embedding-3、BGE、M3E、Cohere embed、Jina embeddings |
| 向量数据库 | 存储和检索向量 | Chroma、FAISS、Pinecone、Milvus、Weaviate、Qdrant |
| 大语言模型 | 基于检索到的上下文生成回答 | GPT-4o、Claude 3.5、DeepSeek、文心一言、通义千问 |
| 检索策略 | 决定如何检索和排序相关文本 | 向量检索、关键词检索、混合检索、重排序(Rerank) |
二、RAG实战:从零搭建一个知识库问答系统
理论讲了这么多,让我们通过一个完整的实战案例,看看如何从零搭建一个RAG知识库问答系统。我们将用Dify平台来搭建(低代码,适合快速上手),同时也会介绍用LangChain代码实现的方式。
业务背景:
某工厂有200多台设备,每台设备都有维修手册、故障案例、维护记录。维修工遇到故障时,经常需要翻阅大量手册和记录,效率很低。而且经验丰富的老师傅退休后,知识也随之流失。
需求:
搭建一个智能问答系统,维修工输入故障现象(如"3号空压机异响,温度95度"),系统自动检索相关的维修手册和历史案例,给出诊断建议和维修步骤。
知识库内容:
• 设备维修手册(PDF,50份,约2000页)
• 历史故障案例(Word,300份)
• 设备维护记录(Excel,2000条)
• 安全操作规程(PDF,20份)
第一步:准备和整理知识库文档
在搭建RAG系统之前,首先要整理好知识库文档。这一步非常重要,直接影响后续的效果。
文档整理要点:
- 格式统一:尽量把文档转换成统一的格式(如PDF或纯文本),方便解析
- 内容清洗:去除无关内容(如页眉页脚、目录、广告、重复内容),修正明显的错误
- 结构清晰:保留文档的标题层级(一级标题、二级标题等),这对后续的切片和检索很有帮助
- 命名规范:文件名要能反映内容(如"空压机维修手册_V2.0.pdf"比"文档1.pdf"好)
- 分类组织:按设备类型、文档类型等分类组织,方便后续的元数据标注和过滤检索
元数据标注:为每个文档添加元数据(如设备类型、文档类型、发布日期、版本号等),后续可以基于元数据进行过滤检索(如只检索"空压机"相关的文档)。
第二步:文档解析和文本提取
把各种格式的文档解析成纯文本。不同格式的文档有不同的解析方法:
- PDF:用pdfplumber、PyMuPDF等工具提取文本。注意扫描版PDF需要先做OCR
- Word:用python-docx提取文本和表格
- Excel:用pandas读取,把表格转换成文本格式(如"列名:值"的形式)
- 网页:用BeautifulSoup、Scrapy等工具提取正文内容
- 图片:用OCR工具(如PaddleOCR、Tesseract)提取文字
Dify平台的操作:在Dify中,直接上传文档即可,平台会自动解析。支持PDF、Word、Excel、PPT、txt、markdown等多种格式。上传后可以预览解析效果,如果解析有问题可以手动调整。
第三步:文本切片(Chunking)
文本切片是RAG中最关键、最容易被忽视的环节。切片的大小和方式直接影响检索的效果。
为什么要切片?
- 大模型的上下文窗口有限,不能把整个文档都传进去
- 检索时需要找到与问题最相关的部分,整个文档的向量会"稀释"相关性
- 切片后可以更精确地定位信息,减少无关内容的干扰
常见的切片策略:
| 切片策略 | 原理 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|---|
| 固定大小切片 | 按固定字符数切片,相邻块之间有重叠 | 简单、快速、可控 | 可能切断完整的语义单元 | 通用场景、结构不清晰的文档 |
| 递归字符切片 | 按分隔符(段落、句子、单词)递归切分,尽量保持语义完整 | 语义完整性好 | 切片大小不均匀 | 大多数文档的默认选择 |
| 按标题/结构切片 | 根据文档的标题层级(H1、H2、H3)切片 | 语义完整、结构清晰 | 需要文档有清晰的标题结构 | 结构化文档(手册、报告、规范) |
| 语义切片 | 用语义相似度判断切片边界,语义变化大的地方切开 | 语义最完整 | 计算成本高、速度慢 | 对质量要求高的场景 |
切片大小的选择:
- 一般建议:256-512个token(约500-1000个中文字符)
- 太小:上下文不完整,检索到的信息不够
- 太大:包含太多无关信息,稀释相关性,浪费token
- 重叠(Overlap):相邻块之间保留10-20%的重叠,避免关键信息被切断
Dify平台的操作:上传文档后,在"分段设置"中选择切片模式(自动/自定义),设置分段大小和重叠。Dify默认使用递归字符切片,效果不错。建议先试用默认设置,效果不好再调整。
第四步:向量化和存储
把每个文本块用Embedding模型转换成向量,存入向量数据库。
Embedding模型的选择:
- OpenAI text-embedding-3-small:效果好,速度快,成本低,推荐首选
- BGE(BAAI General Embedding):开源,中文效果好,支持本地部署
- M3E:开源,中文效果好,适合中文场景
- Cohere embed:效果好,支持多语言
- Jina embeddings:开源,支持长文本
关键原则:问题和文档必须用同一个Embedding模型向量化,否则向量空间不一致,检索结果会不准确。
向量数据库的选择:
- Chroma:轻量级,本地部署,适合开发和小型应用
- FAISS:Facebook开源,高性能,适合大规模向量检索
- Pinecone:云端托管,开箱即用,适合生产环境
- Milvus:开源,企业级,支持大规模和分布式
- Weaviate:开源,支持混合搜索(向量+关键词)
Dify平台的操作:Dify内置了向量数据库和多种Embedding模型,上传文档后会自动完成向量化和存储,不需要手动操作。你只需要在设置中选择Embedding模型即可。
第五步:检索策略设计
检索策略决定了"如何从知识库中找到最相关的信息"。这是影响RAG效果的另一个关键环节。
常见的检索方式:
| 检索方式 | 原理 | 优点 | 缺点 |
|---|---|---|---|
| 向量检索(语义检索) | 计算问题和文档块的向量相似度,返回最相似的Top K | 能理解语义,同义词、改写都能匹配 | 可能漏掉关键词精确匹配的结果 |
| 关键词检索(全文检索) | 基于关键词匹配(如BM25算法) | 精确匹配关键词,适合专有名词、型号、编号 | 无法理解语义,同义词匹配不到 |
| 混合检索 | 同时进行向量检索和关键词检索,合并结果 | 兼顾语义和精确匹配,效果最好 | 实现复杂,需要调权重 |
| 重排序(Rerank) | 先粗筛召回较多结果,再用更精确的模型重排序 | 精度最高 | 增加一次模型调用,成本和延迟增加 |
推荐策略:混合检索 + 重排序。先用混合检索召回Top 20-50个结果,再用Rerank模型重排序,取Top 3-5个传给大模型。这种策略在大多数场景下效果最好。
Top K的选择:一般取3-5个最相关的文本块。太少信息不够,太多会引入无关信息,浪费token。可以根据实际效果调整。
Dify平台的操作:在应用设置的"检索设置"中,可以选择检索方式(向量检索/全文检索/混合检索),设置Top K、相似度阈值、是否启用Rerank等。建议启用混合检索和Rerank,效果最好。
第六步:Prompt设计和回答生成
检索到相关文本后,需要设计一个好的Prompt,把检索到的上下文和用户问题一起传给大模型,生成高质量的回答。
RAG Prompt的核心要素:
- 角色设定:告诉大模型它是谁(如"你是一位专业的设备维修顾问")
- 上下文:把检索到的相关文本块放在这里,明确标注"以下是参考资料"
- 问题:用户的问题
- 回答规则:明确告诉大模型如何回答(如"必须基于参考资料回答,不要编造"、"如果参考资料中没有相关信息,请说明"、"回答要分步骤、有条理")
- 输出格式:指定回答的格式(如"先给出诊断结论,再列出维修步骤,最后标注参考来源")
RAG Prompt模板示例:
你是一位专业的设备维修顾问,有10年的工业设备维修经验。
请根据以下参考资料,回答用户的问题。
【参考资料】
{{检索到的文本块}}
【用户问题】
{{用户问题}}
【回答规则】
1. 必须基于参考资料回答,不要使用参考资料以外的知识
2. 如果参考资料中没有相关信息,请明确说"根据现有资料无法回答这个问题,建议咨询设备厂家或资深维修工程师"
3. 回答要专业、准确、有条理
4. 先给出诊断结论,再列出详细的维修步骤
5. 涉及安全操作时,必须强调安全注意事项
6. 在回答末尾标注信息来源(参考资料的编号)
【输出格式】
## 诊断结论
...
## 维修步骤
1. ...
2. ...
## 安全注意事项
...
## 参考来源
资料1、资料3
Dify平台的操作:在应用的"提示词编排"中,可以自定义系统提示词。Dify提供了变量(如{{context}}、{{query}}),可以方便地把检索到的上下文和用户问题插入Prompt。
第七步:测试和优化
RAG系统搭建好后,需要大量测试和优化才能达到好的效果。
测试方法:
- 准备测试集:准备一批典型的问题和标准答案(至少20-30个),覆盖各种场景
- 人工评估:用测试集提问,人工评估回答的准确性、完整性、相关性
- 检索评估:检查检索到的文本块是否真的相关,有没有漏掉重要信息
- 边界测试:测试知识库中没有答案的问题,看系统是否会如实说明(而不是编造)
常见问题和优化方向:
| 问题 | 原因 | 优化方向 |
|---|---|---|
| 回答不准确/编造 | 检索到的内容不相关,或Prompt没有严格约束 | 优化检索策略、改进Prompt、增加"不要编造"的约束 |
| 回答不完整/漏掉信息 | Top K太小,或切片太大导致信息被稀释 | 增加Top K、调整切片大小、启用Rerank |
| 检索不到相关内容 | 切片方式不对、Embedding模型不适合、关键词太特殊 | 调整切片策略、换Embedding模型、启用混合检索 |
| 回答包含无关内容 | 检索到了不相关的文本块,或切片太大 | 提高相似度阈值、减小切片大小、优化检索策略 |
| 回答速度慢 | 检索慢、大模型调用慢、Rerank增加延迟 | 优化向量数据库索引、选择更快的模型、调整Rerank的召回数量 |
三、RAG进阶技巧
3.1 多轮对话的RAG
在多轮对话中,用户的问题可能依赖之前的对话上下文(如"那它的维修周期是多久?"中的"它"指代上一轮提到的设备)。这时候需要先做"问题改写"——把当前问题结合历史对话改写成一个完整、独立的问题,再用改写后的问题去检索。
实现方式:在检索之前,增加一个"问题改写"节点,调用大模型把当前问题结合历史对话改写成完整的问题。
3.2 元数据过滤检索
如果知识库有清晰的分类(如设备类型、文档类型、时间范围),可以在检索时基于元数据过滤,只在相关的子集中检索。这样可以提高检索的准确性和速度。
示例:用户问"空压机的故障怎么处理",可以先过滤出设备类型="空压机"的文档,只在这些文档中检索,而不是在所有文档中检索。
3.3 分层检索
对于大型知识库,可以采用分层检索的策略:先粗粒度检索(如检索到文档级别),再细粒度检索(在相关文档中检索具体的段落)。这样可以提高检索效率和准确性。
3.4 知识图谱增强RAG
对于关系复杂的知识(如设备的组成结构、故障的因果关系),可以构建知识图谱,把实体和关系结构化存储。检索时同时检索向量和知识图谱,结合两者的结果生成回答。这种方式叫做"GraphRAG",适合复杂的知识推理场景。
3.5 RAG评估体系
要持续优化RAG系统,需要建立量化的评估体系。常用的评估指标包括:
- 检索准确率(Recall@K):Top K检索结果中包含正确答案的比例
- 回答准确率:回答正确的问题占总问题的比例(人工评估或用大模型评估)
- 幻觉率:回答中包含编造信息的比例
- 完整性:回答包含了所有必要信息的比例
- 相关性:回答与问题相关的程度
可以用大模型作为"裁判"来自动评估回答质量,这样可以大规模、低成本地进行评估。
四、RAG vs 微调:如何选择
很多人会问:"我想让大模型掌握我的专业知识,应该用RAG还是微调(Fine-tuning)?"
| 维度 | RAG | 微调(Fine-tuning) |
|---|---|---|
| 原理 | 检索外部知识,基于知识生成回答 | 用领域数据继续训练模型,把知识"内化"到模型参数中 |
| 知识更新 | 更新知识库即可,简单快速 | 需要重新训练,成本高、周期长 |
| 可追溯性 | 回答可以标注来源,可验证 | 无法追溯知识来源,"黑盒" |
| 幻觉控制 | 基于真实知识回答,幻觉少 | 仍可能产生幻觉 |
| 成本 | 低,主要是检索和推理成本 | 高,训练需要大量算力和数据 |
| 适合场景 | 知识频繁更新、需要可追溯、数据量不大 | 需要特定风格/格式、知识稳定、有大量标注数据 |
| 技术门槛 | 较低,有成熟的工具和平台 | 较高,需要机器学习专业知识 |
结论:对于大多数企业级应用,RAG是首选。它成本低、更新快、可追溯、幻觉少。只有在需要特定的输出风格/格式、且知识稳定、有大量标注数据的场景下,才考虑微调。最佳实践是"RAG为主,微为辅"——用RAG注入知识,用微调调整风格和格式。
• RAG(检索增强生成)= 先检索知识库,再基于检索结果生成回答,是企业级智能体的核心技术
• RAG两阶段:索引阶段(文档收集→解析→切片→向量化→存储)+ 检索生成阶段(问题向量化→相似度检索→上下文组装→生成回答)
• 核心组件:文档解析器、文本切片器、Embedding模型、向量数据库、大语言模型、检索策略
• 关键环节:文本切片(大小256-512 token,重叠10-20%)、检索策略(推荐混合检索+Rerank)、Prompt设计(严格约束基于资料回答)
• 进阶技巧:多轮对话问题改写、元数据过滤检索、分层检索、知识图谱增强(GraphRAG)、量化评估体系
• RAG vs 微调:大多数场景RAG是首选,成本低、更新快、可追溯;"RAG为主,微调为辅"是最佳实践
下一章,我们将学习工具调用实战——这是让智能体"动手干活"的核心技术。通过工具调用,智能体可以搜索网络、查询数据库、调用API、执行代码,真正成为能干活的数字员工。
📝 本章练习(5题)
答案与解析请在 互动学习看板 中作答查看。
📚 AI智能体实战训练营 课程目录(33 章)
- 第1章 什么是AI智能体:从聊天机器人到自主决策系统
- 第2章 智能体的四大核心能力:感知·思考·行动·记忆
- 第3章 范式转移:智能体与传统软件的本质区别
- 第4章 2025年主流智能体平台全景对比与选型
- 第5章 智能体应用场景地图:从个人效率到企业级落地
- 第6章 编排思维:如何把大模型变成可执行的业务流程
- 第7章 Prompt工程实战:写出让智能体精准执行的指令
- 第8章 工作流编排入门:节点、连线、条件分支与循环
- 第9章 知识库RAG实战:让智能体拥有你的专业数据
- 第10章 工具调用实战:搜索·计算·API·数据库全掌握
- 第11章 多智能体协作:角色分工、任务分发与结果汇总
- 第12章 Coze/扣子入门:30分钟搭建你的第一个智能体
- 第13章 Coze进阶:插件开发、工作流深度编排与知识库优化
- 第14章 Dify入门:开源可私有化部署的智能体平台搭建
- 第15章 Dify进阶:RAG管道优化、Agent模式与工作流编排
- 第16章 LangChain入门:用代码构建可定制的智能体应用
- 第17章 LangChain实战:自定义Agent、工具链与记忆系统
- 第18章 Agent Harness与新一代框架:2025年智能体开发趋势
- 第19章 平台选型决策树:不同业务场景下的最优平台选择
- 第20章 任务拆解方法论:把复杂问题变成智能体可执行的步骤
- 第21章 提示词编排艺术:System·User·Function的三层协同
- 第22章 记忆系统设计:短期记忆、长期记忆与向量数据库选型
- 第23章 错误处理与容错:智能体执行失败时的兜底策略
- 第24章 评估与优化体系:如何量化衡量智能体的效果并持续改进
- 第25章 安全与合规:智能体应用的数据安全、隐私保护与风险防控
- 第26章 实战项目一:企业知识库智能问答助手(全流程实操)
- 第27章 实战项目二:制造业设备故障诊断智能体
- 第28章 实战项目三:供应链采购智能分析与比价助手
- 第29章 实战项目四:多智能体协同的项目管理办公室(PMO)
- 第30章 实战项目五:智能体与MES/ERP系统的深度集成
- 第31章 智能体落地路线图:从POC验证到规模化应用的完整路径
- 第32章 AI智能体工程师/产品经理的能力模型与成长路径
- 第33章 作品集打造与面试准备:如何拿到AI智能体岗位Offer
