AI Agent 从入门到封神:24 讲打造你的超级智能体~系列文章14:RAG+Agent王炸组合:让你的智能体拥有“过目不忘“的知识库
·
RAG+Agent王炸组合:让你的智能体拥有"过目不忘"的知识库 📚
导读:Agent有记忆还不够,还需要一个专属知识库!RAG(检索增强生成)就是给Agent装上"外挂大脑"的技术。本文手把手教你用RAG+Agent打造知识增强型智能体,让它对你公司的文档、产品手册、技术文档了如指掌!💯
一、RAG是什么?一句话讲透 🎯
RAG = 先搜索,再回答。
就这么简单!
| 方式 | 流程 | 问题 |
|---|---|---|
| ❌ 纯LLM | 用户提问 → 模型凭记忆回答 | 知识过时、可能编造 |
| ✅ RAG | 用户提问 → 先搜索知识库 → 带着搜索结果回答 | 准确、有据可查 |
1.1 RAG流程图
1.2 RAG vs 纯LLM对比
| 维度 | 纯LLM | RAG+LLM |
|---|---|---|
| 知识新鲜度 | ❌ 训练截止日 | ✅ 实时更新 |
| 幻觉率 | ❌ 高(15%+) | ✅ 低(2-5%) |
| 可溯源 | ❌ 不知道从哪学的 | ✅ 可以给出出处 |
| 私有知识 | ❌ 不知道 | ✅ 完全支持 |
| 成本 | 💰 需要微调 | 💰 只需存储+检索 |
二、RAG+Agent:为什么是王炸组合?🃏
2.1 RAG和Agent各自的问题
| 系统 | 优势 | 短板 |
|---|---|---|
| 纯RAG | 知识准确 | 不会推理、不会行动 |
| 纯Agent | 会推理、会用工具 | 知识有限、可能幻觉 |
| RAG+Agent | ✅ 知识准确+会推理+会行动 | 实现稍复杂 |
2.2 RAG+Agent的三种集成方式
| 方式 | 原理 | 适用场景 | 复杂度 |
|---|---|---|---|
| 🔧 RAG作为工具 | Agent把RAG当作一个搜索工具来调用 | 最灵活,推荐 | ⭐⭐ |
| 🔄 RAG作为流程 | RAG是Agent工作流的一个固定步骤 | 简单场景 | ⭐ |
| 🧠 RAG作为记忆 | RAG结果注入Agent的上下文 | 深度集成 | ⭐⭐⭐ |
💡 推荐方式:RAG作为工具——最灵活,Agent自己决定什么时候需要查知识库。
三、从零构建RAG知识库 🏗️
3.1 知识库构建流程
3.2 完整代码实现
from langchain_community.document_loaders import TextLoader, PyPDFLoader, DirectoryLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_openai import OpenAIEmbeddings, ChatOpenAI
from langchain_community.vectorstores import Chroma
from langchain.tools import tool
import os
# ===== Step 1: 文档加载 =====
def load_documents(docs_dir: str):
"""加载目录下的所有文档"""
loaders = {
"*.txt": DirectoryLoader(docs_dir, glob="*.txt", loader_cls=TextLoader),
"*.pdf": DirectoryLoader(docs_dir, glob="*.pdf", loader_cls=PyPDFLoader),
}
docs = []
for pattern, loader in loaders.items():
try:
docs.extend(loader.load())
except Exception:
pass
return docs
# ===== Step 2: 文本分割 =====
def split_documents(docs, chunk_size=1000, chunk_overlap=200):
"""将文档分割成小块"""
splitter = RecursiveCharacterTextSplitter(
chunk_size=chunk_size, # 每块最大1000字符
chunk_overlap=chunk_overlap, # 块之间重叠200字符
separators=["\n\n", "\n", "。", "!", "?", ".", " "]
)
return splitter.split_documents(docs)
# ===== Step 3: 向量化存储 =====
def create_vectorstore(chunks, persist_dir="./chroma_kb"):
"""创建向量数据库"""
embeddings = OpenAIEmbeddings()
vectorstore = Chroma.from_documents(
documents=chunks,
embedding=embeddings,
persist_directory=persist_dir
)
return vectorstore
# ===== Step 4: 构建知识库工具 =====
class KnowledgeBase:
def __init__(self, docs_dir="./assets/docs"):
self.docs_dir = docs_dir
self.vectorstore = None
self._build()
def _build(self):
"""构建知识库"""
print("📚 正在构建知识库...")
# 加载文档
docs = load_documents(self.docs_dir)
print(f" 📄 加载了 {len(docs)} 个文档")
# 分割
chunks = split_documents(docs)
print(f" ✂️ 分割为 {len(chunks)} 个片段")
# 向量化存储
self.vectorstore = create_vectorstore(chunks)
print(" ✅ 知识库构建完成!")
def search(self, query: str, k: int = 3) -> list:
"""搜索知识库"""
if not self.vectorstore:
return []
results = self.vectorstore.similarity_search(query, k=k)
return [{"content": doc.page_content, "source": doc.metadata.get("source", "unknown")}
for doc in results]
# 初始化知识库
kb = KnowledgeBase()
# ===== Step 5: 封装为Agent工具 =====
@tool
def search_knowledge_base(query: str) -> str:
"""搜索内部知识库获取专业信息。当用户询问公司产品、技术文档、内部规范等问题时使用。
Args:
query: 搜索关键词或问题
"""
results = kb.search(query, k=3)
if not results:
return "知识库中未找到相关信息"
output = []
for i, r in enumerate(results, 1):
output.append(f"📄 [{i}] 来源:{r['source']}")
output.append(f" {r['content'][:300]}...")
output.append("")
return "\n".join(output)
四、RAG+Agent完整系统 🤖
4.1 系统架构
4.2 完整Agent代码
from langchain_openai import ChatOpenAI
from langgraph.prebuilt import create_react_agent
from langgraph.checkpoint.memory import MemorySaver
from langchain.tools import tool
import requests
# 工具1: 知识库搜索
@tool
def search_knowledge_base(query: str) -> str:
"""搜索内部知识库。当用户询问公司产品、文档、规范等内部信息时使用。
Args:
query: 搜索关键词
"""
results = kb.search(query, k=3)
if not results:
return "知识库中未找到相关信息"
output = []
for i, r in enumerate(results, 1):
output.append(f"[{i}] {r['content'][:300]}... (来源:{r['source']})")
return "\n".join(output)
# 工具2: 网络搜索
@tool
def web_search(query: str) -> str:
"""搜索互联网获取最新信息。当知识库中没有答案时使用。
Args:
query: 搜索关键词
"""
# 实际项目中接入搜索API
return f"搜索结果:关于'{query}'的最新信息..."
# 工具3: 计算
@tool
def calculator(expression: str) -> str:
"""执行数学计算。
Args:
expression: 数学表达式
"""
try:
result = eval(expression, {"__builtins__": {}}, {})
return f"{expression} = {result}"
except Exception as e:
return f"计算错误:{e}"
# 创建RAG Agent
rag_agent = create_react_agent(
model=ChatOpenAI(model="gpt-4o", temperature=0),
tools=[search_knowledge_base, web_search, calculator],
prompt="""你是一个知识增强型AI助手。
回答问题的优先级:
1. 先搜索内部知识库(search_knowledge_base)—— 公司相关信息
2. 如果知识库没有,搜索互联网(web_search)—— 公开信息
3. 需要计算时使用计算器(calculator)
4. 常识性问题直接回答
回答要求:
- 引用信息来源
- 如果不确定,诚实说明
- 回答要准确、简洁""",
checkpointer=MemorySaver()
)
五、RAG优化技巧 🔧
5.1 文本分割策略对比
| 策略 | 原理 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|---|
| 固定长度 | 每N个字符切一刀 | 简单 | 可能切断句子 | 通用 |
| 按段落 | 按\n\n分割 | 保持语义完整 | 段落大小不一 | 文档 |
| 按句子 | 按句号分割 | 语义最完整 | 可能太短 | 对话记录 |
| 递归分割 | 先按段落→句子→字符 | 平衡 | 稍复杂 | 推荐 |
5.2 Chunk大小优化
| Chunk大小 | 检索精度 | 上下文完整性 | Token成本 | 推荐度 |
|---|---|---|---|---|
| 200字符 | ⭐⭐⭐⭐⭐ | ⭐⭐ | 低 | 精确问答 |
| 500字符 | ⭐⭐⭐⭐ | ⭐⭐⭐ | 中 | 通用推荐 |
| 1000字符 | ⭐⭐⭐ | ⭐⭐⭐⭐ | 高 | 长文档分析 |
| 2000字符 | ⭐⭐ | ⭐⭐⭐⭐⭐ | 很高 | 深度分析 |
5.3 检索优化策略
| 策略 | 效果 | 实现方式 |
|---|---|---|
| 🔍 混合检索 | 准确率↑30% | 向量搜索+关键词搜索结合 |
| 📝 查询改写 | 召回率↑20% | 用LLM改写用户查询 |
| 🔄 重排序 | 精度↑25% | 检索后用Cross-Encoder重排 |
| 📏 多粒度 | 覆盖面↑ | 同时搜索句子级和段落级 |
六、RAG效果评估 📊
6.1 评估指标
| 指标 | 含义 | 目标值 |
|---|---|---|
| 检索准确率 | 检索到的文档是否相关 | > 85% |
| 回答准确率 | 最终回答是否正确 | > 90% |
| 幻觉率 | 编造信息的比例 | < 5% |
| 回答延迟 | 从提问到回答的时间 | < 5秒 |
6.2 常见问题与优化
| 问题 | 原因 | 解决方案 |
|---|---|---|
| 🔴 检索不到相关内容 | Chunk太大或Embedding不好 | 调整chunk大小,换Embedding模型 |
| 🔴 检索到不相关内容 | 查询和文档表述差异大 | 查询改写、混合检索 |
| 🟡 回答不准确 | 检索到了但LLM理解错 | 优化Prompt、加Few-shot |
| 🟡 回答太慢 | 检索+生成耗时 | 缓存、并行检索 |
七、本期小结 📝
| 知识点 | 核心内容 |
|---|---|
| RAG是什么 | 先搜索知识库,再基于搜索结果回答 |
| 为什么RAG+Agent是王炸 | 知识准确 + 会推理 + 会行动 |
| 构建流程 | 文档加载 → 文本分割 → 向量化 → 检索 → 生成 |
| 集成方式 | RAG作为Agent的一个工具(最灵活) |
| 优化方向 | 分割策略、Chunk大小、混合检索、查询改写 |
🔥 RAG+Agent = 知识准确 + 行动力强。 这是2025年企业级AI应用的标配架构。掌握它,你就能为公司构建一个"什么都知道"的智能助手!
📢 下期预告:《ReAct vs Plan-and-Execute vs Tree of Thoughts:三大推理范式深度对比》—— Agent是怎么"思考"的?三种推理范式哪种最强?下期深度对比!🧠
📌 三连走起!RAG+Agent,知识增强型智能体的标配! 💪
📚 专栏第14/24期,记忆与规划篇进行中…
作者:高炉炼铁智能化技术研究者,专注钢铁冶金与人工智能 交叉领域。
👍 如果觉得有帮助,请点赞、收藏、转发!
版权归作者所有,未经许可请勿抄袭,套用,商用(或其它具有利益性行为)。
🔔 关注专栏,不错过后续精彩内容
更多推荐


所有评论(0)