08_Agent_Tool_Integration.py 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. """
  4. 代码示例 08: Agent工具集成
  5. 展示如何在HelloAgents框架中集成MemoryTool和RAGTool
  6. """
  7. from dotenv import load_dotenv
  8. load_dotenv()
  9. import time
  10. from hello_agents import SimpleAgent, HelloAgentsLLM, ToolRegistry
  11. from hello_agents.tools import MemoryTool, RAGTool
  12. class AgentIntegrationDemo:
  13. """Agent工具集成演示类"""
  14. def __init__(self):
  15. self.setup_agent()
  16. def setup_agent(self):
  17. """设置Agent和工具"""
  18. print("🤖 Agent工具集成设置")
  19. print("=" * 50)
  20. # 初始化工具
  21. print("1. 初始化工具...")
  22. self.memory_tool = MemoryTool(
  23. user_id="agent_integration_user",
  24. memory_types=["working", "episodic", "semantic", "perceptual"]
  25. )
  26. self.rag_tool = RAGTool(
  27. knowledge_base_path="./agent_integration_kb",
  28. rag_namespace="agent_demo"
  29. )
  30. print("✅ MemoryTool和RAGTool初始化完成")
  31. # 创建Agent
  32. print("\n2. 创建Agent...")
  33. self.llm = HelloAgentsLLM()
  34. self.agent = SimpleAgent(
  35. name="智能学习助手",
  36. llm=self.llm,
  37. system_prompt="集成记忆和RAG功能的智能助手"
  38. )
  39. print("✅ Agent创建完成")
  40. # 注册工具
  41. print("\n3. 注册工具...")
  42. self.tool_registry = ToolRegistry()
  43. self.tool_registry.register_tool(self.memory_tool)
  44. self.tool_registry.register_tool(self.rag_tool)
  45. self.agent.tool_registry = self.tool_registry
  46. print("✅ 工具注册完成")
  47. # 显示Agent状态
  48. print(f"\n📊 Agent状态:")
  49. print(f" 名称: {self.agent.name}")
  50. print(f" 描述: {self.agent.system_prompt}")
  51. print(f" 可用工具: {list(self.tool_registry._tools.keys())}")
  52. def demonstrate_tool_registry_pattern(self):
  53. """演示工具注册模式"""
  54. print("\n🔧 工具注册模式演示")
  55. print("-" * 50)
  56. print("工具注册模式特点:")
  57. print("• 🔌 统一的工具接口")
  58. print("• 📋 集中的工具管理")
  59. print("• 🔄 动态工具加载")
  60. print("• 🎯 工具能力发现")
  61. # 演示工具注册过程
  62. print(f"\n🔧 工具注册详情:")
  63. for tool_name, tool_instance in self.tool_registry._tools.items():
  64. print(f"\n工具: {tool_name}")
  65. print(f" 类型: {type(tool_instance).__name__}")
  66. print(f" 描述: {tool_instance.description}")
  67. # 显示工具的主要功能
  68. if tool_name == "memory":
  69. print(f" 主要功能: 记忆管理、搜索、整合、遗忘")
  70. print(f" 记忆类型: {tool_instance.memory_types}")
  71. elif tool_name == "rag":
  72. print(f" 主要功能: 文档处理、智能问答、知识检索")
  73. print(f" 命名空间: {tool_instance.rag_namespace}")
  74. # 演示工具发现机制
  75. print(f"\n🔍 工具能力发现:")
  76. available_tools = self.tool_registry.list_tools()
  77. print(f"可用工具列表: {available_tools}")
  78. # 演示工具获取
  79. memory_tool = self.tool_registry.get_tool("memory")
  80. rag_tool = self.tool_registry.get_tool("rag")
  81. print(f"\n✅ 工具获取成功:")
  82. print(f" Memory工具: {type(memory_tool).__name__}")
  83. print(f" RAG工具: {type(rag_tool).__name__}")
  84. def demonstrate_unified_interface(self):
  85. """演示统一接口模式"""
  86. print("\n🔗 统一接口模式演示")
  87. print("-" * 50)
  88. print("统一接口优势:")
  89. print("• 🎯 一致的调用方式")
  90. print("• 📝 标准化的参数传递")
  91. print("• 🛡️ 统一的错误处理")
  92. print("• 🔄 简化的工具切换")
  93. # 演示统一的run接口
  94. print(f"\n🔗 统一run接口演示:")
  95. # Memory工具操作
  96. print(f"\n1. Memory工具操作:")
  97. memory_operations = [
  98. ("add", {
  99. "content": "学习了Agent工具集成模式",
  100. "memory_type": "episodic",
  101. "importance": 0.8,
  102. "topic": "agent_integration"
  103. }),
  104. ("search", {
  105. "query": "Agent集成",
  106. "limit": 2
  107. }),
  108. ("stats", {})
  109. ]
  110. for operation, params in memory_operations:
  111. print(f" 操作: memory.run('{operation}', {params})")
  112. result = self.memory_tool.run({"action":operation, **params})
  113. print(f" 结果: {str(result)[:100]}...")
  114. # RAG工具操作
  115. print(f"\n2. RAG工具操作:")
  116. # 先添加一些内容
  117. self.rag_tool.run({"action":"add_text",
  118. "text":"Agent工具集成是HelloAgents框架的核心特性,允许Agent使用多种工具来完成复杂任务。",
  119. "document_id":"agent_integration_guide"})
  120. rag_operations = [
  121. ("search", {
  122. "query": "Agent工具集成",
  123. "limit": 2
  124. }),
  125. ("ask", {
  126. "question": "什么是Agent工具集成?",
  127. "limit": 2
  128. }),
  129. ("stats", {})
  130. ]
  131. for operation, params in rag_operations:
  132. print(f" 操作: rag.run('{operation}', {params})")
  133. result = self.rag_tool.run({"action":operation, **params})
  134. print(f" 结果: {str(result)[:100]}...")
  135. def demonstrate_collaborative_workflow(self):
  136. """演示协同工作流程"""
  137. print("\n🤝 协同工作流程演示")
  138. print("-" * 50)
  139. print("协同工作场景:")
  140. print("• 📚 学习新知识 → RAG存储 + Memory记录")
  141. print("• 🔍 回顾学习历程 → Memory检索 + RAG补充")
  142. print("• 💡 知识应用 → RAG查询 + Memory更新")
  143. print("• 📊 学习分析 → 两工具统计整合")
  144. # 场景1:学习新知识
  145. print(f"\n📚 场景1:学习新知识")
  146. # 向RAG添加学习资料
  147. learning_content = """# 设计模式:观察者模式
  148. ## 定义
  149. 观察者模式定义了对象间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖它的对象都会得到通知并自动更新。
  150. ## 结构
  151. - Subject(主题):维护观察者列表,提供注册和删除观察者的方法
  152. - Observer(观察者):定义更新接口
  153. - ConcreteSubject(具体主题):实现主题接口
  154. - ConcreteObserver(具体观察者):实现观察者接口
  155. ## 应用场景
  156. - GUI事件处理
  157. - 模型-视图架构
  158. - 发布-订阅系统
  159. """
  160. rag_result = self.rag_tool.run({"action":"add_text",
  161. "text":learning_content,
  162. "document_id":"observer_pattern"})
  163. print(f"RAG添加结果: {rag_result}")
  164. # 记录学习活动到记忆系统
  165. memory_result = self.memory_tool.run({"action":"add",
  166. "content":"学习了观察者设计模式的定义、结构和应用场景",
  167. "memory_type":"episodic",
  168. "importance":0.8,
  169. "topic":"design_patterns",
  170. "pattern_type":"observer"})
  171. print(f"Memory记录结果: {memory_result}")
  172. # 场景2:回顾学习历程
  173. print(f"\n🔍 场景2:回顾学习历程")
  174. # 从记忆系统检索学习历史
  175. memory_search = self.memory_tool.run({"action":"search",
  176. "query":"设计模式学习",
  177. "limit":3})
  178. print(f"学习历史回顾: {memory_search}")
  179. # 从RAG获取相关知识补充
  180. rag_search = self.rag_tool.run({"action":"search",
  181. "query":"观察者模式",
  182. "limit":2})
  183. print(f"知识内容补充: {rag_search}")
  184. # 场景3:知识应用
  185. print(f"\n💡 场景3:知识应用")
  186. # 通过RAG查询应用方法
  187. application_query = self.rag_tool.run({"action":"ask",
  188. "question":"观察者模式适用于什么场景?",
  189. "limit":2})
  190. print(f"应用场景查询: {application_query}")
  191. # 记录应用实践到记忆
  192. application_memory = self.memory_tool.run({"action":"add",
  193. "content":"查询了观察者模式的应用场景,准备在GUI项目中使用",
  194. "memory_type":"working",
  195. "importance":0.7,
  196. "application_context":"gui_project"})
  197. print(f"应用记录: {application_memory}")
  198. # 场景4:学习分析
  199. print(f"\n📊 场景4:学习分析")
  200. # 获取记忆系统统计
  201. memory_stats = self.memory_tool.run({"action":"stats"})
  202. print(f"记忆统计: {memory_stats}")
  203. # 获取RAG系统统计
  204. rag_stats = self.rag_tool.run({"action":"stats"})
  205. print(f"知识库统计: {rag_stats}")
  206. # 生成学习摘要
  207. learning_summary = self.memory_tool.run({"action":"summary", "limit":5})
  208. print(f"学习摘要: {learning_summary}")
  209. def demonstrate_agent_orchestration(self):
  210. """演示Agent编排能力"""
  211. print("\n🎭 Agent编排能力演示")
  212. print("-" * 50)
  213. print("Agent编排特点:")
  214. print("• 🧠 智能工具选择")
  215. print("• 🔄 工具链式调用")
  216. print("• 📊 结果整合分析")
  217. print("• 🎯 目标导向执行")
  218. # 模拟复杂任务的工具编排
  219. print(f"\n🎭 复杂任务编排示例:")
  220. print(f"任务: 创建一个关于机器学习的学习计划")
  221. # 步骤1:从RAG获取机器学习知识结构
  222. print(f"\n步骤1: 获取知识结构")
  223. # 添加机器学习知识
  224. ml_content = """# 机器学习学习路径
  225. ## 基础阶段
  226. 1. 数学基础:线性代数、概率统计、微积分
  227. 2. 编程基础:Python、NumPy、Pandas
  228. 3. 机器学习概念:监督学习、无监督学习、强化学习
  229. ## 进阶阶段
  230. 1. 算法实现:从零实现经典算法
  231. 2. 深度学习:神经网络、CNN、RNN、Transformer
  232. 3. 实践项目:端到端机器学习项目
  233. ## 高级阶段
  234. 1. 模型优化:超参数调优、模型压缩
  235. 2. 部署运维:模型部署、监控、更新
  236. 3. 前沿技术:最新论文、开源项目
  237. """
  238. self.rag_tool.run({"action":"add_text",
  239. "text":ml_content,
  240. "document_id":"ml_learning_path"})
  241. knowledge_structure = self.rag_tool.run({"action":"ask",
  242. "question":"机器学习的学习路径是什么?",
  243. "limit":3})
  244. print(f"知识结构: {knowledge_structure[:200]}...")
  245. # 步骤2:记录学习计划到记忆系统
  246. print(f"\n步骤2: 记录学习计划")
  247. plan_memory = self.memory_tool.run({"action":"add",
  248. "content":"制定了机器学习学习计划,包括基础、进阶、高级三个阶段",
  249. "memory_type":"episodic",
  250. "importance":0.9,
  251. "plan_type":"learning",
  252. "subject":"machine_learning"})
  253. print(f"计划记录: {plan_memory}")
  254. # 步骤3:检索相关学习经验
  255. print(f"\n步骤3: 检索学习经验")
  256. experience_search = self.memory_tool.run({"action":"search",
  257. "query":"学习计划 学习经验",
  258. "limit":3})
  259. print(f"相关经验: {experience_search}")
  260. # 步骤4:整合生成最终建议
  261. print(f"\n步骤4: 生成最终建议")
  262. final_advice = self.rag_tool.run({"action":"ask",
  263. "question":"如何制定有效的机器学习学习计划?",
  264. "limit":4})
  265. print(f"最终建议: {final_advice[:300]}...")
  266. # 记录编排过程
  267. orchestration_memory = self.memory_tool.run({"action":"add",
  268. "content":"完成了复杂的学习计划制定任务,使用了RAG和Memory的协同编排",
  269. "memory_type":"working",
  270. "importance":0.8,
  271. "task_type":"orchestration"})
  272. print(f"\n编排记录: {orchestration_memory}")
  273. def demonstrate_performance_analysis(self):
  274. """演示性能分析"""
  275. print("\n📊 性能分析演示")
  276. print("-" * 50)
  277. print("性能分析指标:")
  278. print("• ⏱️ 工具响应时间")
  279. print("• 🔄 工具切换开销")
  280. print("• 💾 内存使用情况")
  281. print("• 🎯 任务完成效率")
  282. # 性能测试
  283. print(f"\n📊 性能测试:")
  284. # 单工具性能测试
  285. print(f"\n1. 单工具性能:")
  286. # Memory工具性能
  287. start_time = time.time()
  288. for i in range(5):
  289. self.memory_tool.run({"action":"add",
  290. "content":f"性能测试记忆 {i+1}",
  291. "memory_type":"working",
  292. "importance":0.5})
  293. memory_time = time.time() - start_time
  294. print(f"Memory工具 - 5次添加操作: {memory_time:.3f}秒")
  295. # RAG工具性能
  296. start_time = time.time()
  297. for i in range(3):
  298. self.rag_tool.run({"action":"search",
  299. "query":f"测试查询 {i+1}",
  300. "limit":2})
  301. rag_time = time.time() - start_time
  302. print(f"RAG工具 - 3次搜索操作: {rag_time:.3f}秒")
  303. # 协同工作性能测试
  304. print(f"\n2. 协同工作性能:")
  305. start_time = time.time()
  306. # 模拟协同工作流程
  307. self.rag_tool.run({"action":"add_text",
  308. "text":"这是一个性能测试文档",
  309. "document_id":"perf_test"})
  310. self.memory_tool.run({"action":"add",
  311. "content":"执行了性能测试",
  312. "memory_type":"working",
  313. "importance":0.6})
  314. rag_result = self.rag_tool.run({"action":"search",
  315. "query":"性能测试",
  316. "limit":1})
  317. memory_result = self.memory_tool.run({"action":"search",
  318. "query":"性能测试",
  319. "limit":1})
  320. collaborative_time = time.time() - start_time
  321. print(f"协同工作流程: {collaborative_time:.3f}秒")
  322. # 性能分析总结
  323. print(f"\n📈 性能分析总结:")
  324. print(f"Memory工具平均响应: {memory_time/5:.3f}秒/操作")
  325. print(f"RAG工具平均响应: {rag_time/3:.3f}秒/操作")
  326. print(f"协同工作效率: {collaborative_time:.3f}秒/流程")
  327. # 获取最终统计
  328. final_memory_stats = self.memory_tool.run({"action":"stats"})
  329. final_rag_stats = self.rag_tool.run({"action":"stats"})
  330. print(f"\n📊 最终系统状态:")
  331. print(f"Memory系统: {final_memory_stats}")
  332. print(f"RAG系统: {final_rag_stats}")
  333. def main():
  334. """主函数"""
  335. print("🤖 Agent工具集成演示")
  336. print("展示如何在HelloAgents框架中集成MemoryTool和RAGTool")
  337. print("=" * 70)
  338. try:
  339. demo = AgentIntegrationDemo()
  340. # 1. 工具注册模式演示
  341. demo.demonstrate_tool_registry_pattern()
  342. # 2. 统一接口模式演示
  343. demo.demonstrate_unified_interface()
  344. # 3. 协同工作流程演示
  345. demo.demonstrate_collaborative_workflow()
  346. # 4. Agent编排能力演示
  347. demo.demonstrate_agent_orchestration()
  348. # 5. 性能分析演示
  349. demo.demonstrate_performance_analysis()
  350. print("\n" + "=" * 70)
  351. print("🎉 Agent工具集成演示完成!")
  352. print("=" * 70)
  353. print("\n✨ Agent集成核心特性:")
  354. print("1. 🔧 工具注册模式 - 统一的工具管理和发现")
  355. print("2. 🔗 统一接口设计 - 一致的工具调用方式")
  356. print("3. 🤝 协同工作流程 - 工具间的智能协作")
  357. print("4. 🎭 智能编排能力 - 复杂任务的自动分解")
  358. print("5. 📊 性能监控分析 - 全面的性能评估")
  359. print("\n🎯 设计优势:")
  360. print("• 模块化 - 工具独立开发,灵活组合")
  361. print("• 可扩展 - 支持动态添加新工具")
  362. print("• 高内聚 - 每个工具专注特定功能")
  363. print("• 低耦合 - 工具间依赖关系最小")
  364. print("\n💡 应用价值:")
  365. print("• 智能助手 - 构建多功能智能助手")
  366. print("• 知识管理 - 企业级知识管理系统")
  367. print("• 学习平台 - 个性化学习支持系统")
  368. print("• 决策支持 - 基于知识和经验的决策")
  369. except Exception as e:
  370. print(f"\n❌ 演示过程中发生错误: {e}")
  371. import traceback
  372. traceback.print_exc()
  373. if __name__ == "__main__":
  374. main()