开始之前
子工作流就是一个普通工作流,只多了一个特殊的第一节点,所以前面的几课就够用了。有两处版本说明。子工作流转换功能从 n8n 1.97.0 开始提供。另外,按发布说明,n8n 3.0 从 2026 年 10 月 27 日起处于抢先体验阶段,它删掉了旧版节点里的两种指定子工作流的方式。两处下面都会讲到。
子工作流还不占额度。执行页面说,一个工作流用 Execute Sub-workflow 节点调用另一个工作流时,只有父工作流的那次执行计数。
n8n 3.0 抢先体验
Execute Sub-workflow 节点不再有 Local File 和 URL 两种来源。
来源:n8n Docs: v3.0 breaking changes (2026年11月5日 查阅)
搭一个子工作流并调用它
下面这个示例对象是为本课写的。它放进触发器的 JSON 示例模式,用来描述父工作流必须传什么:
{
"email": "ada@example.com",
"plan": "pro"
}- 新建一个工作流,它就是子工作流。文档还允许从父工作流里直接创建:在 Execute Sub-workflow 节点里选 Database 来源和 From list,再选 Create a sub-workflow。
- 添加 Execute Sub-workflow Trigger 节点。在触发器分类里搜索时,它也叫 When Executed by Another Workflow。
- 设置 Input data mode。这个示例选 Define using JSON example,把上面的对象粘贴进去。
- 添加完成工作的节点,然后选择 Save。文档提醒,有错误的子工作流,父工作流无法触发它。
- 打开父工作流,添加 Execute Sub-workflow 节点。在 Source 下选 Database,再在 From list 里选子工作流,或者在 Workflow ID 里填它的 ID。ID 就是子工作流网址里
/workflow/后面的那串字符。 - 填写 n8n 从子工作流触发器拉过来的输入项,然后运行父工作流。
- 打开 Execute Sub-workflow 节点,选择 View sub-execution。子工作流自己的执行记录里,也有一个链接指回父工作流的这次运行。
数据怎样传入、怎样传回
数据分两步穿过。Execute Sub-workflow 节点把数据交给子工作流的触发器,子工作流的最后一个节点再把数据送回调用它的节点。调用方的 Mode 控制第一步:Run once with all items 把所有输入项放进一次执行,Run once for each item 则每个数据项运行一次子工作流。选项 Wait for Sub-Workflow Completion 决定父工作流等不等。
第二步有个版本上的坑。最后一个节点运行多次时,比如接在 Loop Over Items 之后,1.2 版的触发器会返回每一次运行的数据项,按分支拼接起来。1 和 1.1 版保持旧行为,只返回最后一次运行,另有一个 Items to Return 选项可以合并所有运行。n8n 2.23 的发布说明,日期是 2026 年 5 月 27 日,写了这个改动,而作为 LangChain 工具的调用方,始终只拿到最后一次运行的输出。
如果你在调用方里去掉了某个必填输入,子工作流收到的就是 null,而 Attempt to convert types 会尝试把数据转成子工作流要求的类型。
| 输入数据模式 | 你要定义什么 | 取舍 |
|---|---|---|
| Define using fields below | 输入名称和数据类型 | 调用方把它们显示成字段,并替你填好 |
| Define using JSON example | 一个带有预期数据项和类型的示例对象 | 写起来快,示例本身也是说明 |
| Accept all data | 什么都不定义 | 没有必填输入,所以子工作流要自己处理各种异常或缺失的值 |
把大任务拆成批次
内存页面建议在工作流内存不足时用子工作流,做法很具体。乍一看有点反直觉,因为它至少多出两个节点。好处是子工作流只保存当前这一批的数据,这一批结束后内存就空出来了。
- 在父工作流里放一个 Loop Over Items 节点,把数据项切成批次。
- 在循环里,用 Execute Sub-workflow 节点调用子工作流。
- 让子工作流处理一批数据里的繁重工作,只返回一个很小的结果,比如数量或状态,不要返回原始数据行。
转换已经搭好的节点
子工作流转换会把选中的节点移进一个新的子工作流,原来的位置留下一个 Execute Sub-workflow 节点。选中节点,在画布空白处右键,选择 Convert to sub-workflow。引用其他节点的表达式会被更新,并作为参数加到新的触发器上。
选择规则很严格。这些节点必须是连续的一段,最多从一个节点进入、从一个节点离开,而且选中的节点里不能有触发器。Merge 节点不能当入口,If 节点不能当出口。然后再看文档列出的注意事项:
- 输入输出类型:默认都允许任何类型。要在触发器里,以及标为 Return 的 Edit Fields 节点里手动设置约束。
- 执行顺序:无论父工作流用的是哪个,新工作流都用 v1 顺序,你可以在设置里改回去。
first()、last()和all():n8n 可能改写它们,并在参数名后加上_firstItem、_lastItem、_allItems这样的后缀,所以每一处都要检查。itemMatching:它需要固定的下标,用表达式当下标不能转换。- AI 节点:文档仍然要求选中智能体的所有子节点,与其他智能体共用的节点要先复制一份。从 n8n 2.32 起,转换会自动把挂着的 AI 子节点一起带过去。
什么时候拆、谁能调用
触发器页面给了两个拆分的理由。一个是复用:从不同来源取数据的几个工作流,可以都调用同一个生成报告的工作流。另一个是体量,上面的分批做法就是它最锋利的形式。一个很短的线性流程拆了没有好处,而且每次调用都会多出一条要打开的执行记录,调试时用的就是 View sub-execution。
调用还有权限这一面。在子工作流的设置里,This workflow can be called by 限制谁能调用它。
n8n 团队怎么说把工作拆成子工作流
2025 年 12 月 5 日,n8n 团队在 X 上发了一条小技巧:用子工作流让工作流的结构保持清爽,也让大数据集的内存处理更好。同一条帖子还重申了本课开头讲的额度规则:只有主工作流的运行计数。上面用 Loop Over Items 分批的做法,就是这条技巧落到实处的样子。
三个月前,2025 年 9 月 4 日,团队在 X 上分享过这个快捷操作:选中节点,右键,选 Convert X nodes to sub-workflow。帖子里的菜单名带着节点数量,文档里叫 Convert to sub-workflow。先拿三个相连的节点试一次,再逐个检查它改写过的表达式。
用子工作流让工作流的结构保持清爽,也让大数据集的内存处理更好。

