Files
ai-agent-admin/backend-fastapi/ai_platform/nodes/builtin/parallel_node.py
T
2026-06-08 18:14:59 +08:00

115 lines
3.2 KiB
Python

"""
并行分支节点
"""
import logging
from typing import Any, Dict, List
from ..base import BaseNode, NodeContext, NodeResult
from ..registry import NodeRegistry
logger = logging.getLogger(__name__)
@NodeRegistry.register
class ParallelNode(BaseNode):
"""
并行分支节点
将工作流分成多个并行分支同时执行
"""
node_type = 'parallel'
node_name = '并行分支'
node_category = 'logic'
node_icon = 'git-fork'
node_description = '将工作流分成多个并行分支同时执行'
supports_branches = True
inputs = [
{
'name': 'input',
'type': 'any',
'description': '输入数据',
},
]
outputs = [
{
'name': 'branches',
'type': 'array',
'description': '并行分支 ID 列表',
},
]
def execute(self, context: NodeContext) -> NodeResult:
"""
执行并行分支节点
返回所有需要并行执行的分支 ID 列表
"""
try:
# 获取配置的分支
branches = self.config.get('branches', [])
if not branches:
# 如果没有配置分支,返回默认的两个分支
branches = [
{'id': 'branch_1', 'name': '分支 1'},
{'id': 'branch_2', 'name': '分支 2'},
]
branch_ids = [b.get('id') for b in branches if b.get('id')]
return NodeResult(
success=True,
output=branch_ids,
output_variables={
'parallel_branches': branch_ids,
},
metadata={
'is_parallel': True,
'branch_count': len(branch_ids),
'branches': branches,
},
)
except Exception as e:
logger.exception(f'并行分支节点执行失败: {e}')
return NodeResult(
success=False,
error=str(e),
)
@classmethod
def get_config_schema(cls) -> Dict[str, Any]:
"""获取配置 Schema"""
return {
'type': 'object',
'properties': {
'branches': {
'type': 'array',
'title': '并行分支',
'description': '定义并行执行的分支',
'items': {
'type': 'object',
'properties': {
'id': {
'type': 'string',
'title': '分支 ID',
},
'name': {
'type': 'string',
'title': '分支名称',
},
},
'required': ['id'],
},
'default': [
{'id': 'branch_1', 'name': '分支 1'},
{'id': 'branch_2', 'name': '分支 2'},
],
},
},
}