02_MemoryTool_Architecture.py 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. """
  4. 代码示例 02: MemoryTool架构设计
  5. 展示MemoryTool和MemoryManager的分层架构
  6. """
  7. from dotenv import load_dotenv
  8. load_dotenv()
  9. from typing import List, Optional, Dict, Any
  10. from datetime import datetime
  11. from hello_agents.tools import MemoryTool
  12. from hello_agents.memory import MemoryConfig
  13. class MemoryToolArchitectureDemo:
  14. """MemoryTool架构演示类"""
  15. def __init__(self):
  16. self.memory_config = MemoryConfig()
  17. self.memory_types = ["working", "episodic", "semantic", "perceptual"]
  18. def demonstrate_memory_tool_init(self):
  19. """演示MemoryTool初始化过程"""
  20. print("🏗️ MemoryTool架构设计演示")
  21. print("=" * 50)
  22. print("📋 MemoryTool初始化过程:")
  23. print("1. 创建MemoryConfig配置对象")
  24. print("2. 指定启用的记忆类型")
  25. print("3. 初始化MemoryManager管理器")
  26. print("4. 根据配置启用不同记忆模块")
  27. # 演示MemoryTool的初始化
  28. memory_tool = MemoryTool(
  29. user_id="architecture_demo_user",
  30. memory_config=self.memory_config,
  31. memory_types=self.memory_types
  32. )
  33. print(f"\n✅ MemoryTool初始化完成")
  34. print(f"👤 用户ID: {memory_tool.memory_manager.user_id}")
  35. print(f"🧠 启用的记忆类型: {memory_tool.memory_types}")
  36. print(f"⚙️ 配置对象: {type(memory_tool.memory_config).__name__}")
  37. return memory_tool
  38. def demonstrate_memory_manager_architecture(self, memory_tool):
  39. """演示MemoryManager的组合模式架构"""
  40. print("\n🔧 MemoryManager架构设计")
  41. print("-" * 40)
  42. print("MemoryManager采用组合模式设计:")
  43. print("- 统一的记忆操作接口")
  44. print("- 独立的记忆类型组件")
  45. print("- 灵活的配置和扩展能力")
  46. # 获取MemoryManager实例
  47. memory_manager = memory_tool.memory_manager
  48. print(f"\n📊 MemoryManager状态:")
  49. print(f"用户ID: {memory_manager.user_id}")
  50. print(f"配置类型: {type(memory_manager.config).__name__}")
  51. print(f"记忆类型数量: {len(memory_manager.memory_types)}")
  52. # 显示各记忆类型的状态
  53. print(f"\n🧠 记忆类型组件:")
  54. for memory_type, memory_instance in memory_manager.memory_types.items():
  55. print(f" • {memory_type}: {type(memory_instance).__name__}")
  56. def demonstrate_memory_types_specialization(self, memory_tool):
  57. """演示四种记忆类型的专业化特点"""
  58. print("\n🎯 四种记忆类型的专业化设计")
  59. print("-" * 40)
  60. memory_types_info = {
  61. "working": {
  62. "name": "工作记忆",
  63. "features": ["容量有限", "访问速度快", "自动清理", "临时存储"],
  64. "storage": "纯内存存储",
  65. "ttl": "60分钟TTL机制"
  66. },
  67. "episodic": {
  68. "name": "情景记忆",
  69. "features": ["事件序列", "时间序列", "上下文丰富", "会话关联"],
  70. "storage": "SQLite + Qdrant混合存储",
  71. "ttl": "持久化存储"
  72. },
  73. "semantic": {
  74. "name": "语义记忆",
  75. "features": ["概念知识", "实体关系", "知识图谱", "语义推理"],
  76. "storage": "Neo4j + Qdrant混合存储",
  77. "ttl": "长期存储"
  78. },
  79. "perceptual": {
  80. "name": "感知记忆",
  81. "features": ["多模态", "跨模态检索", "感知数据", "内容生成"],
  82. "storage": "分模态向量存储",
  83. "ttl": "按重要性管理"
  84. }
  85. }
  86. for memory_type, info in memory_types_info.items():
  87. print(f"\n📚 {info['name']} ({memory_type}):")
  88. print(f" 特点: {', '.join(info['features'])}")
  89. print(f" 存储: {info['storage']}")
  90. print(f" 生命周期: {info['ttl']}")
  91. # 添加示例记忆来演示特点
  92. if memory_type == "working":
  93. memory_tool.run({
  94. "action":"add",
  95. "content":f"演示{info['name']}的临时存储特性",
  96. "memory_type":memory_type,
  97. "importance":0.6,
  98. "demo_feature":"temporary_storage"
  99. })
  100. elif memory_type == "episodic":
  101. memory_tool.run({
  102. "action":"add",
  103. "content":f"演示{info['name']}的事件记录特性",
  104. "memory_type":memory_type,
  105. "importance":0.7,
  106. "event_type":"demonstration",
  107. "session_context":"architecture_demo"
  108. })
  109. elif memory_type == "semantic":
  110. memory_tool.run({
  111. "action":"add",
  112. "content":f"{info['name']}用于存储概念性知识和实体关系",
  113. "memory_type":memory_type,
  114. "importance":0.8,
  115. "concept":"memory_architecture",
  116. "domain":"cognitive_computing"
  117. })
  118. elif memory_type == "perceptual":
  119. memory_tool.run({
  120. "action":"add",
  121. "content":f"演示{info['name']}的多模态数据处理",
  122. "memory_type":memory_type,
  123. "importance":0.6,
  124. "modality":"text",
  125. "data_type":"demonstration"
  126. })
  127. def demonstrate_unified_interface(self, memory_tool):
  128. """演示统一接口的设计优势"""
  129. print("\n🔗 统一接口设计优势")
  130. print("-" * 40)
  131. print("统一的execute方法提供:")
  132. print("• 一致的调用方式")
  133. print("• 灵活的参数传递")
  134. print("• 统一的错误处理")
  135. print("• 简化的用户体验")
  136. # 演示统一接口的使用
  137. operations = [
  138. ("search", {"query": "演示", "limit": 2}),
  139. ("summary", {"limit": 3}),
  140. ("stats", {}),
  141. ]
  142. print(f"\n🔧 统一接口操作演示:")
  143. for operation, params in operations:
  144. print(f"\n操作: {operation}")
  145. print(f"参数: {params}")
  146. result = memory_tool.run({"action":operation, **params})
  147. print(f"结果: {result[:100]}..." if len(str(result)) > 100 else f"结果: {result}")
  148. def demonstrate_extensibility(self):
  149. """演示系统的扩展性设计"""
  150. print("\n🚀 系统扩展性设计")
  151. print("-" * 40)
  152. print("扩展性特点:")
  153. print("• 插件化的记忆类型")
  154. print("• 可配置的存储后端")
  155. print("• 灵活的记忆策略")
  156. print("• 模块化的组件设计")
  157. # 演示自定义配置
  158. custom_config = MemoryConfig()
  159. custom_config.working_memory_capacity = 100
  160. custom_config.working_memory_ttl_minutes = 120
  161. print(f"\n⚙️ 自定义配置示例:")
  162. print(f"工作记忆容量: {custom_config.working_memory_capacity}")
  163. print(f"工作记忆TTL: {custom_config.working_memory_ttl_minutes}分钟")
  164. # 演示选择性启用记忆类型
  165. selective_memory_tool = MemoryTool(
  166. user_id="selective_user",
  167. memory_config=custom_config,
  168. memory_types=["working", "semantic"] # 只启用部分类型
  169. )
  170. print(f"\n🎯 选择性启用示例:")
  171. print(f"启用的记忆类型: {selective_memory_tool.memory_types}")
  172. print("✅ 系统支持根据需求灵活配置")
  173. def main():
  174. """主函数"""
  175. print("🏗️ MemoryTool架构设计完整演示")
  176. print("展示记忆系统的分层架构和设计模式")
  177. print("=" * 60)
  178. try:
  179. demo = MemoryToolArchitectureDemo()
  180. # 1. MemoryTool初始化演示
  181. memory_tool = demo.demonstrate_memory_tool_init()
  182. # 2. MemoryManager架构演示
  183. demo.demonstrate_memory_manager_architecture(memory_tool)
  184. # 3. 记忆类型专业化演示
  185. demo.demonstrate_memory_types_specialization(memory_tool)
  186. # 4. 统一接口演示
  187. demo.demonstrate_unified_interface(memory_tool)
  188. # 5. 扩展性演示
  189. demo.demonstrate_extensibility()
  190. print("\n" + "=" * 60)
  191. print("🎉 MemoryTool架构演示完成!")
  192. print("=" * 60)
  193. print("\n✨ 架构设计亮点:")
  194. print("1. 🏗️ 分层架构 - 关注点分离,职责清晰")
  195. print("2. 🔧 组合模式 - 灵活组合,独立管理")
  196. print("3. 🎯 专业化设计 - 各记忆类型特点鲜明")
  197. print("4. 🔗 统一接口 - 简化使用,一致体验")
  198. print("5. 🚀 高扩展性 - 插件化设计,灵活配置")
  199. print("\n🎯 设计原则:")
  200. print("• 单一职责原则 - 每个组件专注特定功能")
  201. print("• 开闭原则 - 对扩展开放,对修改封闭")
  202. print("• 依赖倒置原则 - 依赖抽象,不依赖具体")
  203. print("• 组合优于继承 - 灵活组合,避免复杂继承")
  204. except Exception as e:
  205. print(f"\n❌ 演示过程中发生错误: {e}")
  206. import traceback
  207. traceback.print_exc()
  208. if __name__ == "__main__":
  209. main()