From 44ddd294c249660cfadf64f7980b6cb03c9d73a6 Mon Sep 17 00:00:00 2001 From: Windpicker-owo <3431391539@qq.com> Date: Wed, 5 Nov 2025 18:53:32 +0800 Subject: [PATCH] =?UTF-8?q?feat(memory-graph):=20Step=202=20-=20=E9=9B=86?= =?UTF-8?q?=E6=88=90=E8=AE=B0=E5=BF=86=E6=A3=80=E7=B4=A2=E5=88=B0=E6=8F=90?= =?UTF-8?q?=E7=A4=BA=E8=AF=8D=E7=94=9F=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修改 build_memory_block 方法,添加记忆图系统检索 - 在提示词构建时自动从记忆图系统中检索相关记忆 - 合并增强记忆系统和记忆图系统的检索结果 - 更新记忆格式化代码以使用合并后的记忆列表 技术细节: - 使用 manager_singleton 获取全局记忆管理器 - 调用 search_memories 检索相关记忆 (top_k=5, min_importance=0.5) - 将记忆格式化为兼容的数据结构并合并到 all_memories - 保持与现有增强记忆系统的兼容性 测试验证: - 成功创建测试记忆并检索 - 不同查询能找到相应的相关记忆 - 记忆图系统可正常被提示词生成器调用 --- src/chat/replyer/default_generator.py | 46 ++++++++++++++++++++++++--- 1 file changed, 42 insertions(+), 4 deletions(-) diff --git a/src/chat/replyer/default_generator.py b/src/chat/replyer/default_generator.py index 28c382530..2697e43e5 100644 --- a/src/chat/replyer/default_generator.py +++ b/src/chat/replyer/default_generator.py @@ -716,17 +716,55 @@ class DefaultReplyer: running_memories = [] instant_memory = "" + # 尝试从记忆图系统检索记忆 + graph_memories = [] + try: + from src.memory_graph.manager_singleton import get_memory_manager, is_initialized + + if is_initialized(): + manager = get_memory_manager() + if manager: + # 搜索相关记忆 + memories = await manager.search_memories( + query=target, + top_k=5, + min_importance=0.5, + include_forgotten=False + ) + + if memories: + logger.info(f"[记忆图] 检索到 {len(memories)} 条相关记忆") + for memory in memories: + topic = memory.metadata.get("topic", "") + mem_type = memory.metadata.get("memory_type", "未知") + if topic: + graph_memories.append({ + "content": topic, + "memory_type": mem_type, + "importance": memory.importance, + "relevance": 0.7, # 默认相关度 + "source": "memory_graph", + }) + else: + logger.debug("[记忆图] 未找到相关记忆") + except Exception as e: + logger.debug(f"[记忆图] 检索失败: {e}") + graph_memories = [] + + # 合并记忆(增强记忆系统 + 记忆图系统) + all_memories = running_memories + graph_memories + # 构建记忆字符串,使用方括号格式 memory_str = "" has_any_memory = False - # 添加长期记忆(来自增强记忆系统) - if running_memories: + # 添加长期记忆(来自增强记忆系统 + 记忆图系统) + if all_memories: # 使用方括号格式 memory_parts = ["### 🧠 相关记忆 (Relevant Memories)", ""] # 按相关度排序,并记录相关度信息用于调试 - sorted_memories = sorted(running_memories, key=lambda x: x.get("relevance", 0.0), reverse=True) + sorted_memories = sorted(all_memories, key=lambda x: x.get("relevance", 0.0), reverse=True) # 调试相关度信息 relevance_info = [(m.get("memory_type", "unknown"), m.get("relevance", 0.0)) for m in sorted_memories] @@ -760,7 +798,7 @@ class DefaultReplyer: # 添加瞬时记忆 if instant_memory: - if not any(rm["content"] == instant_memory for rm in running_memories): + if not any(rm["content"] == instant_memory for rm in all_memories): if not memory_str: memory_str = "以下是当前在聊天中,你回忆起的记忆:\n" memory_str += f"- 最相关记忆:{instant_memory}\n"