第 27 期:模块化构建 — Sub-Workflow 子工作流与 Workflow Tool

⏱ 预计阅读 6 分钟 更新于 2026/4/9

为什么需要子工作流?

当一个工作流超过 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:#fff

1. 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 集成、环境变量管理与多环境部署。