From 00dec5c10905fb5d5d49a7b7da0a99bc7ece3945 Mon Sep 17 00:00:00 2001 From: Windpicker-owo <3431391539@qq.com> Date: Mon, 10 Nov 2025 16:07:13 +0800 Subject: [PATCH] =?UTF-8?q?feat(plan=5Ffilter):=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E5=8A=A8=E4=BD=9C=E5=8F=82=E6=95=B0=E8=BF=87=E6=BB=A4=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=EF=BC=8C=E7=A7=BB=E9=99=A4=E5=A4=9A=E4=BD=99=E5=8F=82?= =?UTF-8?q?=E6=95=B0=E4=BB=A5=E4=BC=98=E5=8C=96=E5=8A=A8=E4=BD=9C=E5=A4=84?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../planner/plan_filter.py | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/src/plugins/built_in/affinity_flow_chatter/planner/plan_filter.py b/src/plugins/built_in/affinity_flow_chatter/planner/plan_filter.py index 94a7485ee..2cf3e390d 100644 --- a/src/plugins/built_in/affinity_flow_chatter/planner/plan_filter.py +++ b/src/plugins/built_in/affinity_flow_chatter/planner/plan_filter.py @@ -498,6 +498,9 @@ class ChatterPlanFilter: if thinking and thinking != "未提供思考过程": action_data["thinking"] = thinking + # 根据动作定义过滤多余参数 + action_data = self._filter_action_parameters(action, action_data, plan) + target_message_obj = None if action not in ["no_action", "no_reply", "do_nothing", "proactive_reply"]: original_target_id = action_data.get("target_message_id") @@ -633,6 +636,48 @@ class ChatterPlanFilter: ) return parsed_actions + def _filter_action_parameters(self, action_name: str, action_data: dict, plan: Plan) -> dict: + """根据动作定义过滤多余的参数 + + Args: + action_name: 动作名称 + action_data: LLM返回的动作参数 + plan: Plan对象,用于获取可用动作信息 + + Returns: + 过滤后的参数字典 + """ + # 获取该动作的定义 + action_info = plan.available_actions.get(action_name) + if not action_info: + logger.debug(f"动作 {action_name} 不在可用动作列表中,保留所有参数") + return action_data + + # 获取该动作定义的合法参数 + defined_params = set(action_info.action_parameters.keys()) + + # 合法参数集合 + valid_params = defined_params + + # 过滤参数 + filtered_data = {} + removed_params = [] + + for key, value in action_data.items(): + if key in valid_params: + filtered_data[key] = value + else: + removed_params.append(key) + + # 记录被移除的参数 + if removed_params: + logger.info( + f"🧹 [参数过滤] 动作 '{action_name}' 移除了多余参数: {removed_params}. " + f"合法参数: {sorted(valid_params)}" + ) + + return filtered_data + def _filter_no_actions(self, action_list: list[ActionPlannerInfo]) -> list[ActionPlannerInfo]: non_no_actions = [a for a in action_list if a.action_type not in ["no_action", "no_reply"]] if non_no_actions: