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

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

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

你可以混合使用这些模式。每种方式都有取舍，下文将进行说明。

## 通过 LLM 编排

智能体是配备了指令（instructions）、工具（tools）和任务转移（handoffs）的 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)中提供了许多示例。