当不同专家应负责工作的不同部分时,多智能体工作流非常有用。首要的设计决策是,在工作流的每个分支处,由谁负责最终面向用户的回答。
选择编排模式
| 模式 | 适用场景 | 具体行为 |
|---|---|---|
| 交接 | 专家应接管该工作分支的对话 | 控制权移交给专家智能体 |
| 智能体作为工具 | 管理者应保持控制,并将专家作为有边界的功能来调用 | 管理者保留回复的归属权 |
通过交接实现归属权委托
当专家应当拥有下一次回复的归属权,而不仅仅是作为幕后协助者时,交接是最合适的选择。
通过交接进行委托
typescript
1
2
3
4
5
6
7
8
9
import { Agent, handoff } from "@openai/agents";
const billingAgent = new Agent({ name: "Billing agent" });
const refundAgent = new Agent({ name: "Refund agent" });
const triageAgent = Agent.create({
name: "Triage agent",
handoffs: [billingAgent, handoff(refundAgent)],
});保持路由层面的清晰易读:
- 为每个专家分配单一明确的任务。
- 保持
简短且具体。handoffDescription - 仅在下个分支确实需要不同的指令、工具或策略时才进行拆分。
在更高级的场景中,交接还可以承载结构化元数据或经过过滤的历史记录。这些具体的 API 保留在 SDK 文档中,因为具体的连接方式因编程语言而异。
在管理者模式的工作流中使用智能体作为工具
使用 agent.asTool()
将专家作为工具调用
typescript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import { Agent } from "@openai/agents";
const summarizer = new Agent({
name: "Summarizer",
instructions: "Generate a concise summary of the supplied text.",
});
const mainAgent = new Agent({
name: "Research assistant",
tools: [
summarizer.asTool({
toolName: "summarize_text",
toolDescription: "Generate a concise summary of the supplied text.",
}),
],
});这通常在以下情况更合适:
- 管理者需要综合得出最终答案
- 专家正在执行有边界的任务,例如摘要或分类
- 你希望拥有一个稳定的外部工作流,在其中嵌套调用专家,而不是转移归属权
仅在约定发生变更时才添加专家
尽可能从单个智能体开始。仅当专家能实质性改善功能隔离、策略隔离、提示词清晰度或轨迹可读性时,才添加专家。
过早拆分会产生更多的提示词、更多的轨迹以及更多的审批环节,但不一定能改善工作流。
后续步骤
明确了归属权模式后,请继续阅读涵盖相邻运行时或状态问题的指南。