Sub-Workflow(子工作流)是n8n中一个强大的功能,它允许你把一个大的、复杂的工作流分解成多个更小、可复用的工作流模块。想象一下,就像编程中的函数一样——你可以创建一个做特定事情的Sub-Workflow,然后在多个地方调用它。
点击获取最新AI资讯、n8n工作流、开发经验分享
Sub-Workflow的核心优势
- n8n 版本 1.97.0 或更高
- 已有一个可运行的n8n实例(云版本或本地部署)
- 了解基本的n8n节点和工作流概念
要将部分工作流转换为Sub-Workflow,首先需要选择合适的节点。选择是连续的,这意味着所有选中的节点必须形成一条完整的链路。
选择节点的5个关键规则
✅ 必须满足:
- 不能包含触发节点(Trigger Nodes)
- 触发节点是工作流的起点,如”Webhook”、”定时触发”等
- 子工作流会通过”Execute Sub-workflow Trigger”节点接收输入
- 最多只有1个输入节点
- 从工作流外部进入Sub-Workflow的连接只能来自一个节点
- 该节点可以有多个传入连接,但只能是单一输入分支
- 不能是”Merge”节点这样的多输入汇聚节点
- 最多只有1个输出节点
- Sub-Workflow向工作流外部输出的连接只能到一个节点
- 该节点可以有多个传出连接,但只能是单一输出分支
- 不能是”If”节点这样的分支节点
- 必须连续包含中间所有节点
- 如果你选择了节点A和节点C,那么连接两者的节点B也必须被选中
- 不能有”缺口”存在
- 内部连接必须完整
- 选中的节点之间必须有清晰的连接关系
- 不能有悬空或孤立的节点
❌ 常见的选择错误
转换Sub-Workflow的步骤非常简单:
操作步骤
- 在画布上选择要转换的节点
- 点击第一个节点
- 按住 键,点击最后一个节点(自动选中中间的所有节点)
- 或者单独点击每个节点,同时按住 键
- 右键点击选中区域
- 在画布背景上右键
- 选择 “Convert to sub-workflow”
- 点击菜单中的这个选项
- n8n自动为你完成以下工作:
- ✨ 创建一个新的Sub-Workflow
- ✨ 把选中的节点移到新工作流
- ✨ 在原工作流中插入”Execute Sub-workflow”节点
- ✨ 自动配置输入/输出参数
- ✨ 更新所有表达式引用
就这样! 你的工作流现在变得更加模块化了。
转换完成后,还需要手动配置数据类型约束,这对于确保数据传递的安全性和准确性非常重要。
配置Sub-Workflow的输入
打开新创建的Sub-Workflow,找到”Execute Sub-workflow Trigger”节点:
步骤:
- 双击”Execute Sub-workflow Trigger”节点
- 在”Input data mode”选择一种定义方式:
n8n 工作流 教程
📝 三种输入定义模式
推荐做法:
使用JSON示例,n8n会自动识别:
- → String
- → Number
- → Boolean
配置Sub-Workflow的输出
找到Sub-Workflow中的最后一个节点,添加”Return”(返回)节点来定义输出:
步骤:
- 在Sub-Workflow中添加一个”Edit Fields (Set)”节点
- 这个节点会自动标记为”Return”
- 定义你要返回给父工作流的字段
- 同样设置每个字段的数据类型
示例输出配置:
现在回到原始工作流,查看新生成的”Execute Sub-workflow”节点:
调用Sub-Workflow
- 节点会自动显示Sub-Workflow定义的输入字段
- 根据子工作流的输入要求填入数据
- 可以使用表达式从其他节点映射数据
- 映射数据示例:
- 可选:启用类型转换
- 勾选”Attempt to convert types”
- n8n会尝试自动转换数据类型
n8n的Sub-Workflow转换虽然强大,但有一些需要特别注意的地方:
1️⃣ 表达式函数需要特殊处理
使用 、、 这样的访问器函数时要特别小心:
n8n会自动添加后缀:
- – 获取第一条数据
- – 获取最后一条数据
- – 获取所有数据
建议: 转换后务必检查表达式是否正确工作!
2️⃣ AI节点的特殊处理
如果Sub-Workflow包含AI工具类节点:
- 必须选择所有相关节点一起转换
- 可能需要为其他AI Agents复制共享节点
- 某些AI功能在Sub-Workflow中的表现可能与主工作流不同
3️⃣ 执行顺序版本
- 新的Sub-Workflow会默认使用 执行顺序
- 与主工作流的执行顺序版本可能不同
- 可在Sub-Workflow设置中手动调整
4️⃣ itemMatching函数的限制
5️⃣ 错误会阻止调用
- 如果Sub-Workflow中存在任何运行错误
- 父工作流就无法调用它
- 必须先修复Sub-Workflow中的所有错误
现在让我们看一个实际的、可执行的工作流示例。这个工作流演示了:
- 如何从API获取客户数据
- 通过Sub-Workflow进行数据转换和验证
- 最后保存到数据库
📥 完整工作流JSON
📤 Sub-Workflow JSON (数据转换与验证)
这个Sub-Workflow负责清理、验证和转换客户数据:
🚀 如何使用这个案例
- 导入主工作流JSON
- 在n8n中新建工作流
- 点击”Export”,选择”Import from JSON”
- 粘贴主工作流JSON
- 导入Sub-Workflow JSON
- 创建一个新工作流
- 粘贴Sub-Workflow JSON
- 保存并记下工作流ID
- 连接Sub-Workflow
- 回到主工作流
- 编辑”Execute Sub-Workflow”节点
- 选择刚才创建的Sub-Workflow
- 映射输入字段
- 测试工作流
- 通过Webhook发送测试数据
- 检查数据转换是否正确
- 验证是否成功保存到数据库
✅ 何时使用Sub-Workflow
- 工作流变得太复杂 → 超过20个节点
- 逻辑可以复用 → 多个工作流需要相同的处理步骤
- 需要独立测试 → 某个功能块需要单独验证
- 团队协作 → 不同成员负责不同的工作流模块
- 性能优化 → 主工作流因为过大而变慢
❌ 何时不使用Sub-Workflow
- 只是简单的2-3个节点流程 → 直接在主工作流中处理
- 一次性的特殊逻辑 → 没有复用价值
- 需要频繁修改 → Sub-Workflow修改会影响所有调用它的工作流
💪 Sub-Workflow设计原则
- 单一职责 → 每个Sub-Workflow只做一件事
- 清晰的接口 → 定义明确的输入输出
- 易于理解 → 节点命名清晰,逻辑清楚
- 独立可测 → 不依赖外部状态,可单独测试
- 错误处理 → 包含必要的错误检查和日志记录
❓ 问题1:转换后表达式不工作
症状: 报错
解决方案:
- 检查表达式中是否使用了 、、
- 这些函数在Sub-Workflow中需要特殊处理
- 使用添加了后缀的变量名:、、
❓ 问题2:Sub-Workflow无法被调用
症状: Execute Sub-Workflow节点报红色错误
解决方案:
- 检查Sub-Workflow中是否有错误
- 打开Sub-Workflow,运行测试看是否有问题
- 确保Sub-Workflow已保存
- 检查触发节点配置是否正确
❓ 问题3:数据类型不匹配
症状: Sub-Workflow接收到null或类型错误的数据
解决方案:
- 手动配置输入/输出的数据类型
- 启用”Attempt to convert types”选项
- 使用表达式准确映射数据源
❓ 问题4:AI节点无法在Sub-Workflow中工作
症状: AI相关功能在Sub-Workflow中失效
解决方案:
- 确保选择了所有相关的AI节点
- 可能需要复制某些共享节点
- 参考官方AI节点文档了解兼容性
Sub-Workflow转换是n8n中实现工作流模块化的强大工具。通过本教程,你现在已经掌握了:
现在,你已经可以开始构建更加高效、可维护的n8n工作流了。记住,好的模块化设计不仅能提高开发效率,还能让团队协作更加顺畅!
官方文档
n8n系列教程
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/250855.html原文链接:https://javaforall.net
