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 讲完。下一章讲长任务怎么不断点。