第 27 期:模块化构建 — Sub-Workflow 子工作流与 Workflow Tool
为什么需要子工作流?
当一个工作流超过 20 个节点时,可维护性急剧下降。子工作流是 n8n 的模块化机制。
graph TB
subgraph "❌ 单体工作流 (难以维护)"
A[节点1] --> B[节点2] --> C[...] --> D[节点20+]
end
subgraph "✅ 模块化架构"
Main[主工作流] --> Sub1["📦 子工作流: 数据清洗"]
Main --> Sub2["📦 子工作流: AI 分析"]
Main --> Sub3["📦 子工作流: 通知发送"]
end
style Sub1 fill:#22c55e,stroke:#16a34a,color:#fff
style Sub2 fill:#22c55e,stroke:#16a34a,color:#fff
style Sub3 fill:#22c55e,stroke:#16a34a,color:#fff1. Execute Workflow 节点
sequenceDiagram
participant Main as 📋 主工作流
participant Exec as 🔗 Execute Workflow
participant Sub as 📦 子工作流
Main->>Exec: 传递输入 Items
Exec->>Sub: 启动子工作流执行
Sub->>Sub: 执行内部逻辑
Sub-->>Exec: 返回输出 Items
Exec-->>Main: 继续主流程// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
// Execute Workflow 节点配置
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
// Source: 选择目标子工作流
// - By ID: 直接指定工作流 ID
// - By URL: 动态指定 (适合 CI/CD)
// Mode:
// - "Wait for Sub-Workflow" (同步): 等待子工作流执行完毕再继续
// - "Don't Wait" (异步): 触发后立即继续,不等待结果
// 适用: 发送通知等不需要返回值的场景
// Input Data:
// 子工作流通过 Trigger 节点接收主工作流传递的 Items
// 子工作流的最后一个节点的输出 = 返回给主工作流的数据
2. Workflow Tool — Agent 调用子工作流
graph TB
CT[💬 Chat Trigger] --> Agent[🤖 AI Agent]
subgraph "Agent 工具集"
Agent --> WT1["🔗 Workflow Tool
'查询订单'
(子工作流 #1)"]
Agent --> WT2["🔗 Workflow Tool
'生成报告'
(子工作流 #2)"]
Agent --> WT3["🔗 Workflow Tool
'发送邮件'
(子工作流 #3)"]
end
WT1 --> SW1[📦 订单查询工作流]
WT2 --> SW2[📦 报告生成工作流]
WT3 --> SW3[📦 邮件发送工作流]
style Agent fill:#ff6d5b,stroke:#e55a4e,color:#fff// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
// Workflow Tool 配置
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
// Tool Name: "generate_weekly_report"
// Tool Description:
// "生成指定日期范围的周报。
// 输入: startDate (YYYY-MM-DD), endDate (YYYY-MM-DD)
// 输出: Markdown 格式的周报内容"
// Workflow: 选择"周报生成"子工作流
//
// 工作原理:
// 1. Agent 决定需要生成周报
// 2. 调用 Workflow Tool,传入日期参数
// 3. 子工作流执行: 查数据库 → 汇总 → 格式化
// 4. 子工作流返回 Markdown 周报
// 5. Agent 将周报呈现给用户
3. 设计模式
模式 A: 管道模式
graph LR
Main[主工作流] --> S1["📦 清洗"] --> S2["📦 分析"] --> S3["📦 输出"]模式 B: 扇出模式
graph TB
Main[主工作流] --> S1["📦 发 Slack"]
Main --> S2["📦 发邮件"]
Main --> S3["📦 写数据库"]模式 C: 路由模式
graph TB
Main[主工作流] --> SW{Switch}
SW -->|"类型 A"| S1["📦 处理 A"]
SW -->|"类型 B"| S2["📦 处理 B"]下一步
Ep 28 将讲解 n8n 版本控制与团队协作——Git 集成、环境变量管理与多环境部署。