refactor(memory): 优化类型注解并增强代码健壮性
- 为 `MemorySystem` 类中的核心组件属性添加 `| None` 类型注解,使其更精确地反映其可能为 `None` 的初始状态。 - 在 `_collect_candidates_by_fingerprint` 方法中,为异常捕获添加 `noqa: PERF203` 以忽略特定的性能警告。 - 在 `rebuild_all_memory_vectors` 方法中,增加对 `self.unified_storage` 是否存在的检查,防止在未初始化时出现 `AttributeError`。
This commit is contained in:
@@ -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("没有找到可重建向量的记忆")
|
||||
|
||||
Reference in New Issue
Block a user