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