From 4f038916ab5a2c11df80a48cf67b03c292c8898c Mon Sep 17 00:00:00 2001 From: minecraft1024a Date: Sun, 5 Oct 2025 13:36:15 +0800 Subject: [PATCH] =?UTF-8?q?refactor(memory):=20=E4=BC=98=E5=8C=96=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B=E6=B3=A8=E8=A7=A3=E5=B9=B6=E5=A2=9E=E5=BC=BA=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E5=81=A5=E5=A3=AE=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 为 `MemorySystem` 类中的核心组件属性添加 `| None` 类型注解,使其更精确地反映其可能为 `None` 的初始状态。 - 在 `_collect_candidates_by_fingerprint` 方法中,为异常捕获添加 `noqa: PERF203` 以忽略特定的性能警告。 - 在 `rebuild_all_memory_vectors` 方法中,增加对 `self.unified_storage` 是否存在的检查,防止在未初始化时出现 `AttributeError`。 --- src/chat/memory_system/memory_system.py | 36 +++++++++++++------------ 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/src/chat/memory_system/memory_system.py b/src/chat/memory_system/memory_system.py index 2cc17fb64..a2c0a0e83 100644 --- a/src/chat/memory_system/memory_system.py +++ b/src/chat/memory_system/memory_system.py @@ -33,9 +33,10 @@ from src.llm_models.utils_model import LLMRequest if TYPE_CHECKING: from src.chat.memory_system.memory_forgetting_engine import MemoryForgettingEngine + from src.chat.memory_system.vector_memory_storage_v2 import VectorMemoryStorage from src.common.data_models.database_data_model import DatabaseMessages -logger = get_logger(__name__) +logger = get_logger("memory_system") # 全局记忆作用域(共享记忆库) GLOBAL_MEMORY_SCOPE = "global" @@ -135,15 +136,15 @@ class MemorySystem: self.status = MemorySystemStatus.INITIALIZING # 核心组件(简化版) - self.memory_builder: MemoryBuilder = None - self.fusion_engine: MemoryFusionEngine = None - self.unified_storage = None # 统一存储系统 - self.query_planner: MemoryQueryPlanner = None + self.memory_builder: MemoryBuilder | None = None + self.fusion_engine: MemoryFusionEngine | None = None + self.unified_storage: VectorMemoryStorage | None = None # 统一存储系统 + self.query_planner: MemoryQueryPlanner | None = None self.forgetting_engine: MemoryForgettingEngine | None = None # LLM模型 - self.value_assessment_model: LLMRequest = None - self.memory_extraction_model: LLMRequest = None + self.value_assessment_model: LLMRequest | None = None + self.memory_extraction_model: LLMRequest | None = None # 统计信息 self.total_memories = 0 @@ -478,7 +479,7 @@ class MemorySystem: existing_id = self._memory_fingerprints.get(fingerprint_key) if existing_id and existing_id not in new_memory_ids: candidate_ids.add(existing_id) - except Exception as exc: + except Exception as exc: # noqa: PERF203 logger.debug("构建记忆指纹失败,跳过候选收集: %s", exc) # 基于主体索引的候选(使用统一存储) @@ -842,7 +843,7 @@ class MemorySystem: for i, (mem, score, details) in enumerate(scored_memories[:3], 1): try: summary = mem.content[:60] if hasattr(mem, "content") and mem.content else "" - except: + except Exception: summary = "" logger.info( f" #{i} | final={details['final']:.3f} " @@ -1439,8 +1440,8 @@ class MemorySystem: context_keywords = context.get("keywords") or [] keyword_overlap = 0.0 if context_keywords: - memory_keywords = set(k.lower() for k in memory.keywords) - keyword_overlap = len(memory_keywords & set(k.lower() for k in context_keywords)) / max( + memory_keywords = {k.lower() for k in memory.keywords} + keyword_overlap = len(memory_keywords & {k.lower() for k in context_keywords}) / max( len(context_keywords), 1 ) @@ -1552,12 +1553,13 @@ class MemorySystem: # 收集需要重建向量的记忆 memories_to_rebuild = [] - for memory_id, memory in self.unified_storage.memory_cache.items(): - # 检查记忆是否有有效的 display 文本 - if memory.display and memory.display.strip(): - memories_to_rebuild.append(memory) - elif memory.text_content and memory.text_content.strip(): - memories_to_rebuild.append(memory) + if self.unified_storage: + for memory in self.unified_storage.memory_cache.values(): + # 检查记忆是否有有效的 display 文本 + if memory.display and memory.display.strip(): + memories_to_rebuild.append(memory) + elif memory.text_content and memory.text_content.strip(): + memories_to_rebuild.append(memory) if not memories_to_rebuild: logger.warning("没有找到可重建向量的记忆")