编排多个智能体
编排指的是应用中智能体的流程。哪些智能体运行、以什么顺序运行,以及它们如何决定下一步要做什么?主要有两种编排智能体的方式:
- 让LLM做决策:利用LLM的智能来规划、推理并决定采取哪些步骤
- 通过代码编排:通过代码确定智能体的流程
你可以混合使用这些模式。每种模式都有其权衡取舍,如下所述。
通过LLM编排
智能体是配备了指令、工具和交接的LLM。这意味着给定一个开放式任务,LLM可以自主规划如何完成任务,使用工具采取行动和获取数据,并使用交接将任务委托给子智能体。例如,一个研究智能体可以配备以下工具:
- 网络搜索以在线查找信息
- 文件搜索和检索以搜索专有数据和连接
- 计算机使用以在计算机上执行操作
- 代码执行以进行数据分析
- 交接给擅长规划、报告撰写等的专业智能体
当任务是开放式的并且你想依赖LLM的智能时,这种模式非常有用。最重要的策略是:
- 投入好的提示。明确说明可用的工具、如何使用它们以及它必须在哪些参数范围内操作
- 监控你的应用并迭代。看看哪里出了问题,并迭代你的提示
- 允许智能体自省和改进。例如,在循环中运行它,让它自我批评;或者提供错误消息让它改进
- 拥有擅长一项任务的专门智能体,而不是期望一个通用智能体擅长任何事情
- 投入评估。这让你可以训练你的智能体改进并更好地完成任务
通过代码编排
虽然通过LLM编排很强大,但通过代码编排使任务在速度、成本和性能方面更加确定和可预测。常见的模式有:
- 使用结构化输出生成格式良好的数据,你可以用代码检查。例如,你可以要求智能体将任务分类为几个类别,然后根据类别选择下一个智能体
- 通过将一个智能体的输出转换为下一个智能体的输入来链接多个智能体。你可以将写博客文章这样的任务分解为一系列步骤 - 做研究、写大纲、写博客文章、批评它,然后改进它
- 在
while
循环中运行执行任务的智能体和一个评估并提供反馈的智能体,直到评估者说输出符合某些标准 - 并行运行多个智能体,例如通过Python原语如
asyncio.gather
。当你有多个不相互依赖的任务时,这对速度很有用
我们在examples/agent_patterns
中有一些示例