You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

242 lines
9.4 KiB
Python

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
代码示例 02: MemoryTool架构设计
展示MemoryTool和MemoryManager的分层架构
"""
from typing import List, Optional, Dict, Any
from datetime import datetime
from hello_agents.tools import MemoryTool
from hello_agents.memory import MemoryConfig
class MemoryToolArchitectureDemo:
"""MemoryTool架构演示类"""
def __init__(self):
self.memory_config = MemoryConfig()
self.memory_types = ["working", "episodic", "semantic", "perceptual"]
def demonstrate_memory_tool_init(self):
"""演示MemoryTool初始化过程"""
print("🏗️ MemoryTool架构设计演示")
print("=" * 50)
print("📋 MemoryTool初始化过程:")
print("1. 创建MemoryConfig配置对象")
print("2. 指定启用的记忆类型")
print("3. 初始化MemoryManager管理器")
print("4. 根据配置启用不同记忆模块")
# 演示MemoryTool的初始化
memory_tool = MemoryTool(
user_id="architecture_demo_user",
memory_config=self.memory_config,
memory_types=self.memory_types
)
print(f"\n✅ MemoryTool初始化完成")
print(f"👤 用户ID: {self.user_id}")
print(f"🧠 启用的记忆类型: {memory_tool.memory_types}")
print(f"⚙️ 配置对象: {type(memory_tool.memory_config).__name__}")
return memory_tool
def demonstrate_memory_manager_architecture(self, memory_tool):
"""演示MemoryManager的组合模式架构"""
print("\n🔧 MemoryManager架构设计")
print("-" * 40)
print("MemoryManager采用组合模式设计:")
print("- 统一的记忆操作接口")
print("- 独立的记忆类型组件")
print("- 灵活的配置和扩展能力")
# 获取MemoryManager实例
memory_manager = memory_tool.memory_manager
print(f"\n📊 MemoryManager状态:")
print(f"用户ID: {memory_manager.user_id}")
print(f"配置类型: {type(memory_manager.config).__name__}")
print(f"记忆类型数量: {len(memory_manager.memory_types)}")
# 显示各记忆类型的状态
print(f"\n🧠 记忆类型组件:")
for memory_type, memory_instance in memory_manager.memory_types.items():
print(f"{memory_type}: {type(memory_instance).__name__}")
def demonstrate_memory_types_specialization(self, memory_tool):
"""演示四种记忆类型的专业化特点"""
print("\n🎯 四种记忆类型的专业化设计")
print("-" * 40)
memory_types_info = {
"working": {
"name": "工作记忆",
"features": ["容量有限", "访问速度快", "自动清理", "临时存储"],
"storage": "纯内存存储",
"ttl": "60分钟TTL机制"
},
"episodic": {
"name": "情景记忆",
"features": ["事件序列", "时间序列", "上下文丰富", "会话关联"],
"storage": "SQLite + Qdrant混合存储",
"ttl": "持久化存储"
},
"semantic": {
"name": "语义记忆",
"features": ["概念知识", "实体关系", "知识图谱", "语义推理"],
"storage": "Neo4j + Qdrant混合存储",
"ttl": "长期存储"
},
"perceptual": {
"name": "感知记忆",
"features": ["多模态", "跨模态检索", "感知数据", "内容生成"],
"storage": "分模态向量存储",
"ttl": "按重要性管理"
}
}
for memory_type, info in memory_types_info.items():
print(f"\n📚 {info['name']} ({memory_type}):")
print(f" 特点: {', '.join(info['features'])}")
print(f" 存储: {info['storage']}")
print(f" 生命周期: {info['ttl']}")
# 添加示例记忆来演示特点
if memory_type == "working":
memory_tool.execute("add",
content=f"演示{info['name']}的临时存储特性",
memory_type=memory_type,
importance=0.6,
demo_feature="temporary_storage"
)
elif memory_type == "episodic":
memory_tool.execute("add",
content=f"演示{info['name']}的事件记录特性",
memory_type=memory_type,
importance=0.7,
event_type="demonstration",
session_context="architecture_demo"
)
elif memory_type == "semantic":
memory_tool.execute("add",
content=f"{info['name']}用于存储概念性知识和实体关系",
memory_type=memory_type,
importance=0.8,
concept="memory_architecture",
domain="cognitive_computing"
)
elif memory_type == "perceptual":
memory_tool.execute("add",
content=f"演示{info['name']}的多模态数据处理",
memory_type=memory_type,
importance=0.6,
modality="text",
data_type="demonstration"
)
def demonstrate_unified_interface(self, memory_tool):
"""演示统一接口的设计优势"""
print("\n🔗 统一接口设计优势")
print("-" * 40)
print("统一的execute方法提供:")
print("• 一致的调用方式")
print("• 灵活的参数传递")
print("• 统一的错误处理")
print("• 简化的用户体验")
# 演示统一接口的使用
operations = [
("search", {"query": "演示", "limit": 2}),
("summary", {"limit": 3}),
("stats", {}),
]
print(f"\n🔧 统一接口操作演示:")
for operation, params in operations:
print(f"\n操作: {operation}")
print(f"参数: {params}")
result = memory_tool.execute(operation, **params)
print(f"结果: {result[:100]}..." if len(str(result)) > 100 else f"结果: {result}")
def demonstrate_extensibility(self):
"""演示系统的扩展性设计"""
print("\n🚀 系统扩展性设计")
print("-" * 40)
print("扩展性特点:")
print("• 插件化的记忆类型")
print("• 可配置的存储后端")
print("• 灵活的记忆策略")
print("• 模块化的组件设计")
# 演示自定义配置
custom_config = MemoryConfig()
custom_config.working_memory_capacity = 100
custom_config.working_memory_ttl = 120
print(f"\n⚙️ 自定义配置示例:")
print(f"工作记忆容量: {custom_config.working_memory_capacity}")
print(f"工作记忆TTL: {custom_config.working_memory_ttl}分钟")
# 演示选择性启用记忆类型
selective_memory_tool = MemoryTool(
user_id="selective_user",
memory_config=custom_config,
memory_types=["working", "semantic"] # 只启用部分类型
)
print(f"\n🎯 选择性启用示例:")
print(f"启用的记忆类型: {selective_memory_tool.memory_types}")
print("✅ 系统支持根据需求灵活配置")
def main():
"""主函数"""
print("🏗️ MemoryTool架构设计完整演示")
print("展示记忆系统的分层架构和设计模式")
print("=" * 60)
try:
demo = MemoryToolArchitectureDemo()
# 1. MemoryTool初始化演示
memory_tool = demo.demonstrate_memory_tool_init()
# 2. MemoryManager架构演示
demo.demonstrate_memory_manager_architecture(memory_tool)
# 3. 记忆类型专业化演示
demo.demonstrate_memory_types_specialization(memory_tool)
# 4. 统一接口演示
demo.demonstrate_unified_interface(memory_tool)
# 5. 扩展性演示
demo.demonstrate_extensibility()
print("\n" + "=" * 60)
print("🎉 MemoryTool架构演示完成")
print("=" * 60)
print("\n✨ 架构设计亮点:")
print("1. 🏗️ 分层架构 - 关注点分离,职责清晰")
print("2. 🔧 组合模式 - 灵活组合,独立管理")
print("3. 🎯 专业化设计 - 各记忆类型特点鲜明")
print("4. 🔗 统一接口 - 简化使用,一致体验")
print("5. 🚀 高扩展性 - 插件化设计,灵活配置")
print("\n🎯 设计原则:")
print("• 单一职责原则 - 每个组件专注特定功能")
print("• 开闭原则 - 对扩展开放,对修改封闭")
print("• 依赖倒置原则 - 依赖抽象,不依赖具体")
print("• 组合优于继承 - 灵活组合,避免复杂继承")
except Exception as e:
print(f"\n❌ 演示过程中发生错误: {e}")
import traceback
traceback.print_exc()
if __name__ == "__main__":
main()