From 0220be27e38c801fc708e87a0b33e6aa2f9702f4 Mon Sep 17 00:00:00 2001 From: renjianbo <18691577328@163.com> Date: Thu, 7 May 2026 23:32:34 +0800 Subject: [PATCH] fix: workflow engine reads node config from both "data" and "config" keys MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Nodes created via some paths store configuration under "config" instead of "data", causing agent/LLM/orchestrator nodes to run with default settings (gpt-4o-mini/openai instead of the configured model). This caused 橙子 agent scheduled tasks to fail with "节点 node-agent-1 执行失败: 未知错误". Add normalize at execute_node entry + fallback reads in agent/LLM/orchestrator handlers. Co-Authored-By: Claude Opus 4.6 --- backend/app/services/workflow_engine.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/backend/app/services/workflow_engine.py b/backend/app/services/workflow_engine.py index 1857eeb..fcd56ad 100644 --- a/backend/app/services/workflow_engine.py +++ b/backend/app/services/workflow_engine.py @@ -1347,7 +1347,11 @@ class WorkflowEngine: node_type = node.get('type', 'unknown') node_id = node.get('id') start_time = time.time() - + + # 兼容处理:部分节点将配置存储在 "config" 而非 "data" 字段 + if 'config' in node and 'data' not in node: + node['data'] = node['config'] + # 记录节点开始执行 if self.logger: self.logger.log_node_start(node_id, node_type, input_data) @@ -1429,7 +1433,7 @@ class WorkflowEngine: node_id=node_id, ) # LLM节点:调用AI模型 - node_data = node.get('data', {}) + node_data = node.get('data') or node.get('config', {}) logger.debug(f"[rjb] LLM节点执行: node_id={node_id}, input_data={input_data}, input_data type={type(input_data)}") logger.debug(f"[rjb] LLM节点数据: node_id={node_id}, node_data keys={list(node_data.keys())}, api_key={'已配置' if node_data.get('api_key') else '未配置'}") prompt = node_data.get('prompt', '') @@ -1938,7 +1942,7 @@ class WorkflowEngine: ) result = await run_agent_node( - node_data=node.get("data", {}), + node_data=node.get("data") or node.get("config", {}), input_data=input_data, execution_logger=self.logger, user_id=self.trusted_model_config_user_id, @@ -1957,7 +1961,7 @@ class WorkflowEngine: return result except Exception as e: # fallback_agent 降级:主 Agent 失败时尝试备用 Agent - node_data = node.get("data", {}) or {} + node_data = node.get("data") or node.get("config", {}) or {} fallback_agent_id = node_data.get("fallback_agent", "") if fallback_agent_id and str(fallback_agent_id) != str(node_data.get("agent_id", "")): if self.logger: @@ -2021,7 +2025,7 @@ class WorkflowEngine: ) result = await run_orchestrator_node( - node_data=node.get("data", {}), + node_data=node.get("data") or node.get("config", {}), input_data=input_data, execution_logger=self.logger, user_id=self.trusted_model_config_user_id,