Skip to content

Promise Block

并行执行多个分支,根据完成策略决定何时结束,适用于需要同时处理多个独立任务的场景。

功能说明

Promise Block 是一个并行执行容器,将多个分支(Branch)同时启动执行。每个分支可以包含任意数量的 Block,所有分支并行运行,互不干扰。通过完成策略(n 参数)控制何时结束:可以等待全部完成、等待第一个成功(race 模式)、或等待前 N 个成功。

当你需要同时调用多个 AI 模型对比结果、并行处理多个数据源、或执行多路任务择优选取时,使用 Promise Block。

使用场景

  • 多模型竞速:将同一 prompt 发送给不同 AI 模型,取最快返回的结果(n=1 race 模式)
  • 并行数据处理:同时查询多个数据源或 API,汇总所有结果(n=0 all 模式)
  • 批量展开执行:将一个列表展开为多个并行任务,每个任务处理列表中的一个元素(expand 模式)

配置参数

Promise 容器

属性名类型说明默认值
nnumber完成策略:0=全部成功, 1=第一个成功(race), N=前N个成功0
exposeInternalVariablesboolean是否将完成分支的内部变量暴露到父上下文true

完成策略详解

n 值模式行为
0all全部分支必须成功才算 fulfilled
1race第一个成功即完成,取消其余分支
2,3,...first N前 N 个成功即完成,取消其余分支

Branch 分支

属性名类型说明默认值
mode'single' | 'expand'执行模式:单次执行 / 展开为多个并行任务'single'
conditionCondition | null门控条件,不满足时跳过该分支null
listValueSource | nullexpand 模式下的列表来源(与 count 互斥)null
countnumber | nullexpand 模式下的固定展开次数(与 list 互斥)null

expand 模式

  • list 模式:从变量获取数组,按数组长度展开,每个任务注入 item(当前元素)和 index(0-based 索引)
  • count 模式:固定展开 N 次,每个任务注入 index(0-based 索引)

输出变量

聚合变量

变量名类型说明
__default__array所有成功结果的 outputs 数组(按完成顺序)
countnumber成功分支的数量
statusstring'fulfilled'(达到 n 目标)或 'partial'(未达到)
failedarray失败/跳过的分支记录,含 branchId、branchName、error
cancelledarray被取消的分支记录,含 branchId、branchName

按索引访问

变量名类型说明
0, 1, 2...object按完成顺序的各分支 outputs 对象
{branchId}object | array指定分支的 outputs;expand 模式下为数组

引用语法

{{promise_0.status}}           -- 'fulfilled' 或 'partial'
{{promise_0.count}}            -- 成功数量
{{promise_0.__default__}}      -- 全部成功结果数组
{{promise_0.0}}                -- 第一个完成的分支 outputs
{{promise_0.failed}}           -- 失败/跳过记录数组

使用示例

示例 1:多模型竞速

使用 race 模式(n=1),将同一问题发给两个模型,取最快的结果:

[Promise Block: compare] — n=1 (race)
  ├─ Branch 1:
  │   └─ [Generation Block: gpt] — 模型: GPT-4, prompt: "解释量子计算"
  └─ Branch 2:
      └─ [Generation Block: claude] — 模型: Claude, prompt: "解释量子计算"

后续引用: {{compare.0}} — 最快返回的结果

示例 2:列表展开并行处理

使用 expand 模式批量处理数组中的每个元素:

[Code Block: urls] — 输出 URL 列表 ["url1", "url2", "url3"]
    |
[Promise Block: fetch_all] — n=0 (all)
  └─ Branch 1 (expand, list=@urls):
      └─ [Generation Block] — "总结 {{item}} 的内容"
      (自动展开为 3 个并行任务,每个任务的 item 为对应 URL)

后续引用: {{fetch_all.__default__}} — 所有结果数组

运行时约束

  • 适用文档类型:workflow(Slash 菜单中排除了 skill 类型文档)
  • 可插入上下文:顶层文档内容区域
  • 不可嵌套场景
    • Promise 内不可包含 Ask Block(Ask 需要用户交互,与并行执行冲突)。前端 Slash 菜单已过滤,后端运行时会检测并跳过含 Ask 的分支
    • Promise 内不可包含 Exit Block

注意事项

  1. 分支隔离:所有分支基于启动前的变量快照独立执行,分支之间不会互相看到对方的中间结果。完成后的内部变量在所有任务结束后才统一写入父上下文
  2. 最大并发数:系统限制同时运行的最大任务数为 10,超出部分排队等待
  3. 早停机制:达到完成条件后,未完成的分支会被自动取消(AbortController)
  4. expand 列表为非数组:如果 list 解析结果不是数组,该分支会被跳过并记入 failed
  5. n > 分支数:当所需成功数大于实际任务数时,status 会返回 'partial',不会静默降级
  6. SSE 事件互斥:并行分支的输出事件通过 Mutex 序列化,保证前端接收到完整的消息序列

AI Workflow Editor