feat: 采用三层内存系统实现统一内存管理器

- 添加了UnifiedMemoryManager,以整合感知层、短期记忆层和长期记忆层。
- 实现了初始化、消息添加和内存搜索功能。
- 引入了记忆从短期存储到长期存储的自动转移机制。
- 开发了用于结构化内存表示的内存格式化工具。
- 增强日志记录功能,以便在内存操作过程中更好地进行追踪。
This commit is contained in:
Windpicker-owo
2025-11-18 16:17:25 +08:00
parent b5cfa41d36
commit dc3ad19809
19 changed files with 1544 additions and 1686 deletions

View File

@@ -1,7 +1,7 @@
"""
记忆系统管理单例
提供全局访问的 MemoryManager 实例
提供全局访问的 MemoryManager 和 UnifiedMemoryManager 实例
"""
from __future__ import annotations
@@ -13,10 +13,18 @@ from src.memory_graph.manager import MemoryManager
logger = get_logger(__name__)
# 全局 MemoryManager 实例
# 全局 MemoryManager 实例(旧的单层记忆系统,已弃用)
_memory_manager: MemoryManager | None = None
_initialized: bool = False
# 全局 UnifiedMemoryManager 实例(新的三层记忆系统)
_unified_memory_manager = None
# ============================================================================
# 旧的单层记忆系统 API已弃用保留用于向后兼容
# ============================================================================
async def initialize_memory_manager(
data_dir: Path | str | None = None,
@@ -104,3 +112,97 @@ async def shutdown_memory_manager():
def is_initialized() -> bool:
"""检查 MemoryManager 是否已初始化"""
return _initialized and _memory_manager is not None
# ============================================================================
# 新的三层记忆系统 API推荐使用
# ============================================================================
async def initialize_unified_memory_manager():
"""
初始化统一记忆管理器(三层记忆系统)
从全局配置读取参数
Returns:
初始化后的管理器实例,未启用返回 None
"""
global _unified_memory_manager
if _unified_memory_manager is not None:
logger.warning("统一记忆管理器已经初始化")
return _unified_memory_manager
try:
from src.config.config import global_config
from src.memory_graph.unified_manager import UnifiedMemoryManager
# 检查是否启用三层记忆系统
if not hasattr(global_config, "three_tier_memory") or not getattr(
global_config.three_tier_memory, "enable", False
):
logger.warning("三层记忆系统未启用,跳过初始化")
return None
config = global_config.three_tier_memory
# 创建管理器实例
_unified_memory_manager = UnifiedMemoryManager(
data_dir=Path(getattr(config, "data_dir", "data/memory_graph/three_tier")),
# 感知记忆配置
perceptual_max_blocks=getattr(config, "perceptual_max_blocks", 50),
perceptual_block_size=getattr(config, "perceptual_block_size", 5),
perceptual_activation_threshold=getattr(config, "perceptual_activation_threshold", 3),
perceptual_recall_top_k=getattr(config, "perceptual_recall_top_k", 5),
perceptual_recall_threshold=getattr(config, "perceptual_recall_threshold", 0.55),
# 短期记忆配置
short_term_max_memories=getattr(config, "short_term_max_memories", 30),
short_term_transfer_threshold=getattr(config, "short_term_transfer_threshold", 0.6),
# 长期记忆配置
long_term_batch_size=getattr(config, "long_term_batch_size", 10),
long_term_search_top_k=getattr(config, "long_term_search_top_k", 5),
long_term_decay_factor=getattr(config, "long_term_decay_factor", 0.95),
# 智能检索配置
judge_confidence_threshold=getattr(config, "judge_confidence_threshold", 0.7),
)
# 初始化
await _unified_memory_manager.initialize()
logger.info("✅ 统一记忆管理器单例已初始化")
return _unified_memory_manager
except Exception as e:
logger.error(f"初始化统一记忆管理器失败: {e}", exc_info=True)
raise
def get_unified_memory_manager():
"""
获取统一记忆管理器实例(三层记忆系统)
Returns:
管理器实例,未初始化返回 None
"""
if _unified_memory_manager is None:
logger.warning("统一记忆管理器尚未初始化,请先调用 initialize_unified_memory_manager()")
return _unified_memory_manager
async def shutdown_unified_memory_manager() -> None:
"""关闭统一记忆管理器"""
global _unified_memory_manager
if _unified_memory_manager is None:
logger.warning("统一记忆管理器未初始化,无需关闭")
return
try:
await _unified_memory_manager.shutdown()
_unified_memory_manager = None
logger.info("✅ 统一记忆管理器已关闭")
except Exception as e:
logger.error(f"关闭统一记忆管理器失败: {e}", exc_info=True)