Skip to content

Flow Block

引用并执行另一个文档,实现工作流的模块化复用和嵌套调用。

功能说明

Flow Block 是一个数据节点,它引用项目中的另一个文档(workflow 或 skill),在运行时加载该文档的内容并作为子流程执行。子文档的所有数据节点输出会被收集为 Flow Block 的输出变量,可在后续 Block 中引用。

当你需要复用已有的工作流逻辑、将复杂流程拆分为多个子模块、或在不同文档间建立调用关系时,使用 Flow Block。

使用场景

  • 工作流复用:将通用的处理逻辑(如数据清洗、格式化)封装为独立文档,在多个主工作流中通过 Flow Block 调用
  • 模块化编排:将大型工作流拆分为多个子文档,通过 Flow Block 按序或并行调用,降低单个文档的复杂度
  • fire-and-forget:触发一个后台任务而不等待其完成(await=false 模式),适用于不需要返回结果的异步操作

配置参数

属性名类型说明默认值
targetDocumentIdstring目标文档 ID(编辑时使用)''
targetDeploymentIdstring目标部署版本 ID(发布后使用固定版本)''
inputJSONstring传入子文档的输入参数(JSON 序列化的 Record<string, ValueSource>'{}'
awaitboolean是否等待子文档执行完成true

await 模式说明

行为
true等待子文档执行完毕,收集输出变量后继续
falsefire-and-forget 模式,触发后立即继续,不等待结果

输出变量

Flow Block 的输出变量根据目标文档中的数据节点动态生成:

变量名类型说明
__default__object包含子文档所有数据节点输出的对象,键为 blockName
{blockName}any子文档中每个数据节点的输出,按节点名称访问
{blockId}any子文档中每个数据节点的输出,按节点 ID 访问

await=false(fire-and-forget 模式)时,输出固定为 { __default__: null, status: 'fire-and-forget' }

引用语法

{{flow_0}}                     -- 子文档全部输出对象
{{flow_0.generation_0}}        -- 子文档中 generation_0 的输出
{{flow_0.structure_0.name}}    -- 子文档中 structure_0 输出的 name 字段

使用示例

示例 1:调用子文档并使用结果

将用户输入传入子文档处理,使用返回的结构化数据:

[Input Block: user_query] — 用户输入
    |
[Flow Block: analyze] — 目标: "数据分析" 文档
    输入: query = {{user_query}}
    |
[Generation Block] — "根据分析结果 {{analyze.structure_0}} 生成报告"

示例 2:fire-and-forget 后台任务

触发日志记录任务,不等待结果:

[Generation Block: main_result] — 主要处理逻辑
    |
[Flow Block] — 目标: "日志记录" 文档, await: false
    输入: content = {{main_result}}
    (后台执行,不阻塞主流程)
    |
[下一个 Block] — 立即继续执行

运行时约束

  • 适用文档类型:workflow(Slash 菜单中排除了 skill 类型文档)
  • 可插入上下文:顶层文档、Condition 分支、Loop 内、Promise 分支
  • 不可嵌套场景:无特殊限制,但存在调用深度保护

安全保护机制

保护说明
循环引用检测通过 callStack 追踪调用链,检测到循环时报错终止
单节点调用上限同一目标文档的调用次数超过阈值时报错(防止无限递归)
总调用上限整个执行过程中 Flow 总调用次数超过阈值时报错(防止过深嵌套)

注意事项

  1. 函数调用语义:Flow 本质上是函数调用——目标文档的 Inputs 作为参数,Outputs 作为返回值。通过 inputJSON 传入参数,子文档中的 Input Block 接收这些参数
  2. 变量引用inputJSON 中可使用 @{blockId.varName} 引用上游变量,将当前文档的数据传递给子文档
  3. 循环引用防护:系统提供双层检测——发布时通过 DFS 深度优先遍历进行静态检测,运行时通过 callStack 进行动态检测。避免构建 A→B→C→D→A 这样的循环调用链
  4. 调用次数限制:系统对单节点调用次数和总调用次数都有上限保护,阈值从 site_settings 读取
  5. 文档加载优先级:优先从预加载缓存(flowDocuments)读取目标文档。缓存未命中时,若有 deploymentId 则查询已发布的 snapshot,否则查询文档的实时内容
  6. fire-and-forget 注意事项:await=false 模式下子文档在后台执行,其错误不会影响主流程,但也无法获取其执行结果
  7. 输出变量动态解析:编辑器中 Flow Block 的输出变量列表会根据目标文档的内容自动分析生成,无需手动定义

AI Workflow Editor