AI Agent入门实践 Day7:RAG检索增强生成从0到1实战
前言
在前面的学习中,我们已经完成了一个基础版 AI Agent。
学习内容包括:
-
Python调用大模型API
-
Prompt设计
-
Memory上下文记忆
-
Tool Calling工具调用
-
Agent基本结构
但是,一个新的问题出现了:
如果大模型不知道我们的专业知识怎么办?
例如:
-
企业内部文档
-
项目开发说明
-
产品使用手册
-
技术学习笔记
这些内容可能没有出现在大模型训练数据中。
如果直接询问大模型:
公司的服务器架构是什么?
模型并不知道真实信息。
甚至可能生成一个看似合理但是错误的答案。
这就是大语言模型中的一个典型问题:
幻觉(Hallucination)
所以,我们需要一种方式:
让 AI 在回答问题之前,先查询我们的知识库。
这就是:
RAG(Retrieval-Augmented Generation)
中文:
检索增强生成
一、什么是RAG?
RAG是一种让大语言模型结合外部知识的方法。
简单理解:
先搜索相关资料,再让大模型根据资料生成答案。
传统大语言模型:
用户问题
↓
大语言模型
↓
生成答案
例如:
用户:
公司产品有哪些功能?
模型:
根据训练数据回答
问题:
模型不知道你的私有数据。
加入RAG之后:
用户问题
↓
知识库搜索
↓
找到相关资料
↓
发送给大语言模型
↓
生成答案
例如:
用户:
公司产品有哪些功能?
RAG流程:
第一步:
搜索产品文档。
第二步:
找到:
产品支持账号管理、
权限控制、
日志审计等功能。
第三步:
发送给大模型。
最终:
根据产品文档,
该产品支持账号管理、
权限控制和日志审计功能。
二、RAG整体流程
一个完整的RAG系统主要分为三个阶段:
第一阶段:知识库构建
把文档转换成计算机可以理解的数据。
流程:
文档
↓
文本处理
↓
Embedding模型
↓
向量
↓
向量数据库
第二阶段:用户查询
用户提出问题:
例如:
RAG是什么?
系统:
问题
↓
Embedding转换
↓
向量搜索
↓
找到相关知识
第三阶段:生成答案
找到知识后:
发送给大模型。
流程:
用户问题
+
检索到的知识
↓
大语言模型
↓
答案
三、RAG核心组成
RAG主要包含三个重要部分:
1. 文档加载(Document Loading)
首先需要读取知识文件。
例如:
项目:
day7
├── data
│ └── knowledge.txt
knowledge.txt:
RAG是一种让大语言模型结合外部知识的方法。
RAG包括三个主要步骤:
1. 文档加载
2. 文本转换为向量
3. 根据用户问题检索相关内容
代码:
with open(
"data/knowledge.txt",
"r",
encoding="utf-8"
) as f:
text = f.read()
读取之后:
程序得到:
RAG是一种让大语言模型结合外部知识的方法。
2. Embedding文本向量化
计算机无法直接理解文字。
例如:
RAG是什么?
对于计算机:
只是字符串。
所以需要转换:
文字
↓
数字
↓
向量
这个过程叫:
Embedding
例如:
文本:
人工智能正在改变世界
转换:
[
-0.167,
-0.363,
-0.066,
...
]
这一串数字就是:
向量。
本次使用:
sentence-transformers
模型:
paraphrase-multilingual-MiniLM-L12-v2
生成:
384维向量
代码:
embedding = model.encode(text)
输出:
向量长度:
384
四、为什么文本需要转换成向量?
因为向量可以计算相似度。
例如:
知识库:
RAG是一种让大语言模型结合外部知识的方法。
用户问题:
RAG是什么?
虽然两个句子:
文字不同。
但是:
含义相近。
转换成向量后:
知识向量
↓
计算距离
↓
判断相似程度
距离越近:
代表语义越相似。
这就是:
向量搜索
五、向量数据库 ChromaDB
生成向量之后,需要保存。
普通数据库保存:
用户名
密码
时间
文本
但是向量数据库保存:
文本
+
对应向量
本次使用:
ChromaDB
项目结构:
vector_db
├── chroma.sqlite3
└── 向量索引文件
保存代码:
collection.add(
documents=[
text
],
embeddings=[
embedding
],
ids=[
"doc1"
]
)
执行之后:
知识文本和向量被保存。
六、向量搜索实现
现在数据库中已经有知识:
RAG是一种让大语言模型结合外部知识的方法。
用户输入:
RAG是什么?
第一步:
生成问题向量。
RAG是什么?
↓
Embedding
↓
问题向量
第二步:
查询向量数据库。
代码:
result = collection.query(
query_embeddings=[
question_embedding
],
n_results=1
)
第三步:
返回最相关内容。
结果:
RAG是一种让大语言模型结合外部知识的方法。
七、RAG + 大语言模型
目前我们已经完成:
用户问题
↓
搜索知识
↓
返回相关内容
但是:
还没有让AI回答。
最后一步:
把搜索结果交给大模型。
完整流程:
用户问题
↓
问题Embedding
↓
向量数据库搜索
↓
相关知识
↓
发送给大模型
↓
生成答案
例如:
用户:
RAG是什么?
检索:
RAG是一种让大语言模型结合外部知识的方法。
发送给AI:
请根据以下知识回答:
RAG是一种让大语言模型结合外部知识的方法。
AI:
根据提供的知识,
RAG是一种让大语言模型结合外部知识的方法。
八、Day7完整项目结构
最终项目:
day7
├── data
│ └── knowledge.txt
├── src
│ ├── embedding.py
│ ├── create_vector_db.py
│ ├── save_vector.py
│ ├── search.py
│ └── rag_chat.py
├── tests
└── vector_db
└── chroma.sqlite3
九、完整RAG流程图
知识文件
|
↓
文档加载
|
↓
Embedding模型
|
↓
文本向量
|
↓
ChromaDB
|
↓
用户问题
|
↓
问题向量化
|
↓
相似度搜索
|
↓
找到相关知识
|
↓
大语言模型
|
↓
生成答案
十、Day7实践成果
本次完成:
1. Embedding模型调用
实现:
文本 → 向量
2. ChromaDB向量存储
实现:
向量持久化保存。
3. 向量检索
实现:
根据用户问题找到相关知识。
4. RAG问答
实现:
用户问题
↓
知识库检索
↓
AI生成答案
十一、Day7学习总结
今天学习了AI Agent开发中非常重要的一部分:
RAG(检索增强生成)
掌握:
✅ RAG是什么
✅ 为什么需要RAG
✅ Embedding作用
✅ 文本如何转换向量
✅ 向量数据库作用
✅ ChromaDB基本使用
✅ 向量搜索流程
✅ RAG结合大模型
十二、后续学习方向
完成基础RAG之后,可以继续学习:
1. 文档切分(Chunk)
解决:
长文档无法直接处理的问题。
2. 多文档知识库
实现:
多个文件同时检索。
3. RAG优化
包括:
-
召回优化
-
重排序
-
Prompt优化
4. Agent + RAG
让Agent:
不仅会调用工具,
还可以查询自己的知识库。
总结
Day7完成了从:
大模型只能依靠训练数据回答问题
到:
大模型可以查询外部知识并回答问题
的重要升级。
RAG也是目前企业级AI应用中最常见的技术之一。
通过今天的学习,我们已经完成了一个基础版知识库问答系统,为后续学习更复杂的AI Agent架构打下基础。
更多推荐


所有评论(0)