• 简体中文
  • v6.6.0
  • 编排

    本页展示 A3S Code 中的可编程编排原语:用于扇出的 session.parallel、用于按条目执行多阶段链的 session.pipeline,以及用于在崩溃后仍可恢复的带日志运行的 session.parallelResumableparallel 还接受一个可选的 token 预算,让整个扇出共享同一个账本。当你有多个相互独立的子代理任务时使用 parallel;当你需要让每个输入流经一组有序阶段时使用 pipeline。

    关于这些原语背后的概念模型,请参阅编排

    session.parallel 扇出

    parallel 接收一个 AgentStepSpec 数组并发执行它们,按输入顺序(而非完成顺序)为每个 spec 返回一个 StepOutcome。每个 spec 路由到一个具名子代理(exploreplanreviewverificationgeneral 等)。在 spec 上设置 outputSchema / output_schema 即可拿到经过 schema 校验的 structured 结果。

    Rust
    Node.js
    Python
    Go

    结果在 Python 中是字典,在 Node 中是对象,在 Go 中是 StepOutcome 值。会话选项 maxParallelTasks / max_parallel_tasks / MaxParallelTasks 限制并发量;多出的 spec 会排队,而返回的结果数组仍然完整且保持顺序。

    session.pipeline 构建按条目执行的链

    pipeline 接收一个输入 items 列表和一个有序的 stages 列表。每个条目独立地流经各个阶段——阶段之间没有屏障,因此一个较快的条目可以在一个较慢的条目仍处于阶段 1 时就到达阶段 2。阶段回调接收一个 ctx:第一个阶段看到 ctx.item,后续阶段看到 ctx.previous(上一个 StepOutcome,你可以基于其 .output 继续构建)。返回下一个 spec 以继续,或返回 null / None 以提前停止该条目的链。

    Rust
    Node.js
    Python
    Go

    parallel 的关键区别:阶段是有序且相互依赖的,但各条目在阶段之间不会 彼此等待。Node 的阶段回调绝不能抛出异常——出错时返回 null;Python 的阶段可以 抛出并被视为 None;Go 阶段返回 (*AgentStepSpec, error)

    session.parallelResumable 恢复运行

    parallelResumable 就是带日志的 parallel。它的第一个参数是 specs,第二个参数是 稳定的 workflowId;每个步骤的结果都会被记录到会话的 store,因此如果进程在 运行中途崩溃,你可以用同一个 workflowId 再次调用它,已完成步骤会从日志中重放。 它需要一个会话 store——打开会话时传入 sessionStoresession_store 或 Go 的 FileSessionStoreDir

    Rust
    Node.js
    Python
    Go

    Rust 通过具名 workflow.phase 暴露相同的检查点行为。配置会话存储后,每个 phase 都是可恢复的屏障。

    session.parallel 做预算受限的扇出

    传入 token 预算后,所有子代理就会汇入同一个账本。传入预算时, parallel 解析为 { outcomes, budget }(账本快照)而非原来的结果数组;一旦达到 上限,之后启动的 step 会被拒绝(success: false)。它是软上限——宽扇出可能冲过 上限几个在飞回合;在飞工作绝不会被强杀。

    Rust
    Node.js
    Python
    Go

    说明:

    • 三个原语都返回按输入顺序对齐的结果。Go 使用 StepOutcome;Node 使用对象; Python 使用字典。
    • 在 spec 上设置 outputSchema / output_schema / OutputSchema,可在 structured / Structured 中拿到解析后的结果。
    • maxSteps / max_steps / MaxSteps 限制每个子代理的步数;会话选项 maxParallelTasks / max_parallel_tasks / MaxParallelTasks 限制扇出并发量。
    • parallel 传入 token 预算即可让整个扇出对同一个账本计数。Go 把 *uint64 作为 Parallel 的第三个参数,并从 ParallelResult.Budget 读取账本。它是软上限。
    • Node 的 pipeline 阶段回调绝不能抛出异常——出错时返回 null。Python 的阶段可以 抛出并被视为 None;Go 阶段返回 error

    可运行的 Node.js 和 Python 版本见 sdk/node/examples/orchestration/parallel-pipeline.mjssdk/python/examples/orchestration_workflow.py;上面的 Rust 与 Go 页签均为自包含示例。