From 0716c65269ed3931900819f50d3cf9e6c69ce8e0 Mon Sep 17 00:00:00 2001 From: jxxghp Date: Sat, 13 Dec 2025 15:40:20 +0800 Subject: [PATCH] Refactor: Simplify memory key generation and update retention settings --- app/agent/memory/__init__.py | 22 ++++++++++++++++------ app/core/config.py | 6 +++--- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/app/agent/memory/__init__.py b/app/agent/memory/__init__.py index 02daa8dc..aef320bf 100644 --- a/app/agent/memory/__init__.py +++ b/app/agent/memory/__init__.py @@ -45,17 +45,27 @@ class ConversationMemoryManager: logger.info("对话记忆管理器已关闭") + @staticmethod + def get_memory_key(session_id: str, user_id: str): + """计算内存Key""" + return f"{user_id}:{session_id}" if user_id else session_id + + @staticmethod + def get_redis_key(session_id: str, user_id: str): + """计算Redis Key""" + return f"agent_memory:{user_id}:{session_id}" if user_id else f"agent_memory:{session_id}" + async def get_memory(self, session_id: str, user_id: str) -> ConversationMemory: """获取会话记忆""" # 首先检查缓存 - cache_key = f"{user_id}:{session_id}" if user_id else session_id + cache_key = self.get_memory_key(session_id, user_id) if cache_key in self.memory_cache: return self.memory_cache[cache_key] # 尝试从Redis加载 if settings.CACHE_BACKEND_TYPE == "redis": try: - redis_key = f"agent_memory:{user_id}:{session_id}" if user_id else f"agent_memory:{session_id}" + redis_key = self.get_redis_key(session_id, user_id) memory_data = await self.redis_helper.get(redis_key, region="AI_AGENT") if memory_data: memory_dict = json.loads(memory_data) if isinstance(memory_data, str) else memory_data @@ -180,7 +190,7 @@ class ConversationMemoryManager: 如果消息Token数量超过模型最大上下文长度的阀值,会自动进行摘要裁剪 """ - cache_key = f"{user_id}:{session_id}" if user_id else session_id + cache_key = self.get_memory_key(session_id, user_id) memory = self.memory_cache.get(cache_key) if not memory: return [] @@ -216,7 +226,7 @@ class ConversationMemoryManager: del self.memory_cache[cache_key] if settings.CACHE_BACKEND_TYPE == "redis": - redis_key = f"agent_memory:{user_id}:{session_id}" if user_id else f"agent_memory:{session_id}" + redis_key = self.get_redis_key(session_id, user_id) await self.redis_helper.delete(redis_key, region="AI_AGENT") logger.info(f"会话记忆已清空: session_id={session_id}, user_id={user_id}") @@ -227,14 +237,14 @@ class ConversationMemoryManager: Redis中的记忆会自动通过TTL机制过期,无需手动清理 """ # 更新内存缓存 - cache_key = f"{memory.user_id}:{memory.session_id}" if memory.user_id else memory.session_id + cache_key = self.get_memory_key(memory.session_id, memory.user_id) self.memory_cache[cache_key] = memory # 保存到Redis,设置TTL自动过期 if settings.CACHE_BACKEND_TYPE == "redis": try: memory_dict = memory.model_dump() - redis_key = f"agent_memory:{memory.user_id}:{memory.session_id}" if memory.user_id else f"agent_memory:{memory.session_id}" + redis_key = self.get_redis_key(memory.session_id, memory.user_id) ttl = int(timedelta(days=settings.LLM_REDIS_MEMORY_RETENTION_DAYS).total_seconds()) await self.redis_helper.set( redis_key, diff --git a/app/core/config.py b/app/core/config.py index 2f3ad3bc..ef1235f9 100644 --- a/app/core/config.py +++ b/app/core/config.py @@ -430,9 +430,9 @@ class ConfigModel(BaseModel): # 是否启用详细日志 LLM_VERBOSE: bool = False # 最大记忆消息数量 - LLM_MAX_MEMORY_MESSAGES: int = 50 - # 记忆保留天数 - LLM_MEMORY_RETENTION_DAYS: int = 30 + LLM_MAX_MEMORY_MESSAGES: int = 30 + # 内存记忆保留天数 + LLM_MEMORY_RETENTION_DAYS: int = 1 # Redis记忆保留天数(如果使用Redis) LLM_REDIS_MEMORY_RETENTION_DAYS: int = 7