Flow Block
引用并执行另一个文档,实现工作流的模块化复用和嵌套调用。
功能说明
Flow Block 是一个数据节点,它引用项目中的另一个文档(workflow 或 skill),在运行时加载该文档的内容并作为子流程执行。子文档的所有数据节点输出会被收集为 Flow Block 的输出变量,可在后续 Block 中引用。
当你需要复用已有的工作流逻辑、将复杂流程拆分为多个子模块、或在不同文档间建立调用关系时,使用 Flow Block。
使用场景
- 工作流复用:将通用的处理逻辑(如数据清洗、格式化)封装为独立文档,在多个主工作流中通过 Flow Block 调用
- 模块化编排:将大型工作流拆分为多个子文档,通过 Flow Block 按序或并行调用,降低单个文档的复杂度
- fire-and-forget:触发一个后台任务而不等待其完成(await=false 模式),适用于不需要返回结果的异步操作
配置参数
| 属性名 | 类型 | 说明 | 默认值 |
|---|---|---|---|
targetDocumentId | string | 目标文档 ID(编辑时使用) | '' |
targetDeploymentId | string | 目标部署版本 ID(发布后使用固定版本) | '' |
inputJSON | string | 传入子文档的输入参数(JSON 序列化的 Record<string, ValueSource>) | '{}' |
await | boolean | 是否等待子文档执行完成 | true |
await 模式说明
| 值 | 行为 |
|---|---|
true | 等待子文档执行完毕,收集输出变量后继续 |
false | fire-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 总调用次数超过阈值时报错(防止过深嵌套) |
注意事项
- 文档加载优先级:优先从预加载缓存(flowDocuments)读取目标文档。缓存未命中时,若有 deploymentId 则查询 deployments 表的 snapshot,否则查询 documents 表的实时内容
- 变量传递:通过 inputJSON 可以向子文档传入参数,子文档中可通过 Input Block 接收这些参数
- 循环引用:如果 A 文档调用 B、B 又调用 A,运行时会检测到循环并报错终止,不会无限递归
- 调用次数限制:系统对单节点调用次数和总调用次数都有上限保护,阈值从 site_settings 读取
- fire-and-forget 注意事项:await=false 模式下子文档在后台执行,其错误不会影响主流程,但也无法获取其执行结果
- 输出变量动态解析:编辑器中 Flow Block 的输出变量列表会根据目标文档的内容自动分析生成,无需手动定义