From 99595f239d16ebe641785c94a870b973e449c2cc Mon Sep 17 00:00:00 2001 From: tt-P607 <68868379+tt-P607@users.noreply.github.com> Date: Fri, 26 Sep 2025 02:10:43 +0800 Subject: [PATCH] =?UTF-8?q?feat(chat):=20=E5=AE=9E=E7=8E=B0=20focus=5Fener?= =?UTF-8?q?gy=20=E7=9A=84=E5=AE=9E=E6=97=B6=E6=9B=B4=E6=96=B0=E4=B8=8E?= =?UTF-8?q?=E5=90=8C=E6=AD=A5=E6=9C=BA=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 为了解决 `focus_energy` 更新不及时,导致其无法准确反映当前对话兴趣度的问题,本次提交引入了一套新的实时更新与同步机制。 这确保了每当消息的兴趣度发生变化时,代表机器人注意力的 `focus_energy` 也能被立即重新计算和更新,使决策更加精准。 主要变更: 1. **手动更新**: 在 `ChatStream` 中新增 `update_focus_energy` 方法,允许外部逻辑在需要时手动触发 `focus_energy` 的重新计算。 2. **实时计算**: `ChatterActionPlanner` 在评估并更新消息兴趣度后,会立即调用 `update_focus_energy`,确保了兴趣度到注意力的即时传导。 3. **状态同步**: `ChatterManager` 在完成一次执行后,会主动将 `mood_manager` 中可能已更新的 `chat_stream` 同步回当前的 `StreamContext`,保证了整个处理流中数据的一致性。 --- src/chat/chatter_manager.py | 10 ++++++++++ src/chat/message_receive/chat_stream.py | 4 ++++ src/plugins/built_in/affinity_flow_chatter/planner.py | 4 +++- 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/chat/chatter_manager.py b/src/chat/chatter_manager.py index c906fd901..be70f4969 100644 --- a/src/chat/chatter_manager.py +++ b/src/chat/chatter_manager.py @@ -107,6 +107,16 @@ class ChatterManager: result = await self.instances[stream_id].execute(context) self.stats["successful_executions"] += 1 + # 从 mood_manager 获取最新的 chat_stream 并同步回 StreamContext + try: + from src.mood.mood_manager import mood_manager + mood = mood_manager.get_mood_by_chat_id(stream_id) + if mood and mood.chat_stream: + context.chat_stream = mood.chat_stream + logger.debug(f"已将最新的 chat_stream 同步回流 {stream_id} 的 StreamContext") + except Exception as sync_e: + logger.error(f"同步 chat_stream 回 StreamContext 失败: {sync_e}") + # 记录处理结果 success = result.get("success", False) actions_count = result.get("actions_count", 0) diff --git a/src/chat/message_receive/chat_stream.py b/src/chat/message_receive/chat_stream.py index 5eff1f493..dad71a41a 100644 --- a/src/chat/message_receive/chat_stream.py +++ b/src/chat/message_receive/chat_stream.py @@ -257,6 +257,10 @@ class ChatStream: self.last_interaction_time = time.time() self.focus_energy = self._calculate_dynamic_focus_energy() + def update_focus_energy(self): + """手动触发更新focus_energy""" + self.focus_energy = self._calculate_dynamic_focus_energy() + def record_action(self, is_reply: bool = False): """记录动作执行""" self.action_count += 1 diff --git a/src/plugins/built_in/affinity_flow_chatter/planner.py b/src/plugins/built_in/affinity_flow_chatter/planner.py index 56211d80e..3c0b20c8f 100644 --- a/src/plugins/built_in/affinity_flow_chatter/planner.py +++ b/src/plugins/built_in/affinity_flow_chatter/planner.py @@ -135,7 +135,9 @@ class ChatterActionPlanner: chat_mood = mood_manager.get_mood_by_chat_id(self.chat_id) if hasattr(chat_mood, 'chat_stream') and chat_mood.chat_stream: chat_mood.chat_stream.add_message_interest(score) - logger.debug(f"已更新聊天 {self.chat_id} 的ChatStream兴趣度,分数: {score:.3f}") + # 在这里同步更新 focus_energy + chat_mood.chat_stream.update_focus_energy() + logger.debug(f"已更新聊天 {self.chat_id} 的ChatStream兴趣度和Focus Energy,分数: {score:.3f}") # base_threshold = self.interest_scoring.reply_threshold # 检查兴趣度是否达到非回复动作阈值