From 229fa9f28de5aff1ae182197cace159776f53c85 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 14 Jun 2025 03:42:04 +0000 Subject: [PATCH] =?UTF-8?q?=F0=9F=A4=96=20=E8=87=AA=E5=8A=A8=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F=E5=8C=96=E4=BB=A3=E7=A0=81=20[skip=20ci]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../working_memory_processor.py | 39 +++++++++---------- .../focus_chat/working_memory/memory_item.py | 4 +- .../working_memory/memory_manager.py | 10 +++-- .../working_memory/working_memory.py | 2 +- .../observation/chatting_observation.py | 12 ++---- .../observation/working_observation.py | 2 +- 6 files changed, 31 insertions(+), 38 deletions(-) diff --git a/src/chat/focus_chat/info_processors/working_memory_processor.py b/src/chat/focus_chat/info_processors/working_memory_processor.py index 65c14783b..de588b70e 100644 --- a/src/chat/focus_chat/info_processors/working_memory_processor.py +++ b/src/chat/focus_chat/info_processors/working_memory_processor.py @@ -8,7 +8,6 @@ from src.common.logger import get_logger from src.chat.utils.prompt_builder import Prompt, global_prompt_manager from src.chat.message_receive.chat_stream import get_chat_manager from .base_processor import BaseProcessor -from src.chat.focus_chat.info.mind_info import MindInfo from typing import List from src.chat.heart_flow.observation.working_observation import WorkingMemoryObservation from src.chat.focus_chat.working_memory.working_memory import WorkingMemory @@ -110,10 +109,10 @@ class WorkingMemoryProcessor(BaseProcessor): content = "" try: content, _ = await self.llm_model.generate_response_async(prompt=prompt) - + print(f"prompt: {prompt}---------------------------------") - print(f"content: {content}---------------------------------") - + print(f"content: {content}---------------------------------") + if not content: logger.warning(f"{self.log_prefix} LLM返回空结果,处理工作记忆失败。") return [] @@ -138,12 +137,14 @@ class WorkingMemoryProcessor(BaseProcessor): logger.error(traceback.format_exc()) return [] - logger.debug(f"{self.log_prefix} 解析LLM返回的JSON,selected_memory_ids: {selected_memory_ids}, merge_memory: {merge_memory}") + logger.debug( + f"{self.log_prefix} 解析LLM返回的JSON,selected_memory_ids: {selected_memory_ids}, merge_memory: {merge_memory}" + ) # 根据selected_memory_ids,调取记忆 memory_str = "" selected_ids = set(selected_memory_ids) # 转换为集合以便快速查找 - + # 遍历所有记忆 for memory in all_memory: if memory.id in selected_ids: @@ -187,45 +188,41 @@ class WorkingMemoryProcessor(BaseProcessor): if not summary_result: logger.debug(f"{self.log_prefix} 压缩聊天记忆失败: 没有生成摘要") return - + print(f"compressor_prompt: {obs.compressor_prompt}") print(f"summary_result: {summary_result}") - + # 修复并解析JSON try: fixed_json = repair_json(summary_result) summary_data = json.loads(fixed_json) - + if not isinstance(summary_data, dict): logger.error(f"{self.log_prefix} 解析压缩结果失败: 不是有效的JSON对象") return - + theme = summary_data.get("theme", "") content = summary_data.get("content", "") - + if not theme or not content: logger.error(f"{self.log_prefix} 解析压缩结果失败: 缺少必要字段") return - + # 创建新记忆 - await working_memory.add_memory( - from_source="chat_compress", - summary=content, - brief=theme - ) - + await working_memory.add_memory(from_source="chat_compress", summary=content, brief=theme) + logger.debug(f"{self.log_prefix} 压缩聊天记忆成功: {theme} - {content}") - + except Exception as e: logger.error(f"{self.log_prefix} 解析压缩结果失败: {e}") logger.error(traceback.format_exc()) return - + # 清理压缩状态 obs.compressor_prompt = "" obs.oldest_messages = [] obs.oldest_messages_str = "" - + except Exception as e: logger.error(f"{self.log_prefix} 压缩聊天记忆失败: {e}") logger.error(traceback.format_exc()) diff --git a/src/chat/focus_chat/working_memory/memory_item.py b/src/chat/focus_chat/working_memory/memory_item.py index 8e79760bb..dc6ab0652 100644 --- a/src/chat/focus_chat/working_memory/memory_item.py +++ b/src/chat/focus_chat/working_memory/memory_item.py @@ -1,4 +1,4 @@ -from typing import Dict, Any, Tuple +from typing import Tuple import time import random import string @@ -23,7 +23,7 @@ class MemoryItem: self.from_source = from_source self.brief = brief self.timestamp = time.time() - + # 记忆内容概括 self.summary = summary diff --git a/src/chat/focus_chat/working_memory/memory_manager.py b/src/chat/focus_chat/working_memory/memory_manager.py index d94db9a27..8906c193b 100644 --- a/src/chat/focus_chat/working_memory/memory_manager.py +++ b/src/chat/focus_chat/working_memory/memory_manager.py @@ -1,4 +1,4 @@ -from typing import Dict, Any, Type, TypeVar, List, Optional +from typing import Dict, TypeVar, List, Optional import traceback from json_repair import repair_json from rich.traceback import install @@ -224,7 +224,7 @@ class MemoryManager: except Exception as e: logger.error(f"生成总结时出错: {str(e)}") return default_summary - + def decay_memory(self, memory_id: str, decay_factor: float = 0.8) -> bool: """ 使单个记忆衰减 @@ -263,7 +263,7 @@ class MemoryManager: return False # 获取要删除的项 - item = self._id_map[memory_id] + self._id_map[memory_id] # 从内存中删除 self._memories = [i for i in self._memories if i.id != memory_id] @@ -376,7 +376,9 @@ class MemoryManager: ) # 创建新的记忆项 - merged_memory = MemoryItem(summary=merged_data["summary"], from_source=merged_source, brief=merged_data["brief"]) + merged_memory = MemoryItem( + summary=merged_data["summary"], from_source=merged_source, brief=merged_data["brief"] + ) # 记忆强度取两者最大值 merged_memory.memory_strength = max(memory_item1.memory_strength, memory_item2.memory_strength) diff --git a/src/chat/focus_chat/working_memory/working_memory.py b/src/chat/focus_chat/working_memory/working_memory.py index 97e34041e..9488a9dbe 100644 --- a/src/chat/focus_chat/working_memory/working_memory.py +++ b/src/chat/focus_chat/working_memory/working_memory.py @@ -54,7 +54,7 @@ class WorkingMemory: except Exception as e: print(f"自动衰减记忆时出错: {str(e)}") - async def add_memory(self, summary: Any, from_source: str = "",brief: str = ""): + async def add_memory(self, summary: Any, from_source: str = "", brief: str = ""): """ 添加一段记忆到指定聊天 diff --git a/src/chat/heart_flow/observation/chatting_observation.py b/src/chat/heart_flow/observation/chatting_observation.py index 1c8e3ecc8..4660038fa 100644 --- a/src/chat/heart_flow/observation/chatting_observation.py +++ b/src/chat/heart_flow/observation/chatting_observation.py @@ -1,6 +1,5 @@ from datetime import datetime from src.config.config import global_config -import traceback from src.chat.utils.chat_message_builder import ( get_raw_msg_before_timestamp_with_chat, build_readable_messages, @@ -50,6 +49,7 @@ Prompt( "chat_summary_private_prompt", # Template for private chat ) + class ChattingObservation(Observation): def __init__(self, chat_id): super().__init__(chat_id) @@ -192,19 +192,13 @@ class ChattingObservation(Observation): # 构建压缩提示 oldest_messages_str = build_readable_messages( - messages=oldest_messages, - timestamp_mode="normal_no_YMD", - read_mark=0, - show_actions=True + messages=oldest_messages, timestamp_mode="normal_no_YMD", read_mark=0, show_actions=True ) # 根据聊天类型选择提示模板 if self.is_group_chat: prompt_template_name = "chat_summary_group_prompt" - prompt = await global_prompt_manager.format_prompt( - prompt_template_name, - chat_logs=oldest_messages_str - ) + prompt = await global_prompt_manager.format_prompt(prompt_template_name, chat_logs=oldest_messages_str) else: prompt_template_name = "chat_summary_private_prompt" chat_target_name = "对方" diff --git a/src/chat/heart_flow/observation/working_observation.py b/src/chat/heart_flow/observation/working_observation.py index 57418e7b4..6052a120a 100644 --- a/src/chat/heart_flow/observation/working_observation.py +++ b/src/chat/heart_flow/observation/working_observation.py @@ -31,4 +31,4 @@ class WorkingMemoryObservation: return self.retrieved_working_memory async def observe(self): - pass \ No newline at end of file + pass