跳到主要内容

子工作流转换#

功能可用性

自 n8n 1.97.0 版本起,所有套餐均支持此功能。

使用子工作流转换可将工作流重构为可复用部件。引用其他节点的表达式将自动更新,并作为参数添加到执行工作流触发器节点中。

关于该概念的总体介绍,请参阅子工作流

选择子工作流节点#

要将部分工作流转换为子工作流,必须先在原始工作流中选择需要转换的节点。

通过选择一组有效节点实现。所选节点必须连续,且最多只能通过一个起始节点和一个结束节点与工作流其余部分连接。选择需满足以下条件:

  • 不得包含触发器节点
  • 选择范围内仅允许单个节点具有来自外部节点的传入连接
    • 该节点可拥有多个传入连接,但只能包含单个输入分支(这意味着不能是合并节点等类型)
    • 该节点不得具有来自选择范围内其他节点的传入连接
  • 选择范围内仅允许单个节点具有通向外部节点的传出连接
    • 该节点可拥有多个传出连接,但只能包含单个输出分支(例如不能是条件节点
    • 该节点不得具有通向选择范围内其他节点的传出连接
  • 选择范围必须包含输入节点与输出节点之间的所有节点

如何将部分工作流转换为子工作流#

在画布上选择目标节点,右键单击画布背景并选择转换为子工作流

注意事项#

大多数子工作流转换可正常运行,但需注意以下限制:

  • 必须手动设置输入输出类型约束:默认情况下子工作流输入输出允许所有类型。可在子工作流的执行子工作流触发器节点编辑字段(设置)节点中设置预期类型(标记为返回且仅当子工作流存在输出时包含)

  • 对AI节点的支持有限:处理AI工具等子节点时,必须全选它们,并在转换前复制与其他AI代理共享的任何节点

  • 使用v1执行顺序:无论父工作流设置如何,新工作流均使用v1执行顺序——可在设置中调整此项

  • 需特别注意first()last()all()等访问函数:使用这些函数的表达式并不总能完美适配子工作流上下文。n8n会尝试通过转换保留其功能,但仍需验证在新上下文中的运行效果

    子节点参数后缀

    n8n会为通过这些函数访问的变量名添加_firstItem_lastItem_allItems等后缀。由于子工作流上下文中的项目顺序可能不同,这有助于保留原始表达式信息

  • itemMatching函数需要固定索引:使用itemMatching函数时,索引值不能使用表达式,必须传入固定数值