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

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

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

你可以混合使用这些模式。每种方式都有取舍，详述如下。

## 基于 LLM 的编排

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

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

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

1. 投入编写优质提示词。清晰说明可用的工具、如何使用它们，以及必须遵循的参数与边界。
2. 监控你的应用并迭代改进。找出问题所在，不断改进提示词。
3. 允许智能体自省与改进。例如，将其在循环中运行，让其自我批判；或提供错误信息并让其改进。
4. 让专门化智能体专注单一任务，而不是让一个通用智能体“面面俱到”。
5. 投入 [评测](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) 中提供了若干 code examples。