Workflow Node 系统负责:
- 统一节点协议(inputs/outputs/params)
- 校验 workflow 结构
- 执行 DAG 并产出结果
路径:packages/core/deepeye/workflows/registry.py
核心类:
NodeSpec:描述节点类型、端口、参数NodeRegistry:全局注册表
路径:packages/backend/app/node/*
关键点:
BaseNode在packages/backend/app/node/core/base.pyregister_node_specs与register_node_handlers在packages/backend/app/node/__init__.py- 通过
NODE_MODULES显式加载节点模块并收集BaseNode子类 - 领域内代码内聚:
- Dashboard 节点入口:
packages/backend/app/node/dashboard/node.py - Dashboard 内部实现:
packages/backend/app/node/dashboard/nl2dashboard/* - Dashboard 部署服务:
packages/backend/app/services/dashboard_deploy_service.py(按任务拉起独立容器,镜像来自docker/Dockerfile.dashboard) - Video 节点入口:
packages/backend/app/node/video/node.py - Video 内部实现:
packages/backend/app/node/video/config/*与packages/backend/app/node/video/render/*
- Dashboard 节点入口:
路径:packages/backend/app/services/workflow_engine.py
职责:
- 构建
ExecutionEngine - 注册 Node handler
- 注册 condition/transform(always/identity)
执行入口:
packages/backend/app/services/workflow_file_service.py
负责读取 workflow JSON → 校验 → 执行 → 发布事件
-
BaseNode- 必须实现
spec() - 可选实现
build_handler()
- 必须实现
-
ExecutionEngine- 运行 DAG
- 提供
on_node_start/on_node_endhook
-
WorkflowValidationError- 明确指出结构问题与端口错误
示例:新增 “CSV 导出”节点
- 编写节点类
# packages/backend/app/node/data/data_export_csv.py
from deepeye.workflows.registry import NodeSpec
from app.node.core.base import BaseNode
from deepeye.workflows.engine import NodeHandler
class DataExportCsv(BaseNode):
node_type = "data.export_csv"
@classmethod
def spec(cls) -> NodeSpec:
return NodeSpec(
type=cls.node_type,
description="Export rows to CSV file",
inputs={"rows": {"schema": "list[dict]", "required": True, "multiple": True}},
outputs={"path": {"schema": "string"}},
params_schema={"filename": {"type": "string", "required": True}},
)
@classmethod
def build_handler(cls, db, user_id, sandbox=None) -> NodeHandler | None:
async def handler(inputs, params, context):
filename = params.get("filename", "export.csv")
rows = inputs.get("rows", [])
# TODO: 写入 sandbox 文件
return {"path": f"/workspace/{filename}"}
return handler-
注册节点
在packages/backend/app/node/__init__.py的NODE_MODULES增加新模块路径。
register_node_specs会自动收集并注册对应BaseNode子类。 -
前端可见
/api/v1/workflow-nodes会自动返回新节点定义。