Cloudflare Agents 从入门到精通
附录

§13 子 Agent 与 Agent 工具:分而治之

13.1 什么是子 Agent(facet)

子 Agent 是和父同机的子 Durable Object。它有自己的 SQLite、自己的 WebSocket,但由父派生、列举、销毁。像"主聊天室"下的"每个会话"。

13.2 创建与回连父

export class Inbox extends Agent {
  @callable()
  async createChat() {
    const id = crypto.randomUUID();
    await this.subAgent(Chat, id); // 惰性、幂等地建子
    return id;
  }

  @callable()
  listChats() { return this.listSubAgents(Chat); }
}

export class Chat extends Agent {
  async say(text: string) {
    const inbox = await this.parentAgent(Inbox); // 回连直接父
    await inbox.recordTurn(this.name, text);
  }
}

13.3 客户端直连子

const chat = useAgent({
  agent: "Inbox", name: userId,
  sub: [{ agent: "Chat", name: chatId }], // URL: /agents/inbox/{uid}/sub/chat/{cid}
});

13.4 Agent 工具:把子 Agent 当工具调

除 facet 外,Agents SDK 还能把一个聊天型子 Agent 注册成"工具",父在 agentic loop 里调用它,子流的思考过程可流式回传。适合"研究员 Agent 被主 Agent 调度"这类编排。

维度 facet 子 Agent Agent 工具 标叔的结论
关系 父子对象 工具调用 看要不要回传过程
状态 独立 SQLite 独立 SQLite 都隔离
典型 多租户隔离 多专家协作 编排选工具
注意
父可用 onBeforeSubAgent 钩子拦截 /sub/ 请求做鉴权。别让任意子路径都能建。

子 Agent 讲完。下一章讲长任务怎么不断点。