多 Agent 与工作流

什么时候需要另一个 Agent?

只有当工作需要独立上下文、独立生命周期或并行推进时,子 Agent 才带来结构性价值。它不是“更聪明的一层循环”,而是一个有自己会话、工具范围和取消通道的执行单元;父 Agent 负责描述任务、选择 Provider,并消费子 Agent 的结果。

问题 01

一项工作应该留在当前 Agent,还是委派出去?

答案:需要共享当前推理细节、紧接着执行的一小步,留在当前 Agent 最简单;可独立描述、能并行、会产生大量中间上下文或需要不同工具范围的工作,适合子 Agent;固定而可重复的确定性过程,更适合 Workflow。

委派的核心收益是上下文和生命周期隔离;并行只是可能的结果。无法写清输入与输出的任务,通常也无法可靠验收子 Agent 的结果。

问题 02

spawn 与 fork 的本质区别是什么?

答案:区别只在会话种子。spawn 创建没有父对话历史的新会话,依靠委派 prompt 自包含任务;fork 用父会话最后一个已完成 Turn 为止的平衡事件前缀创建子会话。fork 继承的是对话上下文,不代表继承工具、服务或权限。

spawn

适合任务可自包含、希望上下文干净,或不应把父对话暴露给子执行者。

fork

适合子任务确实依赖父对话中已经建立的目标、约束与结论。

fork 会排除父 Agent 正在进行、尚未闭合的 Turn,确保种子从 seq 0 连续且生命周期边界平衡。

不要把上下文继承误解为权限继承:子 Agent 得到新的平级插件 scope;工具可见性、persona、深度上限与 Provider 能力都需要显式组合和校验。

问题 03

一次性子 Agent 与可继续子会话怎样选择?

答案:一次性运行面向一个任务和一个最终结果,调用方等待 result 并负责 dispose;可继续子会话拥有稳定 child session id,后续消息按 FIFO 进入它自己的 Agent 收件箱,进程不驻留时可以从持久会话冷恢复。

维度One-shot runContinuable child
目标一次委派,一个终止结果围绕同一子角色持续多轮
句柄SubagentRun,包含 result 与 dispose()稳定 childId;管理器拥有 Activation
继续输入没有 steering,也不恢复followup 作为下一 FIFO Turn
进程状态运行结束后释放可驻留;无 Activation 时从 Session 冷恢复
取消调用方 signal 与 dispose 收束该次运行interrupt 中止当前 Turn,但保留未认领队列与会话
可继续子 Agent 的持久身份是 Session,不是进程。Activation 只是某段时间内重建出的活跃 Agent 实例。

问题 04

Workflow 与子 Agent 分别控制什么?

答案:子 Agent 把控制权交给另一个模型循环;Workflow 把控制权交给一段确定性程序。Worker Thread Provider 在独立 JavaScript realm 中执行工作流代码,通过协议向 Host 请求注册服务;Host 仍拥有真实工具、会话和安全策略。

Worker 隔离 JavaScript realm 与故障传播,但能力仍由 Host 明确暴露。它适合编排,不会自动把危险操作变安全。

安全边界:node:vm 或 Worker realm 不是面向恶意代码的安全沙箱。需要执行不可信代码时,必须使用进程、容器或专门 Sandbox Provider 的外部约束。