From f446e2857148b83e3ea782e90b3d48e0a5023c3e Mon Sep 17 00:00:00 2001 From: tt-P607 <68868379+tt-P607@users.noreply.github.com> Date: Sat, 1 Nov 2025 02:01:36 +0800 Subject: [PATCH] =?UTF-8?q?refactor(chatter):=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E8=A7=84=E5=88=92=E5=99=A8=E9=80=BB=E8=BE=91=EF=BC=8C=E4=BB=85?= =?UTF-8?q?=E5=9C=A8=E5=85=B4=E8=B6=A3=E5=BA=A6=E8=B6=B3=E5=A4=9F=E6=97=B6?= =?UTF-8?q?=E6=89=8D=E6=89=A7=E8=A1=8C=E5=8A=A8=E4=BD=9C=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E4=B8=8E=E8=A7=84=E5=88=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 将动作修改器(ActionModifier)和初始规划(initial_plan)的生成逻辑,移动到兴趣度检查之后。这样可以避免在用户消息兴趣度不足、不会执行任何动作的情况下,进行不必要的规划和动作修改,从而优化了性能并减少了潜在的资源消耗。 同时,为了增强代码的健壮性,对情绪状态的获取增加了`getattr`以提供默认值,防止因缺少特定属性而引发的潜在错误。 --- .../built_in/affinity_flow_chatter/planner.py | 42 +++++++++---------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/src/plugins/built_in/affinity_flow_chatter/planner.py b/src/plugins/built_in/affinity_flow_chatter/planner.py index 44c07577f..991a9946c 100644 --- a/src/plugins/built_in/affinity_flow_chatter/planner.py +++ b/src/plugins/built_in/affinity_flow_chatter/planner.py @@ -104,16 +104,6 @@ class ChatterActionPlanner: if chat_mode == ChatMode.NORMAL: return await self._normal_mode_flow(context) - # 在规划前,先进行动作修改 - from src.chat.planner_actions.action_modifier import ActionModifier - action_modifier = ActionModifier(self.action_manager, self.chat_id) - await action_modifier.modify_actions() - - initial_plan = await self.generator.generate(chat_mode) - - # 确保Plan中包含所有当前可用的动作 - initial_plan.available_actions = self.action_manager.get_using_actions() - unread_messages = context.get_unread_messages() if context else [] # 2. 使用新的兴趣度管理系统进行评分 max_message_interest = 0.0 @@ -169,9 +159,19 @@ class ChatterActionPlanner: action_data={}, action_message=None, ) + initial_plan = await self.generator.generate(chat_mode) filtered_plan = initial_plan filtered_plan.decided_actions = [no_action] else: + # 在规划前,先进行动作修改 + from src.chat.planner_actions.action_modifier import ActionModifier + action_modifier = ActionModifier(self.action_manager, self.chat_id) + await action_modifier.modify_actions() + + initial_plan = await self.generator.generate(chat_mode) + + # 确保Plan中包含所有当前可用的动作 + initial_plan.available_actions = self.action_manager.get_using_actions() # 4. 筛选 Plan available_actions = list(initial_plan.available_actions.keys()) plan_filter = ChatterPlanFilter(self.chat_id, available_actions) @@ -179,14 +179,15 @@ class ChatterActionPlanner: # 4.5 检查是否正在处理相同的目标消息,防止重复回复 target_message_id = None - for action in filtered_plan.decided_actions: - if action.action_type in ["reply", "proactive_reply"] and action.action_message: - # 提取目标消息ID - if hasattr(action.action_message, "message_id"): - target_message_id = action.action_message.message_id - elif isinstance(action.action_message, dict): - target_message_id = action.action_message.get("message_id") - break + if filtered_plan and filtered_plan.decided_actions: + for action in filtered_plan.decided_actions: + if action.action_type in ["reply", "proactive_reply"] and action.action_message: + # 提取目标消息ID + if hasattr(action.action_message, "message_id"): + target_message_id = action.action_message.message_id + elif isinstance(action.action_message, dict): + target_message_id = action.action_message.get("message_id") + break # 如果找到目标消息ID,检查是否已经在处理中 if target_message_id and context: @@ -513,9 +514,8 @@ class ChatterActionPlanner: chat_mood = mood_manager.get_mood_by_chat_id(self.chat_id) return { "current_mood": chat_mood.mood_state, - "is_angry_from_wakeup": chat_mood.is_angry_from_wakeup, - "regression_count": chat_mood.regression_count, - "last_change_time": chat_mood.last_change_time, + "regression_count": getattr(chat_mood, "regression_count", 0), + "last_change_time": getattr(chat_mood, "last_change_time", 0), }