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

编排指的是应用中智能体的流转：哪些智能体运行、以何种顺序运行，以及它们如何决定接下来发生什么。编排智能体主要有两种方式：

1. 让 LLM 做决策：利用 LLM 的智能来规划、推理，并据此决定采取哪些步骤。
2. 通过代码编排：使用代码来确定智能体的流转。

你可以混合使用这些模式。各自的权衡如下所述。

## 通过 LLM 编排

一个智能体是配备了 instructions、tools 和 任务转移 的 LLM。这意味着，对于一个开放式任务，LLM 可以自主规划如何完成任务，使用工具执行操作并获取数据，并通过 任务转移 将任务委派给子智能体。例如，一个研究类智能体可以配备如下工具：

- 网络检索以在线查找信息
- 文件检索与读取以搜索专有数据和连接
- 计算机操作以在计算机上执行动作
- 代码执行以进行数据分析
- 任务转移到擅长规划、写报告等的专用智能体

当任务是开放式且你希望依赖 LLM 的智能时，这一模式非常合适。关键策略包括：

1. 投入精力打磨优质提示词。明确可用的工具、如何使用它们，以及必须遵守的 参数 范围。
2. 监控应用并持续迭代。找出出错之处，不断迭代你的提示词。
3. 允许智能体自省与改进。例如将其置于循环中，让其自我批判；或者提供错误信息以便其改进。
4. 使用在单一任务上表现突出的专用智能体，而不是期望一个通用智能体在所有方面都表现出色。
5. 投入到[评测 (evals)](https://platform.openai.com/docs/guides/evals)。这能帮助训练你的智能体，在任务上不断提升。

## 通过代码编排

虽然通过 LLM 编排很强大，但通过代码编排在速度、成本和性能上更具确定性与可预测性。常见模式包括：

- 使用 [structured outputs](https://platform.openai.com/docs/guides/structured-outputs) 生成可由代码检查的 格式良好的数据。例如，你可以让智能体将任务分类到少数几个目录中，然后基于该目录选择下一个智能体。
- 将多个智能体串联，把一个的输出转换为下一个的输入。你可以把“写博客文章”这样的任务分解为一系列步骤——先做研究、写大纲、写正文、批判性审阅，然后改进。
- 将执行任务的智能体与负责评估并提供反馈的智能体一起在 `while` 循环中运行，直到评估者认为输出通过了特定标准。
- 并行运行多个智能体，例如通过 Python 基本组件 如 `asyncio.gather`。当你有多个彼此独立的任务时，这可以提升速度。

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