多 Agent 与工作流
什么时候需要另一个 Agent?
只有当工作需要独立上下文、独立生命周期或并行推进时,子 Agent 才带来结构性价值。它不是“更聪明的一层循环”,而是一个有自己会话、工具范围和取消通道的执行单元;父 Agent 负责描述任务、选择 Provider,并消费子 Agent 的结果。
问题 01
一项工作应该留在当前 Agent,还是委派出去?
答案:需要共享当前推理细节、紧接着执行的一小步,留在当前 Agent 最简单;可独立描述、能并行、会产生大量中间上下文或需要不同工具范围的工作,适合子 Agent;固定而可重复的确定性过程,更适合 Workflow。
问题 02
spawn 与 fork 的本质区别是什么?
答案:区别只在会话种子。spawn 创建没有父对话历史的新会话,依靠委派 prompt 自包含任务;fork 用父会话最后一个已完成 Turn 为止的平衡事件前缀创建子会话。fork 继承的是对话上下文,不代表继承工具、服务或权限。
spawn
适合任务可自包含、希望上下文干净,或不应把父对话暴露给子执行者。
fork
适合子任务确实依赖父对话中已经建立的目标、约束与结论。
不要把上下文继承误解为权限继承:子 Agent 得到新的平级插件 scope;工具可见性、persona、深度上限与 Provider 能力都需要显式组合和校验。
问题 03
一次性子 Agent 与可继续子会话怎样选择?
答案:一次性运行面向一个任务和一个最终结果,调用方等待 result 并负责 dispose;可继续子会话拥有稳定 child session id,后续消息按 FIFO 进入它自己的 Agent 收件箱,进程不驻留时可以从持久会话冷恢复。
| 维度 | One-shot run | Continuable child |
|---|---|---|
| 目标 | 一次委派,一个终止结果 | 围绕同一子角色持续多轮 |
| 句柄 | SubagentRun,包含 result 与 dispose() | 稳定 childId;管理器拥有 Activation |
| 继续输入 | 没有 steering,也不恢复 | followup 作为下一 FIFO Turn |
| 进程状态 | 运行结束后释放 | 可驻留;无 Activation 时从 Session 冷恢复 |
| 取消 | 调用方 signal 与 dispose 收束该次运行 | interrupt 中止当前 Turn,但保留未认领队列与会话 |
问题 04
Workflow 与子 Agent 分别控制什么?
答案:子 Agent 把控制权交给另一个模型循环;Workflow 把控制权交给一段确定性程序。Worker Thread Provider 在独立 JavaScript realm 中执行工作流代码,通过协议向 Host 请求注册服务;Host 仍拥有真实工具、会话和安全策略。
安全边界:node:vm 或 Worker realm 不是面向恶意代码的安全沙箱。需要执行不可信代码时,必须使用进程、容器或专门 Sandbox Provider 的外部约束。