From efa5464ca93ef3373a2c704b798541c068614659 Mon Sep 17 00:00:00 2001 From: tt-P607 <68868379+tt-P607@users.noreply.github.com> Date: Sat, 15 Nov 2025 18:01:43 +0800 Subject: [PATCH] =?UTF-8?q?feat(chatter):=20=E6=94=AF=E6=8C=81=E6=8C=89?= =?UTF-8?q?=E8=81=8A=E5=A4=A9=E7=B1=BB=E5=9E=8B=E5=92=8C=E6=A8=A1=E5=BC=8F?= =?UTF-8?q?=E7=81=B5=E6=B4=BB=E8=BF=87=E6=BB=A4=E6=93=8D=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `ChatterPlanGenerator` 中的操作过滤逻辑得到了增强,以支持更灵活的操作配置。现在,操作可以通过提供列表来启用多个聊天类型或模式,或者使用 `ChatType.ALL` 和 `ChatMode.ALL` 来启用所有类型/模式。 为此,`ChatterPlanGenerator` 被重构为通过依赖注入接受 `ActionManager` 实例,从而提高了解耦性并使组件更易于测试。 --- .../planner/plan_generator.py | 29 +++++++++++++------ .../affinity_flow_chatter/planner/planner.py | 2 +- 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/src/plugins/built_in/affinity_flow_chatter/planner/plan_generator.py b/src/plugins/built_in/affinity_flow_chatter/planner/plan_generator.py index 5a71fad5e..992295708 100644 --- a/src/plugins/built_in/affinity_flow_chatter/planner/plan_generator.py +++ b/src/plugins/built_in/affinity_flow_chatter/planner/plan_generator.py @@ -3,6 +3,7 @@ PlanGenerator: 负责搜集和汇总所有决策所需的信息,生成一个 """ import time +from typing import TYPE_CHECKING from src.chat.utils.chat_message_builder import get_raw_msg_before_timestamp_with_chat from src.chat.utils.utils import get_chat_type_and_target_info @@ -11,6 +12,9 @@ from src.common.data_models.info_data_model import Plan, TargetPersonInfo from src.config.config import global_config from src.plugin_system.base.component_types import ActionInfo, ChatMode, ChatType +if TYPE_CHECKING: + from src.chat.planner_actions.action_manager import ChatterActionManager + class ChatterPlanGenerator: """ @@ -26,18 +30,16 @@ class ChatterPlanGenerator: action_manager (ActionManager): 用于获取可用动作列表的管理器。 """ - def __init__(self, chat_id: str): + def __init__(self, chat_id: str, action_manager: "ChatterActionManager"): """ 初始化 ChatterPlanGenerator。 Args: chat_id (str): 当前聊天的 ID。 + action_manager (ChatterActionManager): 一个 ChatterActionManager 实例。 """ - from src.chat.planner_actions.action_manager import ChatterActionManager - self.chat_id = chat_id - # 注意:ChatterActionManager 可能需要根据实际情况初始化 - self.action_manager = ChatterActionManager() + self.action_manager = action_manager async def generate(self, mode: ChatMode) -> Plan: """ @@ -112,10 +114,19 @@ class ChatterPlanGenerator: filtered_actions = {} for action_name, action_info in available_actions.items(): # 检查动作是否支持当前聊天类型 - if chat_type == action_info.chat_type_allow: - # 检查动作是否支持当前模式 - if mode == action_info.mode_enable: - filtered_actions[action_name] = action_info + chat_type_allowed = ( + isinstance(action_info.chat_type_allow, list) + and (ChatType.ALL in action_info.chat_type_allow or chat_type in action_info.chat_type_allow) + ) or action_info.chat_type_allow == ChatType.ALL or action_info.chat_type_allow == chat_type + + # 检查动作是否支持当前模式 + mode_allowed = ( + isinstance(action_info.mode_enable, list) + and (ChatMode.ALL in action_info.mode_enable or mode in action_info.mode_enable) + ) or action_info.mode_enable == ChatMode.ALL or action_info.mode_enable == mode + + if chat_type_allowed and mode_allowed: + filtered_actions[action_name] = action_info return filtered_actions diff --git a/src/plugins/built_in/affinity_flow_chatter/planner/planner.py b/src/plugins/built_in/affinity_flow_chatter/planner/planner.py index 83a280fa6..1483b73f2 100644 --- a/src/plugins/built_in/affinity_flow_chatter/planner/planner.py +++ b/src/plugins/built_in/affinity_flow_chatter/planner/planner.py @@ -46,7 +46,7 @@ class ChatterActionPlanner: """ self.chat_id = chat_id self.action_manager = action_manager - self.generator = ChatterPlanGenerator(chat_id) + self.generator = ChatterPlanGenerator(chat_id, action_manager) self.executor = ChatterPlanExecutor(action_manager) # 使用新的统一兴趣度管理系统