智能体编排
编排是指应用中智能体的运行流程:哪些智能体运行、以何种顺序运行,以及如何决定下一步?智能体编排主要有两种方式:
- 让 LLM 做出决策:利用 LLM 的智能进行规划和推理,并据此决定要采取的步骤。
- 通过代码进行编排:通过代码确定智能体的运行流程。
你可以混合搭配使用这些模式。每种模式都有各自的权衡,具体如下所述。
基于 LLM 的智能体编排
智能体是配备了指令、工具和任务转移能力的 LLM。这意味着,面对开放式任务时,LLM 可以自主规划如何处理该任务,使用工具执行操作和获取数据,并通过任务转移将任务委派给子智能体。例如,研究智能体可以配备以下能力:
- 通过网络检索查找在线信息
- 通过文件检索和提取,搜索专有数据及已连接的数据源
- 通过计算机操作在计算机上执行操作
- 通过代码执行进行数据分析
- 将任务转移给擅长规划、报告撰写等工作的专业智能体。
SDK 核心模式
在 Python SDK 中,最常见的是以下两种编排模式:
| 模式 | 工作方式 | 最适用的情况 |
|---|---|---|
| Agents as tools | 管理智能体持续控制对话,并通过 Agent.as_tool() 调用专业智能体。 |
你希望由一个智能体负责最终回答、整合多个专业智能体的输出,或在一个位置实施共享的 SDK 安全防护措施。 |
| 任务转移 | 分流智能体将对话路由给专业智能体,后者会成为该回合剩余阶段的活动智能体。 | 你希望专业智能体直接响应、保持提示词专注,或通过任务转移切换活动指令,而无需管理智能体转述结果。 |
当专业智能体只需协助完成范围明确的子任务,而不应接管面向用户的对话时,请使用 agents as tools。当路由本身是工作流的一部分,并且你希望选定的专业智能体负责当前回合的剩余部分时,请使用任务转移。
你也可以将两者结合使用。分流智能体可以将任务转移给专业智能体,而该专业智能体仍可将其他智能体作为工具调用,以完成范围较窄的子任务。
当任务是开放式的,并且你希望依赖 LLM 的智能时,这种模式非常适用。以下是其中最重要的策略:
- 投入精力设计优质提示词。明确说明有哪些工具可用、如何使用这些工具,以及智能体必须遵循哪些约束。
- 监控应用并持续迭代。找出问题所在,并持续改进提示词。
- 允许智能体进行自省和改进。例如,让它循环运行并进行自我评析;或者提供错误消息,让它自行改进。
- 使用专注于并擅长单一任务的专业智能体,而不是期望一个通用智能体能胜任所有任务。
- 投入精力进行评估。这有助于训练智能体,使其不断改进并更好地完成任务。
如果你想了解这种编排方式背后的 SDK 核心基础组件,请先参阅工具、任务转移和运行智能体。
基于代码的智能体编排
虽然基于 LLM 的编排功能强大,但基于代码的编排可以让任务在速度、成本和性能方面更具确定性和可预测性。常见模式包括:
- 使用 structured outputs 生成可通过代码检查的格式良好的数据。例如,你可以让智能体将任务分类到若干类别中,然后根据类别选择下一个智能体。
- 将一个智能体的输出转换为下一个智能体的输入,从而串联多个智能体。你可以将撰写博客文章这样的任务拆分为一系列步骤——开展研究、编写大纲、撰写博客文章、评析文章,然后进行改进。
- 在
while循环的每次迭代中,运行任务智能体以生成输出,然后运行评估智能体来评估该输出并提供反馈;当评估智能体判定输出符合所需标准时停止。 - 并行运行多个智能体,例如通过
asyncio.gather等 Python 基础组件。当多个任务彼此不依赖时,这种方式有助于提高速度。
我们在 examples/agent_patterns 中提供了许多代码示例。