fix(memory): 修复记忆系统初始化逻辑,确保单例唯一性

先前,记忆系统的初始化流程存在问题,可能导致在不同位置获取到未初始化或多个不同的 MemorySystem 实例,引发潜在的运行时错误。

本次修改统一了应用的启动逻辑,在 main.py 中明确调用 `initialize_memory_system` 来初始化全局唯一的记忆系统实例。

此外,在记忆系统的关键生命周期节点(创建、初始化、获取)添加了详细的日志记录,以便于追踪实例ID,从而在未来能更好地诊断类似问题。
This commit is contained in:
tt-P607
2025-10-25 21:23:44 +08:00
parent c4b7f2437d
commit 162cb8dba6
2 changed files with 12 additions and 2 deletions

View File

@@ -138,6 +138,7 @@ class MemorySystem:
self.config = config or MemorySystemConfig.from_global_config()
self.llm_model = llm_model
self.status = MemorySystemStatus.INITIALIZING
logger.info(f"MemorySystem __init__ called, id: {id(self)}")
# 核心组件(简化版)
self.memory_builder: MemoryBuilder | None = None
@@ -170,6 +171,7 @@ class MemorySystem:
async def initialize(self):
"""异步初始化记忆系统"""
logger.info(f"MemorySystem initialize started, id: {id(self)}")
try:
# 初始化LLM模型
fallback_task = getattr(self.llm_model, "model_for_task", None) if self.llm_model else None
@@ -287,7 +289,7 @@ class MemorySystem:
# 统一存储已经自动加载数据,无需额外加载
self.status = MemorySystemStatus.READY
logger.info(f"MemorySystem initialize finished, id: {id(self)}")
except Exception as e:
self.status = MemorySystemStatus.ERROR
logger.error(f"❌ 记忆系统初始化失败: {e}", exc_info=True)
@@ -1735,15 +1737,21 @@ def get_memory_system() -> MemorySystem:
"""获取全局记忆系统实例"""
global memory_system
if memory_system is None:
logger.warning("Global memory_system is None. Creating new uninitialized instance. This might be a problem.")
memory_system = MemorySystem()
logger.info(f"get_memory_system() called, returning instance with id: {id(memory_system)}")
return memory_system
async def initialize_memory_system(llm_model: LLMRequest | None = None):
"""初始化全局记忆系统"""
global memory_system
logger.info("initialize_memory_system() called.")
if memory_system is None:
logger.info("Global memory_system is None, creating new instance for initialization.")
memory_system = MemorySystem(llm_model=llm_model)
else:
logger.info(f"Global memory_system already exists (id: {id(memory_system)}). Initializing it.")
await memory_system.initialize()
# 根据配置启动海马体采样

View File

@@ -446,7 +446,9 @@ MoFox_Bot(第三方修改版)
# 初始化增强记忆系统
if global_config.memory.enable_memory:
await self._safe_init("增强记忆系统", self.memory_manager.initialize)()
from src.chat.memory_system.memory_system import initialize_memory_system
await self._safe_init("增强记忆系统", initialize_memory_system)()
await self._safe_init("记忆管理器", self.memory_manager.initialize)()
else:
logger.info("记忆系统已禁用,跳过初始化")