refactor(chatter): 优化规划器逻辑,仅在兴趣度足够时才执行动作修改与规划

将动作修改器(ActionModifier)和初始规划(initial_plan)的生成逻辑,移动到兴趣度检查之后。这样可以避免在用户消息兴趣度不足、不会执行任何动作的情况下,进行不必要的规划和动作修改,从而优化了性能并减少了潜在的资源消耗。

同时,为了增强代码的健壮性,对情绪状态的获取增加了`getattr`以提供默认值,防止因缺少特定属性而引发的潜在错误。
This commit is contained in:
tt-P607
2025-11-01 02:01:36 +08:00
parent 215183e50f
commit ca7e2adca1

View File

@@ -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,6 +179,7 @@ class ChatterActionPlanner:
# 4.5 检查是否正在处理相同的目标消息,防止重复回复
target_message_id = None
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
@@ -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),
}