From 456bcf50e630a43d3a3622fa01f42b236ff2b9f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9C=B1=E6=BD=AE?= Date: Tue, 20 Jan 2026 00:15:21 +0800 Subject: [PATCH] refactor: move Memori initialization to fastapi_app.py MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Move init_global_memori from deep_assistant.py to fastapi_app.py lifespan function for proper application-level initialization. This ensures Memori is initialized once at startup and closed at shutdown, rather than checking and potentially initializing on every agent creation. Changes: - fastapi_app.py: Add Memori init/close in lifespan - deep_assistant.py: Simplify to only get memori_manager 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- agent/deep_assistant.py | 15 +++------------ fastapi_app.py | 26 ++++++++++++++++++++++++-- 2 files changed, 27 insertions(+), 14 deletions(-) diff --git a/agent/deep_assistant.py b/agent/deep_assistant.py index 5119f0f..250156b 100644 --- a/agent/deep_assistant.py +++ b/agent/deep_assistant.py @@ -32,7 +32,7 @@ from utils.settings import ( MEMORI_INJECT_TO_SYSTEM_PROMPT, ) from agent.agent_config import AgentConfig -from .memori_manager import get_memori_manager, init_global_memori +from .memori_manager import get_memori_manager from .memori_middleware import create_memori_middleware from .memori_config import MemoriConfig from agent.prompt_loader import load_system_prompt_async, load_mcp_settings_async @@ -206,24 +206,15 @@ async def init_agent(config: AgentConfig): middleware.append(tool_output_middleware) # 添加 Memori 记忆中间件(如果启用) - memori_middleware = None if config.enable_memori: try: # 确保有 user_identifier if not config.user_identifier: logger.warning("Memori enabled but user_identifier is missing, skipping Memori") else: - # 获取 MemoriManager(使用共享的连接池) + # 获取全局 MemoriManager(已在 fastapi_app.py 中初始化) memori_manager = get_memori_manager() - # 如果 MemoriManager 未初始化,则初始化 - if not memori_manager._initialized: - db_pool = get_checkpointer_manager().pool if checkpointer else None - await init_global_memori( - db_pool=db_pool, - api_key=MEMORI_API_KEY - ) - # 创建 Memori 中间件 memori_middleware = create_memori_middleware( bot_id=config.bot_id, @@ -240,7 +231,7 @@ async def init_agent(config: AgentConfig): logger.info("Memori middleware added to agent") except Exception as e: - logger.error(f"Failed to initialize Memori middleware: {e}, continuing without Memori") + logger.error(f"Failed to create Memori middleware: {e}, continuing without Memori") if config.robot_type == "deep_agent": diff --git a/fastapi_app.py b/fastapi_app.py index c1afa83..64ab05d 100644 --- a/fastapi_app.py +++ b/fastapi_app.py @@ -40,7 +40,11 @@ async def lifespan(app: FastAPI): init_chat_history_manager, close_chat_history_manager ) - from utils.settings import CHECKPOINT_CLEANUP_ENABLED + from agent.memori_manager import ( + init_global_memori, + close_global_memori + ) + from utils.settings import CHECKPOINT_CLEANUP_ENABLED, MEMORI_ENABLED, MEMORI_API_KEY # 1. 初始化共享的数据库连接池 db_pool_manager = await init_global_db_pool() @@ -54,7 +58,18 @@ async def lifespan(app: FastAPI): await init_chat_history_manager(db_pool_manager.pool) logger.info("Chat history manager initialized") - # 4. 启动 checkpoint 清理调度器 + # 4. 初始化 Memori 长期记忆系统 (如果启用) + if MEMORI_ENABLED: + try: + await init_global_memori( + db_pool=db_pool_manager.pool, + api_key=MEMORI_API_KEY + ) + logger.info("Memori long-term memory initialized") + except Exception as e: + logger.warning(f"Memori initialization failed (continuing without): {e}") + + # 5. 启动 checkpoint 清理调度器 if CHECKPOINT_CLEANUP_ENABLED: # 启动时立即执行一次清理 try: @@ -70,6 +85,13 @@ async def lifespan(app: FastAPI): # 关闭时清理(按相反顺序) logger.info("Shutting down...") + # 关闭 Memori + if MEMORI_ENABLED: + try: + await close_global_memori() + logger.info("Memori long-term memory closed") + except Exception as e: + logger.warning(f"Memori close failed (non-fatal): {e}") await close_chat_history_manager() logger.info("Chat history manager closed") await close_global_checkpointer()