mirror of https://github.com/Mai-with-u/MaiBot.git
fix(planner): block side-effect actions without new user input
parent
6079898a0e
commit
32bb695094
|
|
@ -20,7 +20,7 @@ from src.chat.utils.chat_message_builder import (
|
||||||
build_readable_messages_with_id,
|
build_readable_messages_with_id,
|
||||||
get_raw_msg_before_timestamp_with_chat,
|
get_raw_msg_before_timestamp_with_chat,
|
||||||
)
|
)
|
||||||
from src.chat.utils.utils import get_chat_type_and_target_info
|
from src.chat.utils.utils import get_chat_type_and_target_info, is_bot_self
|
||||||
from src.chat.planner_actions.action_manager import ActionManager
|
from src.chat.planner_actions.action_manager import ActionManager
|
||||||
from src.chat.message_receive.chat_stream import get_chat_manager
|
from src.chat.message_receive.chat_stream import get_chat_manager
|
||||||
from src.plugin_system.base.component_types import ActionInfo, ComponentType, ActionActivationType
|
from src.plugin_system.base.component_types import ActionInfo, ComponentType, ActionActivationType
|
||||||
|
|
@ -280,6 +280,8 @@ class BrainPlanner:
|
||||||
show_actions=True,
|
show_actions=True,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
previous_obs_time_mark = self.last_obs_time_mark
|
||||||
|
|
||||||
message_list_before_now_short = message_list_before_now[-int(global_config.chat.max_context_size * 0.3) :]
|
message_list_before_now_short = message_list_before_now[-int(global_config.chat.max_context_size * 0.3) :]
|
||||||
chat_content_block_short, message_id_list_short = build_readable_messages_with_id(
|
chat_content_block_short, message_id_list_short = build_readable_messages_with_id(
|
||||||
messages=message_list_before_now_short,
|
messages=message_list_before_now_short,
|
||||||
|
|
@ -322,6 +324,21 @@ class BrainPlanner:
|
||||||
loop_start_time=loop_start_time,
|
loop_start_time=loop_start_time,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
has_new_user_message = any(
|
||||||
|
(msg.time or 0.0) > previous_obs_time_mark
|
||||||
|
and not is_bot_self(msg.user_info.platform or "", str(msg.user_info.user_id))
|
||||||
|
for msg in message_list_before_now
|
||||||
|
)
|
||||||
|
if not has_new_user_message:
|
||||||
|
non_side_effect_actions = {"reply", "wait", "wait_time", "listening", "complete_talk", "no_reply"}
|
||||||
|
side_effect_actions = [a.action_type for a in actions if a.action_type not in non_side_effect_actions]
|
||||||
|
if side_effect_actions:
|
||||||
|
logger.info(
|
||||||
|
f"{self.log_prefix}检测到无新用户消息,跳过副作用动作: {' '.join(side_effect_actions)}"
|
||||||
|
)
|
||||||
|
actions = self._create_complete_talk("没有新的用户消息,跳过副作用动作", available_actions)
|
||||||
|
reasoning = f"{reasoning};检测到无新用户消息,已跳过副作用动作"
|
||||||
|
|
||||||
# 记录和展示计划日志
|
# 记录和展示计划日志
|
||||||
logger.info(
|
logger.info(
|
||||||
f"{self.log_prefix}Planner: {reasoning}。选择了{len(actions)}个动作: {' '.join([a.action_type for a in actions])}"
|
f"{self.log_prefix}Planner: {reasoning}。选择了{len(actions)}个动作: {' '.join([a.action_type for a in actions])}"
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue