---
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)中提供了若干代码示例。