---
search:
  exclude: true
---
# 智能体编排

编排是指应用中智能体的运行流程：哪些智能体运行、以何种顺序运行，以及如何决定下一步？智能体编排主要有两种方式：

1. 让 LLM 做出决策：利用 LLM 的智能进行规划和推理，并据此决定要采取的步骤。
2. 通过代码进行编排：通过代码确定智能体的运行流程。

你可以混合搭配使用这些模式。每种模式都有各自的权衡，具体如下所述。

## 基于 LLM 的智能体编排 {#orchestrating-via-llm}

智能体是配备了指令、工具和任务转移能力的 LLM。这意味着，面对开放式任务时，LLM 可以自主规划如何处理该任务，使用工具执行操作和获取数据，并通过任务转移将任务委派给子智能体。例如，研究智能体可以配备以下能力：

-   通过网络检索查找在线信息
-   通过文件检索和提取，搜索专有数据及已连接的数据源
-   通过计算机操作在计算机上执行操作
-   通过代码执行进行数据分析
-   将任务转移给擅长规划、报告撰写等工作的专业智能体。

### SDK 核心模式 {#core-sdk-patterns}

在 Python SDK 中，最常见的是以下两种编排模式：

| 模式 | 工作方式 | 最适用的情况 |
| --- | --- | --- |
| Agents as tools | 管理智能体持续控制对话，并通过 `Agent.as_tool()` 调用专业智能体。 | 你希望由一个智能体负责最终回答、整合多个专业智能体的输出，或在一个位置实施共享的 SDK 安全防护措施。 |
| 任务转移 | 分流智能体将对话路由给专业智能体，后者会成为该回合剩余阶段的活动智能体。 | 你希望专业智能体直接响应、保持提示词专注，或通过任务转移切换活动指令，而无需管理智能体转述结果。 |

当专业智能体只需协助完成范围明确的子任务，而不应接管面向用户的对话时，请使用 **agents as tools**。当路由本身是工作流的一部分，并且你希望选定的专业智能体负责当前回合的剩余部分时，请使用**任务转移**。

你也可以将两者结合使用。分流智能体可以将任务转移给专业智能体，而该专业智能体仍可将其他智能体作为工具调用，以完成范围较窄的子任务。

当任务是开放式的，并且你希望依赖 LLM 的智能时，这种模式非常适用。以下是其中最重要的策略：

1. 投入精力设计优质提示词。明确说明有哪些工具可用、如何使用这些工具，以及智能体必须遵循哪些约束。
2. 监控应用并持续迭代。找出问题所在，并持续改进提示词。
3. 允许智能体进行自省和改进。例如，让它循环运行并进行自我评析；或者提供错误消息，让它自行改进。
4. 使用专注于并擅长单一任务的专业智能体，而不是期望一个通用智能体能胜任所有任务。
5. 投入精力进行[评估](https://platform.openai.com/docs/guides/evals)。这有助于训练智能体，使其不断改进并更好地完成任务。

如果你想了解这种编排方式背后的 SDK 核心基础组件，请先参阅[工具](tools.md)、[任务转移](handoffs.md)和[运行智能体](running_agents.md)。

## 基于代码的智能体编排 {#orchestrating-via-code}

虽然基于 LLM 的编排功能强大，但基于代码的编排可以让任务在速度、成本和性能方面更具确定性和可预测性。常见模式包括：

-   使用 [structured outputs](https://platform.openai.com/docs/guides/structured-outputs) 生成可通过代码检查的格式良好的数据。例如，你可以让智能体将任务分类到若干类别中，然后根据类别选择下一个智能体。
-   将一个智能体的输出转换为下一个智能体的输入，从而串联多个智能体。你可以将撰写博客文章这样的任务拆分为一系列步骤——开展研究、编写大纲、撰写博客文章、评析文章，然后进行改进。
-   在 `while` 循环的每次迭代中，运行任务智能体以生成输出，然后运行评估智能体来评估该输出并提供反馈；当评估智能体判定输出符合所需标准时停止。
-   并行运行多个智能体，例如通过 `asyncio.gather` 等 Python 基础组件。当多个任务彼此不依赖时，这种方式有助于提高速度。

我们在 [`examples/agent_patterns`](https://github.com/openai/openai-agents-python/tree/main/examples/agent_patterns) 中提供了许多代码示例。

## 相关指南 {#related-guides}

-   [智能体](agents.md)：组合模式和智能体配置。
-   [工具](tools.md#agents-as-tools)：`Agent.as_tool()` 和管理器式编排。
-   [任务转移](handoffs.md)：专业智能体之间的任务委派。
-   [运行智能体](running_agents.md)：每次运行的编排控制和对话状态。
-   [快速入门](quickstart.md)：最简端到端任务转移示例。