编排多个智能体
编排指的是你在应用中组织智能体的流程:哪些智能体运行、以什么顺序运行、以及如何决定下一步做什么。编排智能体主要有两种方式:
- 让 LLM 做决策:利用 LLM 的智能来规划、推理,并据此决定采取哪些步骤。
- 通过代码进行编排:用你的代码来决定智能体的流程。
你可以混合使用这些模式。每种方式都有取舍,详见下文。
通过 LLM 编排
一个智能体是一个配备了 instructions、工具和任务转移 的 LLM。这意味着在给定一个开放式任务时,LLM 可以自主规划如何完成任务,使用工具来采取行动并获取数据,并通过任务转移把子任务委派给子智能体。比如,一个研究型智能体可以配备如下工具:
- 网络检索:在线查找信息
- 文件检索与读取:在专有数据与连接中进行搜索
- 计算机操作:在计算机上执行操作
- 代码执行:进行数据分析
- 任务转移:委派给擅长规划、撰写报告等的专业智能体
当任务是开放式、且你希望依赖 LLM 的智能时,这种模式非常适用。关键做法包括:
- 投入打磨高质量提示词。清楚说明可用的工具、如何使用它们,以及必须遵循的参数范围。
- 监控并迭代你的应用。观察问题出现在哪里,并迭代优化你的提示词。
- 允许智能体自省与改进。比如,让其在循环中运行并自我评审;或者提供错误信息,让其据此改进。
- 使用在单一任务上表现卓越的专业智能体,而非期待一个通用智能体在所有方面都很出色。
- 投入到评测 (evals)。这能帮助你训练智能体,逐步提升其完成任务的能力。
通过代码编排
尽管通过 LLM 编排功能强大,通过代码编排能在速度、成本和性能上使任务更确定且可预测。常见模式包括:
- 使用structured outputs来生成你可以用代码检查的格式良好的数据。比如,你可以让一个智能体把任务分类到几个目录中,然后基于该目录选择下一个智能体。
- 将多个智能体串联起来,把上一个的输出转换为下一个的输入。你可以把“撰写博客文章”这样的任务分解为一系列步骤——做研究、写大纲、写正文、评审并改进。
- 在一个执行任务的智能体与一个负责评估和反馈的智能体之间使用
while循环运行,直到评估者判定输出满足某些标准。 - 并行运行多个智能体,例如通过 Python 基本组件如
asyncio.gather。当你有多个彼此不依赖的任务时,这对提升速度很有帮助。
我们在examples/agent_patterns中提供了许多 code examples。