feat(memory): 使用异步初始化确保统一记忆管理器已准备就绪

This commit is contained in:
Windpicker-owo
2025-12-08 17:30:11 +08:00
parent 01bcfb491a
commit e148cfd16b
4 changed files with 37 additions and 8 deletions

View File

@@ -598,12 +598,14 @@ class DefaultReplyer:
return ""
try:
from src.memory_graph.manager_singleton import get_unified_memory_manager
from src.memory_graph.manager_singleton import (
ensure_unified_memory_manager_initialized,
)
from src.memory_graph.utils.three_tier_formatter import memory_formatter
unified_manager = get_unified_memory_manager()
unified_manager = await ensure_unified_memory_manager_initialized()
if not unified_manager:
logger.debug("[三层记忆] 管理器初始化")
logger.debug("[三层记忆] 管理器初始化失败或未启用")
return ""
# 目标查询改为使用最近多条消息的组合块

View File

@@ -152,10 +152,12 @@ class StreamContext(BaseDataModel):
logger.debug(f"消息直接添加到StreamContext未处理列表: stream={self.stream_id}")
else:
logger.debug(f"消息添加到StreamContext成功: {self.stream_id}")
# ͬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>ͳһ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
# 同步消息到统一记忆管理器
try:
if global_config.memory and global_config.memory.enable:
unified_manager: Any = _get_unified_memory_manager()
from src.memory_graph.manager_singleton import ensure_unified_memory_manager_initialized
unified_manager: Any = await ensure_unified_memory_manager_initialized()
if unified_manager:
message_dict = {
"message_id": str(message.message_id),

View File

@@ -6,6 +6,7 @@
from __future__ import annotations
import asyncio
from pathlib import Path
from src.common.logger import get_logger
@@ -19,6 +20,7 @@ _initialized: bool = False
# 全局 UnifiedMemoryManager 实例(新的三层记忆系统)
_unified_memory_manager = None
_unified_memory_init_lock: asyncio.Lock | None = None
# ============================================================================
@@ -194,6 +196,27 @@ def get_unified_memory_manager():
return _unified_memory_manager
async def ensure_unified_memory_manager_initialized():
"""
确保统一记忆管理器已初始化。
在首次访问时自动初始化,避免调用方重复判断。
"""
global _unified_memory_init_lock, _unified_memory_manager
if _unified_memory_manager is not None:
return _unified_memory_manager
if _unified_memory_init_lock is None:
_unified_memory_init_lock = asyncio.Lock()
async with _unified_memory_init_lock:
if _unified_memory_manager is not None:
return _unified_memory_manager
return await initialize_unified_memory_manager()
async def shutdown_unified_memory_manager() -> None:
"""关闭统一记忆管理器"""
global _unified_memory_manager

View File

@@ -219,12 +219,14 @@ class KFCContextBuilder:
return ""
try:
from src.memory_graph.manager_singleton import get_unified_memory_manager
from src.memory_graph.manager_singleton import (
ensure_unified_memory_manager_initialized,
)
from src.memory_graph.utils.three_tier_formatter import memory_formatter
unified_manager = get_unified_memory_manager()
unified_manager = await ensure_unified_memory_manager_initialized()
if not unified_manager:
logger.warning("[KFC记忆] 管理器初始化,跳过记忆检索")
logger.warning("[KFC记忆] 管理器初始化失败或未启用,跳过记忆检索")
return ""
# 构建查询文本(使用最近多条消息的组合块)