refactor: move Memori initialization to fastapi_app.py

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 <noreply@anthropic.com>
This commit is contained in:
朱潮 2026-01-20 00:15:21 +08:00
parent 455a48409d
commit 456bcf50e6
2 changed files with 27 additions and 14 deletions

View File

@ -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":

View File

@ -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()