X 官方嵌入卡片的截图,拍摄于 2026 年 11 月 5 日,时间为 UTC。点击截图可到 X 上打开原帖。
常见错误
- 调用一个有错误的子工作流。文档说父工作流无法触发它,所以要先修好并保存子工作流。
- 习惯性地选 Accept all data。这样子工作流不定义任何必填输入,调用方也不显示输入字段,所有检查都落在你自己身上。
- 关掉 Wait for Sub-Workflow Completion,却又搭了需要结果的后续步骤。关掉之后,父工作流不等待就往下走。
- 继续用 Local File 或 URL 来源。n8n 3.0 把这两种来源从 Execute Sub-workflow 节点里删掉了,仍在用的节点会失败。请导入子工作流并用 Database 来源,或者用 Define Below 粘贴它的 JSON(节点 1.1 及更早版本里叫 Parameter)。
- 以为循环里的最后一个节点每次运行都会通过旧版触发器返回。旧版本只返回最后一次运行,除非设置了 Items to Return。
- 转换一个有两个入口,或者里面带触发器的选区。转换需要一个入口节点、一个出口节点,而且没有触发器。
自己试一试
- 搭好示例的这一对工作流,然后在父工作流的节点里去掉一个输入,看子工作流收到什么。文档说,那一项收到的是 null。
- 在你自己的某个工作流里选中三个相连的节点,把它们转换掉,再检查每个用到
first()、last()或all()的表达式。 - 把调用方从 Run once with all items 改成 Run once for each item,比较这次运行产生了多少次子执行。
- 把子工作流的调用方设置改成比 Any workflow 更窄的选项,看看父工作流有什么反应。
接下来学什么
第 3 课深入单个节点:Code 节点,处理内置节点覆盖不到的转换。子工作流也是 AI 智能体用到你自己逻辑的方式。AI 智能体那一课提到的 Call n8n Workflow Tool 节点,调用的就是一个以 Execute Sub-workflow Trigger 开头的工作流。另外,Mindket 的 n8n 工作流能看到现成的工作流是怎样拆分任务的。
自测一下
子工作流必须以哪个节点开头?
查看答案
C. Execute Sub-workflow Trigger 子工作流以 Execute Sub-workflow Trigger 开头,调用它的节点把数据交给这个触发器。
哪种输入数据模式会让子工作流自己处理缺失或异常的值?
查看答案
A. Accept all data Accept all data 不定义任何必填输入,所以子工作流要能应付任何输入。
父工作流循环处理几千行数据,内存不够用了。本课建议怎么做?
查看答案
D. 在子工作流里按批次做繁重的工作,只返回一个很小的结果 子工作流只保存当前这一批的数据,这一批结束后内存就空出来了。
Execute Sub-workflow 节点仍在用 Local File 来源,在 n8n 3.0 上会怎样?
查看答案
B. 报错失败 n8n 3.0 删除了 Local File 和 URL 来源,仍在用的节点会失败。
常见问题
在 n8n 里怎样从一个工作流调用另一个工作流?
在父工作流里添加 Execute Sub-workflow 节点,选 Database 来源,再从列表里选子工作流,或者填它的 ID。子工作流必须以 Execute Sub-workflow Trigger 开头。
子工作流的执行会计入我的 n8n 套餐吗?
不会。文档说,子工作流的执行不计入套餐的每月执行次数和活跃工作流数量,而且只有父工作流这次顶层执行才计入额度。
怎样从父工作流找到子工作流的执行记录?
每次调用都会留下自己的执行记录,两个方向都有链接。在父工作流里,Execute Sub-workflow 节点上有 View sub-execution 链接,子工作流的那次运行也会链接回父工作流。
已经搭好的节点能转成子工作流吗?
能,从 n8n 1.97.0 开始。选中一段连续的节点,要求有一个入口、一个出口、没有触发器,在画布空白处右键,选择 Convert to sub-workflow。
AI 智能体能调用子工作流吗?
能,工具节点可以调用它,智能体就能复用你已经搭好的逻辑。Call n8n Workflow Tool 节点指向一个以 Execute Sub-workflow Trigger 开头的工作流,并像 Execute Sub-workflow 节点那样,拉取触发器定义的输入字段。
n8n 3.0 里子工作流有什么变化?
Local File 和 URL 来源没有了,调用方策略里的 Any workflow 也即将移除。升级之前,n8n 的发布公告要求在 2.39 或更高版本上打开 Settings 里的 Migration Report 看一遍。
资料来源
- n8n Docs: Break workflows into smaller parts https://docs.n8n.io/build/flow-logic/break-workflows-into-smaller-parts
- n8n Docs: Convert to sub-workflows https://docs.n8n.io/build/flow-logic/convert-to-sub-workflows
- n8n Docs: Execute Sub-workflow node https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.executeworkflow
- n8n Docs: Execute Sub-workflow Trigger node https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.executeworkflowtrigger
- n8n Docs: Understand executions https://docs.n8n.io/build/understand-workflows/understand-executions
- n8n Docs: Configure workflow settings https://docs.n8n.io/build/manage-workflows/configure-workflow-settings
- n8n Docs: Fix memory issues https://docs.n8n.io/deploy/host-n8n/configure-n8n/scaling/fix-memory-issues
- n8n Docs: Release notes https://docs.n8n.io/changelog/release-notes
- n8n Docs: v3.0 breaking changes https://docs.n8n.io/changelog/v30-breaking-changes
- n8n Docs: Release notes 1.x https://docs.n8n.io/changelog/release-notes-1.x
- n8n Blog: Introducing n8n 3.0 https://blog.n8n.io/introducing-n8n-v3/
- n8n.io on X: use sub-workflows to improve memory handling, 5 December 2025 https://x.com/n8n_io/status/1996965358293438760
- n8n.io on X: convert nodes to a sub-workflow, 4 September 2025 https://x.com/n8n_io/status/1963603014188462414
- n8n on YouTube: n8n Advanced Course (4/8) - Subworkflows https://www.youtube.com/watch?v=xr05Ie_Hkyg


