From 3a626a8d0c1477c8545412e215fca6cec0832266 Mon Sep 17 00:00:00 2001 From: SengokuCola <1026294844@qq.com> Date: Mon, 12 May 2025 12:56:13 +0800 Subject: [PATCH] =?UTF-8?q?fix=EF=BC=9A=E4=BF=AE=E5=A4=8DBug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/plugins/heartFC_chat/heartFC_chat.py | 12 +++++++++--- src/plugins/heartFC_chat/hfc_utils.py | 4 ++-- .../info_processors/base_processor.py | 6 +++++- .../info_processors/chattinginfo_processor.py | 8 +++++++- .../info_processors/mind_processor.py | 13 +++++++------ .../info_processors/tool_processor.py | 6 ++++-- src/plugins/heartFC_chat/memory_activator.py | 17 +++++++++++++++-- 7 files changed, 49 insertions(+), 17 deletions(-) diff --git a/src/plugins/heartFC_chat/heartFC_chat.py b/src/plugins/heartFC_chat/heartFC_chat.py index 670f0d3f1..25d6b3ad1 100644 --- a/src/plugins/heartFC_chat/heartFC_chat.py +++ b/src/plugins/heartFC_chat/heartFC_chat.py @@ -417,16 +417,22 @@ class HeartFChatting: # 并行执行两个任务:思考和工具执行 with Timer("执行 信息处理器", cycle_timers): # 1. 子思维思考 - 不执行工具调用 - think_task = asyncio.create_task(self.mind_processor.process_info(observations=observations,running_memorys=running_memorys)) + think_task = asyncio.create_task( + self.mind_processor.process_info(observations=observations, running_memorys=running_memorys) + ) logger.debug(f"{self.log_prefix} 启动子思维思考任务") # 2. 工具执行器 - 专门处理工具调用 - tool_task = asyncio.create_task(self.tool_processor.process_info(observations=observations,running_memorys=running_memorys)) + tool_task = asyncio.create_task( + self.tool_processor.process_info(observations=observations, running_memorys=running_memorys) + ) logger.debug(f"{self.log_prefix} 启动工具执行任务") # 3. 聊天信息处理器 chatting_info_task = asyncio.create_task( - self.chatting_info_processor.process_info(observations=observations,running_memorys=running_memorys) + self.chatting_info_processor.process_info( + observations=observations, running_memorys=running_memorys + ) ) logger.debug(f"{self.log_prefix} 启动聊天信息处理器任务") diff --git a/src/plugins/heartFC_chat/hfc_utils.py b/src/plugins/heartFC_chat/hfc_utils.py index 72d19e1bc..e5145cd78 100644 --- a/src/plugins/heartFC_chat/hfc_utils.py +++ b/src/plugins/heartFC_chat/hfc_utils.py @@ -52,9 +52,9 @@ def get_keywords_from_json(json_str: str) -> list[str]: if start == -1 or end == 0: logger.error("未找到有效的JSON内容") return [] - + json_content = json_str[start:end] - + # 解析JSON try: json_data = json.loads(json_content) diff --git a/src/plugins/heartFC_chat/info_processors/base_processor.py b/src/plugins/heartFC_chat/info_processors/base_processor.py index 5a8608833..dcbd812ee 100644 --- a/src/plugins/heartFC_chat/info_processors/base_processor.py +++ b/src/plugins/heartFC_chat/info_processors/base_processor.py @@ -21,7 +21,11 @@ class BaseProcessor(ABC): @abstractmethod async def process_info( - self, infos: List[InfoBase], observations: Optional[List[Observation]] = None, running_memorys: Optional[List[Dict]] = None, **kwargs: Any + self, + infos: List[InfoBase], + observations: Optional[List[Observation]] = None, + running_memorys: Optional[List[Dict]] = None, + **kwargs: Any, ) -> List[InfoBase]: """处理信息对象的抽象方法 diff --git a/src/plugins/heartFC_chat/info_processors/chattinginfo_processor.py b/src/plugins/heartFC_chat/info_processors/chattinginfo_processor.py index 2384eb0c4..4b15d4728 100644 --- a/src/plugins/heartFC_chat/info_processors/chattinginfo_processor.py +++ b/src/plugins/heartFC_chat/info_processors/chattinginfo_processor.py @@ -8,6 +8,7 @@ from src.heart_flow.observation.chatting_observation import ChattingObservation from src.heart_flow.observation.hfcloop_observation import HFCloopObservation from src.heart_flow.info.cycle_info import CycleInfo from typing import Dict + logger = get_logger("observation") @@ -21,7 +22,12 @@ class ChattingInfoProcessor(BaseProcessor): """初始化观察处理器""" super().__init__() - async def process_info(self, observations: Optional[List[Observation]] = None, running_memorys: Optional[List[Dict]] = None, **kwargs: Any) -> List[InfoBase]: + async def process_info( + self, + observations: Optional[List[Observation]] = None, + running_memorys: Optional[List[Dict]] = None, + **kwargs: Any, + ) -> List[InfoBase]: """处理Observation对象 Args: diff --git a/src/plugins/heartFC_chat/info_processors/mind_processor.py b/src/plugins/heartFC_chat/info_processors/mind_processor.py index e00bf7efe..85bd42068 100644 --- a/src/plugins/heartFC_chat/info_processors/mind_processor.py +++ b/src/plugins/heartFC_chat/info_processors/mind_processor.py @@ -15,7 +15,6 @@ from src.plugins.person_info.relationship_manager import relationship_manager from .base_processor import BaseProcessor from src.heart_flow.info.mind_info import MindInfo from typing import List, Optional -from src.heart_flow.observation.memory_observation import MemoryObservation from src.heart_flow.observation.hfcloop_observation import HFCloopObservation from src.plugins.heartFC_chat.info_processors.processor_utils import ( calculate_similarity, @@ -124,7 +123,9 @@ class MindProcessor(BaseProcessor): self.structured_info_str = "\n".join(lines) logger.debug(f"{self.log_prefix} 更新 structured_info_str: \n{self.structured_info_str}") - async def process_info(self, observations: Optional[List[Observation]] = None, running_memorys: Optional[List[Dict]] = None, *infos) -> List[dict]: + async def process_info( + self, observations: Optional[List[Observation]] = None, running_memorys: Optional[List[Dict]] = None, *infos + ) -> List[dict]: """处理信息对象 Args: @@ -133,14 +134,16 @@ class MindProcessor(BaseProcessor): Returns: List[dict]: 处理后的结构化信息列表 """ - current_mind = await self.do_thinking_before_reply(observations,running_memorys) + current_mind = await self.do_thinking_before_reply(observations, running_memorys) mind_info = MindInfo() mind_info.set_current_mind(current_mind) return [mind_info] - async def do_thinking_before_reply(self, observations: Optional[List[Observation]] = None, running_memorys: Optional[List[Dict]] = None): + async def do_thinking_before_reply( + self, observations: Optional[List[Observation]] = None, running_memorys: Optional[List[Dict]] = None + ): """ 在回复前进行思考,生成内心想法并收集工具调用结果 @@ -193,8 +196,6 @@ class MindProcessor(BaseProcessor): # 获取聊天内容 chat_observe_info = observation.get_observe_info() person_list = observation.person_list - if isinstance(observation, MemoryObservation): - memory_observe_info = observation.get_observe_info() if isinstance(observation, HFCloopObservation): hfcloop_observe_info = observation.get_observe_info() diff --git a/src/plugins/heartFC_chat/info_processors/tool_processor.py b/src/plugins/heartFC_chat/info_processors/tool_processor.py index 36a459b45..78e375285 100644 --- a/src/plugins/heartFC_chat/info_processors/tool_processor.py +++ b/src/plugins/heartFC_chat/info_processors/tool_processor.py @@ -63,7 +63,9 @@ class ToolProcessor(BaseProcessor): ) self.structured_info = [] - async def process_info(self, observations: Optional[List[Observation]] = None, running_memorys: Optional[List[Dict]] = None, *infos) -> List[dict]: + async def process_info( + self, observations: Optional[List[Observation]] = None, running_memorys: Optional[List[Dict]] = None, *infos + ) -> List[dict]: """处理信息对象 Args: @@ -123,7 +125,7 @@ class ToolProcessor(BaseProcessor): chat_observe_info = observation.get_observe_info() person_list = observation.person_list - + memory_str = "" if running_memorys: memory_str = "以下是当前在聊天中,你回忆起的记忆:\n" diff --git a/src/plugins/heartFC_chat/memory_activator.py b/src/plugins/heartFC_chat/memory_activator.py index 98e392867..e5991583e 100644 --- a/src/plugins/heartFC_chat/memory_activator.py +++ b/src/plugins/heartFC_chat/memory_activator.py @@ -32,12 +32,21 @@ Prompt( class MemoryActivator: def __init__(self): - self.summart_model = LLMRequest( + self.summary_model = LLMRequest( model=global_config.llm_observation, temperature=0.7, max_tokens=300, request_type="chat_observation" ) self.running_memory = [] async def activate_memory(self, observations) -> List[Dict]: + """ + 激活记忆 + + Args: + observations: 现有的进行观察后的 观察列表 + + Returns: + List[Dict]: 激活的记忆列表 + """ obs_info_text = "" for observation in observations: if isinstance(observation, ChattingObservation): @@ -51,7 +60,11 @@ class MemoryActivator: prompt = global_prompt_manager.format_prompt("memory_activator_prompt", obs_info_text=obs_info_text) - response = self.summart_model.generate_response(prompt) + logger.debug(f"prompt: {prompt}") + + response = await self.summary_model.generate_response(prompt) + + logger.debug(f"response: {response}") keywords = get_keywords_from_json(response)