From ad36a6c48f4e2af60c6c2b29f03d4475152cb1d6 Mon Sep 17 00:00:00 2001 From: Windpicker-owo <3431391539@qq.com> Date: Fri, 26 Sep 2025 11:45:20 +0800 Subject: [PATCH] =?UTF-8?q?refactor(chat):=20=E9=87=8D=E6=9E=84=E6=B6=88?= =?UTF-8?q?=E6=81=AF=E7=AE=A1=E7=90=86=E5=99=A8=E4=BB=A5=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E9=9B=86=E4=B8=AD=E5=BC=8F=E8=81=8A=E5=A4=A9=E6=B5=81API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 移除对context.chat_stream的直接依赖,改为通过get_chat_manager().get_stream()统一获取聊天流实例。这提高了模块独立性,符合"高内聚、低耦合"原则。 - 在MessageManager中统一使用chat_api获取stream实例 - 移除mood_manager中直接更新chat_stream的逻辑 - 在affinity_flow_chatter中统一处理兴趣度更新 - 消除直接属性访问带来的强耦合依赖 --- src/chat/message_manager/message_manager.py | 34 ++++++++++++------- src/mood/mood_manager.py | 7 +--- .../built_in/affinity_flow_chatter/planner.py | 12 +++---- 3 files changed, 29 insertions(+), 24 deletions(-) diff --git a/src/chat/message_manager/message_manager.py b/src/chat/message_manager/message_manager.py index 551e60782..26ff69aba 100644 --- a/src/chat/message_manager/message_manager.py +++ b/src/chat/message_manager/message_manager.py @@ -314,8 +314,10 @@ class MessageManager: stream_count = 0 for context in active_streams: - if hasattr(context, 'chat_stream') and context.chat_stream: - focus_energy = context.chat_stream.focus_energy + from src.plugin_system.apis.chat_api import get_chat_manager + chat_stream = get_chat_manager().get_stream(context.stream_id) + if chat_stream: + focus_energy = chat_stream.focus_energy total_focus_energy += focus_energy max_focus_energy = max(max_focus_energy, focus_energy) stream_count += 1 @@ -364,16 +366,18 @@ class MessageManager: """计算单个聊天流的分发周期 - 基于阈值感知的focus_energy""" if not global_config.chat.dynamic_distribution_enabled: return self.check_interval # 使用固定间隔 - + + from src.plugin_system.apis.chat_api import get_chat_manager + chat_stream = get_chat_manager().get_stream(context.stream_id) # 获取该流的focus_energy(新的阈值感知版本) focus_energy = 0.5 # 默认值 avg_message_interest = 0.5 # 默认平均兴趣度 - if hasattr(context, 'chat_stream') and context.chat_stream: - focus_energy = context.chat_stream.focus_energy + if chat_stream: + focus_energy = chat_stream.focus_energy # 获取平均消息兴趣度用于更精确的计算 - if context.chat_stream.message_count > 0: - avg_message_interest = context.chat_stream.message_interest_total / context.chat_stream.message_count + if chat_stream.message_count > 0: + avg_message_interest = chat_stream.message_interest_total / chat_stream.message_count # 获取AFC阈值用于参考,添加None值检查 reply_threshold = getattr(global_config.affinity_flow, 'reply_action_interest_threshold', 0.4) @@ -492,7 +496,9 @@ class MessageManager: # 如果没有处理任务,创建一个 if not context.processing_task or context.processing_task.done(): - focus_energy = context.chat_stream.focus_energy if hasattr(context, 'chat_stream') and context.chat_stream else 0.5 + from src.plugin_system.apis.chat_api import get_chat_manager + chat_stream = get_chat_manager().get_stream(context.stream_id) + focus_energy = chat_stream.focus_energy if chat_stream else 0.5 # 根据优先级记录日志 if focus_energy >= 0.7: @@ -533,9 +539,11 @@ class MessageManager: continue # 获取focus_energy,如果不存在则使用默认值 + from src.plugin_system.apis.chat_api import get_chat_manager + chat_stream = get_chat_manager().get_stream(context.stream_id) focus_energy = 0.5 - if hasattr(context, 'chat_stream') and context.chat_stream: - focus_energy = context.chat_stream.focus_energy + if chat_stream: + focus_energy = chat_stream.focus_energy # 计算流优先级分数 priority_score = self._calculate_stream_priority(context, focus_energy) @@ -574,6 +582,8 @@ class MessageManager: def _calculate_stream_priority(self, context: StreamContext, focus_energy: float) -> float: """计算聊天流的优先级分数""" + from src.plugin_system.apis.chat_api import get_chat_manager + chat_stream = get_chat_manager().get_stream(context.stream_id) # 基础优先级:focus_energy base_priority = focus_energy @@ -587,8 +597,8 @@ class MessageManager: time_penalty = max(0, 1.0 - time_since_active / 3600.0) # 1小时内无惩罚 # 连续无回复惩罚 - if hasattr(context, 'chat_stream') and context.chat_stream: - consecutive_no_reply = context.chat_stream.consecutive_no_reply + if chat_stream: + consecutive_no_reply = chat_stream.consecutive_no_reply no_reply_penalty = max(0, 1.0 - consecutive_no_reply * 0.05) # 每次无回复降低5% else: no_reply_penalty = 1.0 diff --git a/src/mood/mood_manager.py b/src/mood/mood_manager.py index 6c2ada6c4..caba99ad6 100644 --- a/src/mood/mood_manager.py +++ b/src/mood/mood_manager.py @@ -149,12 +149,7 @@ class ChatMood: self.mood_state = response self.last_change_time = message_time - - # 更新ChatStream的兴趣度数据 - if hasattr(self, 'chat_stream') and self.chat_stream: - self.chat_stream.add_message_interest(interested_rate) - logger.debug(f"{self.log_prefix} 已更新ChatStream兴趣度,当前focus_energy: {self.chat_stream.focus_energy:.3f}") - + async def regress_mood(self): message_time = time.time() message_list_before_now = get_raw_msg_by_timestamp_with_chat_inclusive( diff --git a/src/plugins/built_in/affinity_flow_chatter/planner.py b/src/plugins/built_in/affinity_flow_chatter/planner.py index 56211d80e..b3b86210c 100644 --- a/src/plugins/built_in/affinity_flow_chatter/planner.py +++ b/src/plugins/built_in/affinity_flow_chatter/planner.py @@ -125,17 +125,17 @@ class ChatterActionPlanner: logger.info(f"兴趣度不足 ({latest_score.total_score:.2f}),移除回复") reply_not_available = True + # 更新ChatStream的兴趣度数据 + from src.plugin_system.apis.chat_api import get_chat_manager + chat_stream = get_chat_manager().get_stream(self.chat_id) + chat_stream.add_message_interest(score) + logger.debug(f"已更新聊天 {self.chat_id} 的ChatStream兴趣度,分数: {score:.3f}") + # 更新情绪状态和ChatStream兴趣度数据 if latest_message and score > 0: chat_mood = mood_manager.get_mood_by_chat_id(self.chat_id) await chat_mood.update_mood_by_message(latest_message, score) logger.debug(f"已更新聊天 {self.chat_id} 的情绪状态,兴趣度: {score:.3f}") - elif latest_message: - # 即使不更新情绪状态,也要更新ChatStream的兴趣度数据 - 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}") # base_threshold = self.interest_scoring.reply_threshold # 检查兴趣度是否达到非回复动作阈值