fix(memory): 修复记忆系统初始化逻辑,确保单例唯一性
先前,记忆系统的初始化流程存在问题,可能导致在不同位置获取到未初始化或多个不同的 MemorySystem 实例,引发潜在的运行时错误。 本次修改统一了应用的启动逻辑,在 main.py 中明确调用 `initialize_memory_system` 来初始化全局唯一的记忆系统实例。 此外,在记忆系统的关键生命周期节点(创建、初始化、获取)添加了详细的日志记录,以便于追踪实例ID,从而在未来能更好地诊断类似问题。
This commit is contained in:
@@ -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()
|
||||
|
||||
# 根据配置启动海马体采样
|
||||
|
||||
@@ -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("记忆系统已禁用,跳过初始化")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user