编排的核心是控制权归属
先逐节点问三件事:输入是否开放、错误代价是否可逆、完成是否能确定验证。规则稳定、合规关键、不可逆或必须精确重放的节点由代码拥有;开放分类、信息综合和候选方案生成可由模型拥有;责任无法自动委托的高风险歧义由人工拥有。
“模型选择下一节点”只是路由提议。Runtime 仍要检查允许的边、前置状态、预算和权限。把所有分支写进 Prompt 会让流程版本不可审计,也难以证明非法迁移不会发生。
四种常见组合形态
Workflow 中的模型节点
确定性流程固定前后边界,模型只完成分类、提取或草拟。适合输入开放但输出可 Schema/规则验证的任务,默认优先。
Workflow 启动受预算 Agent 子流程
某一节点允许有限 Loop 和 Tool 集,节点完成后返回受约束结果。适合调查、排障等步骤数不确定但整体流程明确的任务;必须有局部预算和退出契约。
Agent 只能触发已治理流程
Agent 选择一个经过治理的业务能力,由 Workflow 内部执行多步事务。模型看到的是“提交报销”而不是十个低层 API,能显著缩小权限和选择空间。
Supervisor 动态选择子流程
Supervisor 根据任务路由到专用 Agent/Workflow,并汇总结果。只有当能力边界、上下文隔离和失败上报明确时才值得引入;否则只是增加一次模型调用和归因困难。
| 模式 | 控制权 | 主要风险 |
|---|---|---|
| 模型在节点内 | Workflow | 验证器不足 |
| Agent 在流程内 | 局部共享 | Loop 逸出节点预算 |
| Workflow as Tool | Agent 选能力,流程执行 | 高层契约过粗 |
| Supervisor | 分层委派 | 上下文/责任传播失真 |
每个节点都要有完成与失败语义
每个节点定义输入 Schema、权威状态读取、输出/状态命令、允许副作用、幂等键、Deadline、错误类别、补偿/人工路径和观测字段。输入应包含引用和版本,而不是未经验证的上一节点自然语言。节点成功意味着其后置条件成立,不只是函数返回 200。
Agent 节点还要声明可见 Tool、最大步骤、完成验收器和失败摘要;人工节点声明审批对象、到期、委托和恢复条件。节点间只传播下游必要信息,防止全局 Context 污染。
动态分支仍需可治理
模型可在允许边集中提议分支,Runtime 根据结构化理由、状态与策略裁决。新任务可以在受控范围生成,但最终要注册成有 ID、Owner、预算和依赖的节点,不能靠自然语言列表成为隐形 Workflow。
循环必须显式设置进展条件和上限;并行只用于依赖独立且副作用不冲突的节点;汇聚节点区分全部成功、部分成功和缺失结果。恢复时读取已提交节点状态,不重新运行整条 Prompt。
流程演进与在途实例
Run 记录 Workflow、节点契约、Prompt/模型、Tool 和策略版本。短 Run 可固定旧版本完成;长 Run 需要显式迁移函数或在兼容节点暂停。不能让新代码直接反序列化旧状态后“尽量继续”。
变更先用历史 Trace 回放和 Shadow Run 比较路径、成功率、人工率、成本与副作用,再灰度。回滚不仅回 Prompt,还要考虑状态 Schema、已发副作用和新节点产生的 Artifact。
何时保持 Workflow,何时开放 Agent
默认从确定性 Workflow + 有界模型节点开始;只有需求路径真的无法穷举、动态信息价值高且失败可检测恢复时,才增加 Agent 控制范围。评估变量包括任务开放度、状态动态性、验证难度、错误代价、延迟、审计和组织 Owner。
运行指标要同时看任务成功、路径偏离、非法迁移拦截、人工接管、恢复率、P95 延迟和成功成本。模型“看起来更聪明”不是扩大控制权的证据。
什么时候优先把 Workflow 做成 Tool?
为什么全 Agent 通常不是更灵活的默认方案?
资料与事实边界
以下以官方文档、标准、论文和原始工程资料为主。厂商 API、价格、限额与模型能力会变化,落地时仍需按目标版本做能力探测和回归。
- Anthropic:Building effective agents — Workflow 与 Agent 的区分、常见编排模式和由简单到复杂的工程建议
- OpenAI Agents SDK:Agents — Agent、handoff、output type 与 lifecycle 的当前实现语义
- Temporal:Workflow Definition — 持久 Workflow、确定性与版本演进边界