简介
本文介绍了如何为AI Agent接入Dify知识库实现RAG功能,区分了Agent的"记忆"与"知识"概念。通过实战演示,展示了创建知识库、编写检索工具及将新技能加入Agent的过程。最终,Agent同时拥有了记忆和知识,成为真正智能的私人助理。文章强调了"万物皆可为工具"的通用赋能方法,是学习大模型应用的实用指南。
我们通过Store机制,成功让Agent拥有了“长期记忆”,它能记住“你是谁”。我们的Agent现在已经非常“人性化”了,它能记住对话(会话记忆)、也能“认识”你(长期记忆)。
但是,它依然“无知”——它不了解你所在领域的专业知识,比如我们公众号写过的所有文章。
👤 你:“你好,张三。”(Agent调用
SaveUserInfo记住了你)🤖 Agent:“你好张三!我记住你啦!”
👤 你:“那么,根据咱们公众号《AI Agent入门 #2》的文章,ReAct框架是什么?”
🤖 Agent:
Thought: 用户在问一个具体文章的内容,我的工具箱里没有工具能回答这个问题... Final Answer: "抱歉,我无法访问你公众号的具体文章内容..."
今天,我们将为Agent进行一次关键的“技能升级”,为它装备一个可以无限扩展的“第二大脑”!我们将接入Dify知识库,让它学会一项全新的、至关重要的技能——“查资料”!
一、【概念篇】“记忆” vs “知识” (RAG)
这是本系列最关键的概念区分,请务必仔细理解:
- Agent的“记忆” (Memory)
- 这是Agent关于交互历史和自身状态的记录。
- 会话记忆 (Short-Term):我们用
ChatMessageHistory实现。它回答:“我们刚才聊了啥?” - 长期记忆 (Long-Term):我们用
Store实现。它回答:“我记得你是谁?”
- Agent的“知识” (Knowledge / RAG)
- 这是Agent关于外部世界的信息。
- 它是通过“工具(Tool)”去获取的,本身不属于Agent的“记忆”,而是Agent的一项“技能”。
- 比喻:查天气(
QueryWeather)是Agent的一项技能。同理,**查知识库(RAG)**也是Agent的一项技能,我们可以叫它QueryKnowledgeBase。
本章的核心:我们不是在为Agent添加“第三种记忆”,而是为它的“工具箱”里,添加一个“图书馆借阅卡”工具,这项新技能的名字,就叫RAG(检索增强生成)。
二、准备“图书馆”:Dify知识库
我们要打造QueryKnowledgeBase这项技能,首先需要一个“图书馆”让它去查。Dify就是我们最好的选择。
部署或注册Dify:确保你的Dify服务正在运行(本地或云端)。
创建知识库:在Dify中,创建一个新知识库(例如
my_agent_knowledge),并上传你希望Agent掌握的文档。(Pro-Tip:强烈建议把我们这个系列的前几篇文章存为.md文件上传进去!)创建应用并获取API密钥:
在Dify中创建一个“聊天助手”类型的应用。
在该应用的“上下文”设置中,关联你刚刚创建的
my_agent_knowledge知识库。在“访问API”页面,找到你的API密钥 (Secret Key)和API基础URL (Base URL)。记下这两个值,它们是Agent使用“图书馆借阅卡”的凭证。
三、【实战篇】打造“知识库检索”工具
现在,让我们回到Python代码。我们将创建一个新的工具文件knowledge_tools.py。
第一步:安装依赖库
我们只需要requests库来调用Dify的HTTP API。
pip install requests第二步:编写“知识库检索”工具代码
这个工具函数的核心,就是调用Dify的/chat-messagesAPI。
# -----------------------------------------------------# 喵喵实战室:Agent知识库工具 (knowledge_tools.py)# -----------------------------------------------------import requestsimport jsonimport os# --- 从环境变量或配置文件中读取你的Dify密钥 ---# 确保在运行前设置好环境变量# export DIFY_API_KEY="your_secret_key"# export DIFY_API_URL="https://api.dify.ai/v1" (Dify云端的地址,本地部署请修改)DIFY_API_KEY = os.environ.get("DIFY_API_KEY")# 注意:这里的URL是Dify API的“聊天”端点DIFY_API_URL = os.environ.get("DIFY_API_URL", "https://api.dify.ai/v1") + "/chat-messages"def query_dify_knowledge_base(query: str) -> str: """ 一个专用于查询“AI喵智能体”公众号内部知识的工具。 当你需要回答关于 "AI Agent"、"Dify"、"Ollama"、"Stable Diffusion" 等我们教程中特定内容的问题时,请使用此工具。 请勿用此工具查询天气、股票或执行代码。 参数: query (str): 用户关于私有知识的具体问题。 返回: str: Dify知识库返回的答案。 """ print(f"--- [工具被调用:query_dify_knowledge_base] ---") print(f"--- [工具入参:query={query}] ---") ifnot DIFY_API_KEY: return"错误:DIFY_API_KEY 未设置。无法查询知识库。" # Dify API的请求头 headers = { 'Authorization': f'Bearer {DIFY_API_KEY}', 'Content-Type': 'application/json', } # Dify API的请求体 # "conversation_id" 确保Dify内部也能管理上下文 # "query" 是用户的提问 # "user" 是一个唯一的用户标识 body = { "inputs": {}, "query": query, "response_mode": "blocking", # 我们需要一个同步的答案,而不是流式 "conversation_id": "", "user": "my_agent_system" } try: response = requests.post(DIFY_API_URL, headers=headers, data=json.dumps(body)) response.raise_for_status() # 如果请求失败则抛出异常 response_json = response.json() # 解析Dify返回的答案 answer = response_json.get("answer", "未在知识库中找到明确答案。") print(f"--- [工具返回值:{answer[:100]}...] ---") return answer except requests.exceptions.RequestException as e: error_message = f"错误:连接Dify知识库失败 - {e}" print(f"--- [工具异常:{error_message}] ---") return error_message except Exception as e: error_message = f"错误:解析Dify响应时发生异常 - {e}" print(f"--- [工具异常:{error_message}] ---") return error_message# --- 本地测试 ---if __name__ == "__main__": ifnot DIFY_API_KEY: print("请先设置 DIFY_API_KEY 和 DIFY_API_URL 环境变量!") else: # 假设你的知识库里有关于ReAct的文章 test_query = "ReAct是什么?" answer = query_dify_knowledge_base(test_query) print(f"\n测试提问:{test_query}") print(f"知识库回答:{answer}")执行结果:
[代码讲解]:
- 极其重要的Docstring:我们明确告诉Agent什么时候该用(问公众号教程时),什么时候不该用(查天气时)这个工具。这是Agent能正确“规划”的关键!
- API调用:我们严格按照Dify的API文档,构造了
headers和body。 - 同步响应:我们设置了
"response_mode": "blocking",因为Agent的ReAct循环需要一个同步、阻塞的工具。它必须拿到这个工具的Observation(观察结果),才能进行下一步Thought(思考)。
四、【终极组装】将“知识库技能”加入Agent
现在,我们再次回到main_with_ltm.py(上一期的主文件),把这个新工具“插”进去。
# ... (导入所有上一期的库) ...from langchain_core.messages import HumanMessage, AIMessagefrom langchain_core.chat_history import ChatMessageHistoryfrom langgraph.store.memory import InMemoryStorefrom dataclasses import dataclassfrom typing_extensions import TypedDict# !!!!!!!!!!!!!!!!!!!!# 步骤1:导入我们的新工具# !!!!!!!!!!!!!!!!!!!!from agent_tools import ( get_realtime_weather, get_stock_realtime_price, read_file, write_file, execute_python_code)# 导入上一期的LTM工具 (假设你已将其保存为 ltm_tools.py)from ltm_tools import save_user_info, get_user_info # 导入本期的RAG工具from knowledge_tools import query_dify_knowledge_base # <-- 新增导入# ... (初始化 LLM、Store、定义AgentContext、UserInfo 等代码与上期相同) ...# -----------------------------------------------------# 步骤2:将“知识库工具”加入工具列表# -----------------------------------------------------print("[4/6] 正在封装所有工具 '双手' (新增RAG技能)...")tools = [ # Web工具 Tool(name="QueryWeather", func=get_realtime_weather, description="..."), Tool(name="QueryStockPrice", func=get_stock_realtime_price, description="..."), # 本地工具 Tool(name="ReadFile", func=read_file, description="..."), Tool(name="WriteFile", func=write_file, description="..."), Tool(name="ExecutePythonCode", func=execute_python_code, description="..."), # 长期记忆(LTM)工具 Tool(name="SaveUserInfo", func=save_user_info, description="..."), Tool(name="GetUserInfo", func=get_user_info, description="..."), # !!!!!!!!!!!!!!!!!!!! # <-- 新增知识库(RAG)工具 --> # !!!!!!!!!!!!!!!!!!!! Tool( name="QueryKnowledgeBase", func=query_dify_knowledge_base, description="""一个专用于查询“AI喵智能体”公众号内部知识的工具。 当你需要回答关于 'AI Agent'、'Dify'、'Ollama'、'Stable Diffusion' 等我们教程中特定内容的问题时,请使用此工具。 请勿用此工具查询天气、股票或执行代码。""" )]# ... (后续的 Prompt 模板、Agent组装、对话循环代码与上一期完全相同) ...# ... (你只需要修改 tools 列表,其他一切照旧!) ...[代码讲解]: 看!这就是我们Agent框架的魔力!我们不需要修改任何主逻辑,只需要:
import新工具。- 在
tools列表中添加一个新的Tool对象。
Agent的“大脑”会自动通过读取description,学会“哦,我多了一项新技能,是用来查私有知识的”。
后台留言“实战”获取完整源码!
五、见证奇迹:会“查资料”的Agent
现在,运行你最新的main.py脚本。让我们来一次“跨记忆、跨技能”的终极测试!
第一次对话 (测试长期记忆):
👤 你:你好,我叫张三。
🤖 Agent:``你好,张三!很高兴认识你。有什么我可以帮助你的吗?
第二次对话 (测试知识库/RAG技能):
👤 你:根据咱们公众号的教程,ReAct是什么?
🤖 Agent:``ReAct是一种框架,其核心在于通过建立结构化的工作流,让AI能够主动且智能地调用工具,从而弥补自身能力的不足。它的关键作用是推动AI在执行任务时“把话说清楚,把事做扎实”,通过协调“大脑”(LLM)与“双手”(工具)的协作,提升解决问题的效率与准确性。
第三次对话 (测试混合记忆 + 多技能调用):
👤 你:根据咱们公众号的教程,ReAct是什么?,总结一下,然后帮我查查上海的天气,最后把这两样东西都写入一个文件,文件名就叫 ‘我的学习笔记.txt’。
🤖 Agent:``搞定!我已经将ReAct框架的核心总结和上海的天气,全部写入了 '我的学习笔记.txt' 文件中。
成功了!我们的Agent现在同时拥有了完整的“记忆”和“知识”!它成为了一个真正智能的、能干活的私人助理!
总结与预告
今天,我们为Agent装备了一项至关重要的新技能:知识库检索(RAG)。我们彻底厘清了“记忆(状态)”与“知识(技能)”的边界。
我们的Agent现在:
- 能思考(ReAct)
- 有记忆(会话记忆 + 长期记忆/Store)
- 有技能(天气、股票、文件、代码、知识库)
更重要的是,我们掌握了为Agent“赋能”的通用方法:**万物皆可为工具。 今天我们接入了Dify知识库,未来你完全可以用同样的方式**,为它接入send_email(发送邮件)、control_smart_light(控制智能家居)、post_wechat_message(发送企业微信)等任何你能想到的API或SDK。
Agent的能力边界,就是你工具箱的边界!
从理论和功能上讲,它已经是一个完全体的Agent了。
六、如何学习AI大模型?
我在一线互联网企业工作十余年里,指导过不少同行后辈,帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
这份完整版的大模型 AI 学习和面试资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】
第一阶段:从大模型系统设计入手,讲解大模型的主要方法;
第二阶段:在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;
第三阶段:大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;
第四阶段:大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;
第五阶段:大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;
第六阶段:以SD多模态大模型为主,搭建了文生图小程序案例;
第七阶段:以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。
👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;
• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;
• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;
• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。
1.AI大模型学习路线图
2.100套AI大模型商业化落地方案
3.100集大模型视频教程
4.200本大模型PDF书籍
5.LLM面试题合集
6.AI产品经理资源合集
👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