跳转至

Sub-agent、Multi-agent 与 Graph

普通 Agent 仍然使用小型 model → tool → model loop。只有任务需要委派、并行、审批或 恢复时,才在外层增加 orchestration。

结构化 Sub-agent

runSubagent() 每次创建独立 child,并返回 HandoffResult:状态、输出、父子 ID、depth、 turn、token、耗时和错误都显式可见。默认不传父历史;只有 selectContext() 返回的新数组 会复制给 child。

const result = await runSubagent({
  task: "检查这份报告",
  agentId: "reviewer-1",
  parentAgentId: "writer",
  createAgent: () => createReviewer(),
  policy: { maxDepth: 2, maxTurns: 4, maxTokens: 20_000, timeoutMs: 30_000 },
  selectContext: (messages) => messages.slice(-2),
});

AbortSignal 会传给 child,timeout 使用同一取消机制。Python 同步模型无法强制杀死 任意阻塞线程,因此 timeout 会停止等待并返回 cancelled;生产异步 Python 应让 provider 主动响应取消。

SubagentScheduler 有界并发执行 child,并保持结果与输入任务同序;AgentEventBusagentId/parentAgentId 汇总事件,但不会共享消息数组。

独立 Graph runtime

flowchart LR
    A["start node"] --> C{"conditional edge"}
    C --> L["left branch"]
    C --> R["right branch"]
    L --> J["reducer / join"]
    R --> J
    J --> I["interrupt / checkpoint"]
    I -->|resume| I

StateGraph 的 node 接收只读 state 并返回 partial update;edge 决定下一节点。GraphFork 让多个分支读取各自的 state 副本,reducer 以稳定顺序合并。配置 checkpoint store 后,每步 记录 state 和下一节点;node 调用 interrupt(value) 可暂停,之后携带 resumeValue 从同一 节点继续。

Graph 不替代 Agent loop。一个 node 可以运行普通函数、工具、from-scratch Agent 或 pi-agent;图只管理工作流状态和路径,不接管模型协议。