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.
hello-agents/code/chapter8/06_Memory_Consolidation_Dem...

382 lines
15 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 -*-
"""
代码示例 06: 记忆整合机制演示
展示从短期记忆到长期记忆的智能转化过程
"""
import time
from datetime import datetime, timedelta
from hello_agents.tools import MemoryTool
class MemoryConsolidationDemo:
"""记忆整合演示类"""
def __init__(self):
self.memory_tool = MemoryTool(
user_id="consolidation_demo_user",
memory_types=["working", "episodic", "semantic", "perceptual"]
)
def setup_initial_memories(self):
"""设置初始记忆数据"""
print("📝 设置初始记忆数据")
print("=" * 50)
# 添加不同重要性的工作记忆
working_memories = [
{
"content": "学习了Transformer架构的基本原理",
"importance": 0.9,
"topic": "deep_learning",
"session": "study_session_1"
},
{
"content": "完成了Python代码调试任务",
"importance": 0.8,
"topic": "programming",
"task_type": "debugging"
},
{
"content": "参加了团队会议讨论项目进展",
"importance": 0.7,
"topic": "teamwork",
"meeting_type": "progress_review"
},
{
"content": "查看了今天的天气预报",
"importance": 0.3,
"topic": "daily_life",
"category": "routine"
},
{
"content": "阅读了关于注意力机制的论文",
"importance": 0.85,
"topic": "research",
"paper_type": "technical"
},
{
"content": "喝了一杯咖啡",
"importance": 0.2,
"topic": "daily_life",
"category": "routine"
},
{
"content": "解决了一个复杂的算法问题",
"importance": 0.9,
"topic": "problem_solving",
"difficulty": "high"
},
{
"content": "整理了桌面文件",
"importance": 0.4,
"topic": "organization",
"category": "maintenance"
}
]
print("添加工作记忆:")
for i, memory in enumerate(working_memories):
content = memory.pop("content")
importance = memory.pop("importance")
result = self.memory_tool.execute("add",
content=content,
memory_type="working",
importance=importance,
**memory)
print(f" {i+1}. {content[:40]}... (重要性: {importance})")
print(f"\n✅ 已添加 {len(working_memories)} 条工作记忆")
# 显示当前状态
stats = self.memory_tool.execute("stats")
print(f"\n📊 当前记忆统计:\n{stats}")
def demonstrate_consolidation_criteria(self):
"""演示整合标准和筛选过程"""
print("\n🎯 记忆整合标准演示")
print("-" * 50)
print("整合标准:")
print("• 重要性阈值筛选")
print("• 按重要性排序")
print("• 类型转换处理")
print("• 元数据更新")
# 获取当前工作记忆摘要
print("\n📋 整合前的工作记忆状态:")
summary = self.memory_tool.execute("summary", limit=10)
print(summary)
# 测试不同阈值的整合效果
thresholds = [0.5, 0.7, 0.8]
for threshold in thresholds:
print(f"\n🔍 测试重要性阈值 {threshold}:")
# 模拟整合过程(不实际执行,只是分析)
working_memories = []
# 这里应该从实际的工作记忆中获取,简化演示
print(f" 阈值 {threshold} 下符合整合条件的记忆:")
print(f" • 重要性 >= {threshold} 的记忆将被整合")
print(f" • 整合后类型: working → episodic")
print(f" • 重要性提升: importance × 1.1")
def demonstrate_consolidation_process(self):
"""演示实际的整合过程"""
print("\n🔄 记忆整合过程演示")
print("-" * 50)
print("整合过程步骤:")
print("1. 筛选符合条件的记忆")
print("2. 按重要性排序")
print("3. 创建新的记忆项")
print("4. 更新类型和元数据")
print("5. 添加整合标记")
# 执行不同阈值的整合
consolidation_tests = [
(0.6, "低阈值整合 - 整合更多记忆"),
(0.8, "高阈值整合 - 只整合最重要的记忆")
]
for threshold, description in consolidation_tests:
print(f"\n🔄 {description} (阈值: {threshold}):")
# 获取整合前状态
stats_before = self.memory_tool.execute("stats")
print(f"整合前状态: {stats_before}")
# 执行整合
start_time = time.time()
consolidation_result = self.memory_tool.execute("consolidate",
from_type="working",
to_type="episodic",
importance_threshold=threshold)
consolidation_time = time.time() - start_time
print(f"整合结果: {consolidation_result}")
print(f"整合耗时: {consolidation_time:.3f}")
# 获取整合后状态
stats_after = self.memory_tool.execute("stats")
print(f"整合后状态: {stats_after}")
# 查看整合后的情景记忆
print(f"\n📚 整合后的情景记忆:")
episodic_search = self.memory_tool.execute("search",
query="",
memory_type="episodic",
limit=5)
print(episodic_search)
def demonstrate_consolidation_metadata(self):
"""演示整合过程中的元数据处理"""
print("\n📋 整合元数据处理演示")
print("-" * 50)
print("元数据处理:")
print("• 保留原始元数据")
print("• 添加整合标记")
print("• 记录整合时间")
print("• 保存原始ID引用")
# 添加一个特殊的工作记忆用于演示
special_memory_result = self.memory_tool.execute("add",
content="这是一个用于演示整合元数据处理的特殊记忆",
memory_type="working",
importance=0.85,
special_tag="metadata_demo",
original_context="demonstration",
creation_purpose="show_consolidation_metadata"
)
print(f"添加特殊记忆: {special_memory_result}")
# 执行整合
print(f"\n🔄 执行整合...")
consolidation_result = self.memory_tool.execute("consolidate",
from_type="working",
to_type="episodic",
importance_threshold=0.8)
print(f"整合结果: {consolidation_result}")
# 搜索整合后的记忆查看元数据
print(f"\n🔍 查看整合后的记忆元数据:")
search_result = self.memory_tool.execute("search",
query="特殊记忆",
memory_type="episodic",
limit=1)
print(search_result)
def demonstrate_multi_type_consolidation(self):
"""演示多类型记忆整合"""
print("\n🔀 多类型记忆整合演示")
print("-" * 50)
print("多类型整合场景:")
print("• working → episodic (经历记录)")
print("• working → semantic (知识提取)")
print("• episodic → semantic (经验总结)")
# 添加一些适合不同整合路径的记忆
consolidation_candidates = [
{
"content": "学习了深度学习中的反向传播算法原理",
"memory_type": "working",
"importance": 0.9,
"learning_type": "concept",
"suitable_for": "semantic"
},
{
"content": "今天下午参加了AI技术分享会",
"memory_type": "working",
"importance": 0.8,
"event_type": "meeting",
"suitable_for": "episodic"
},
{
"content": "通过多次实践掌握了Transformer的实现技巧",
"memory_type": "episodic",
"importance": 0.85,
"experience_type": "skill",
"suitable_for": "semantic"
}
]
print(f"\n📝 添加整合候选记忆:")
for memory in consolidation_candidates:
content = memory.pop("content")
memory_type = memory.pop("memory_type")
importance = memory.pop("importance")
suitable_for = memory.pop("suitable_for")
result = self.memory_tool.execute("add",
content=content,
memory_type=memory_type,
importance=importance,
**memory)
print(f"{content[:50]}... → 适合整合为{suitable_for}")
# 执行不同类型的整合
consolidation_paths = [
("working", "episodic", 0.75, "经历记录整合"),
("working", "semantic", 0.85, "知识提取整合"),
("episodic", "semantic", 0.8, "经验总结整合")
]
for from_type, to_type, threshold, description in consolidation_paths:
print(f"\n🔄 {description} ({from_type}{to_type}):")
result = self.memory_tool.execute("consolidate",
from_type=from_type,
to_type=to_type,
importance_threshold=threshold)
print(f"整合结果: {result}")
def demonstrate_consolidation_benefits(self):
"""演示记忆整合的益处"""
print("\n✨ 记忆整合益处演示")
print("-" * 50)
print("整合益处:")
print("• 长期保存重要信息")
print("• 释放工作记忆空间")
print("• 形成知识体系")
print("• 提升检索效率")
# 获取最终的记忆系统状态
print(f"\n📊 最终记忆系统状态:")
final_stats = self.memory_tool.execute("stats")
print(final_stats)
# 获取各类型记忆的摘要
print(f"\n📋 各类型记忆摘要:")
memory_types = ["working", "episodic", "semantic"]
for memory_type in memory_types:
print(f"\n{memory_type.upper()}记忆:")
type_summary = self.memory_tool.execute("search",
query="",
memory_type=memory_type,
limit=3)
print(type_summary)
# 演示整合后的检索效果
print(f"\n🔍 整合后的检索效果测试:")
search_queries = [
("深度学习", "测试跨类型检索"),
("学习经历", "测试整合记忆检索"),
("重要概念", "测试语义记忆检索")
]
for query, description in search_queries:
print(f"\n查询: '{query}' ({description})")
result = self.memory_tool.execute("search",
query=query,
limit=3)
print(result)
def main():
"""主函数"""
print("🔄 记忆整合机制演示")
print("展示从短期记忆到长期记忆的智能转化过程")
print("=" * 60)
try:
demo = MemoryConsolidationDemo()
# 1. 设置初始记忆数据
demo.setup_initial_memories()
# 2. 演示整合标准
demo.demonstrate_consolidation_criteria()
# 3. 演示整合过程
demo.demonstrate_consolidation_process()
# 4. 演示元数据处理
demo.demonstrate_consolidation_metadata()
# 5. 演示多类型整合
demo.demonstrate_multi_type_consolidation()
# 6. 演示整合益处
demo.demonstrate_consolidation_benefits()
print("\n" + "=" * 60)
print("🎉 记忆整合机制演示完成!")
print("=" * 60)
print("\n✨ 记忆整合核心特性:")
print("1. 🎯 智能筛选 - 基于重要性阈值的自动筛选")
print("2. 🔄 类型转换 - 灵活的记忆类型转换机制")
print("3. 📋 元数据保持 - 完整保留原始上下文信息")
print("4. ⚡ 自动化处理 - 无需人工干预的自动整合")
print("5. 🔀 多路径支持 - 支持多种整合路径")
print("\n🎯 设计理念:")
print("• 仿生性 - 模拟人类大脑的记忆固化过程")
print("• 智能性 - 自动识别和处理重要信息")
print("• 灵活性 - 支持多种整合策略和路径")
print("• 完整性 - 保持记忆的完整性和可追溯性")
print("\n💡 应用价值:")
print("• 知识管理 - 将临时学习转化为长期知识")
print("• 经验积累 - 保存重要的实践经验")
print("• 系统优化 - 释放短期记忆空间")
print("• 智能决策 - 基于历史经验的决策支持")
except Exception as e:
print(f"\n❌ 演示过程中发生错误: {e}")
import traceback
traceback.print_exc()
if __name__ == "__main__":
main()