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 # 检查兴趣度是否达到非回复动作阈值