跳过内容

编排多个 agents

编排指的是应用程序中代理的流程。哪些代理运行,以什么顺序运行,以及它们如何决定下一步该怎么做? 编排代理主要有两种方式

  1. 允许 LLM 做出决策:这利用 LLM 的智能来规划、推理,并根据该信息决定采取哪些步骤。
  2. 通过代码编排:通过您的代码确定代理的流程。

您可以混合和匹配这些模式。每种模式都有其自身的权衡,如下所述。

通过 LLM 编排

代理是一个配备了指令、工具和移交的 LLM。这意味着,给定一个开放式任务,LLM 可以自主规划如何解决该任务,使用工具采取行动和获取数据,并使用移交将任务委派给子代理。例如,一个研究代理可以配备诸如

  • 网络搜索以在线查找信息
  • 文件搜索和检索以搜索专有数据和连接
  • 计算机使用以在计算机上执行操作
  • 代码执行以进行数据分析
  • 移交给擅长规划、报告撰写等方面的专业代理。

当任务是开放式的并且您希望依赖 LLM 的智能时,这种模式非常有用。这里最重要的策略是

  1. 投资于好的提示词。明确说明有哪些工具可用、如何使用它们以及它必须在哪些参数范围内运行。
  2. 监控您的应用程序并对其进行迭代。查看哪些地方出错,并迭代您的提示词。
  3. 允许代理进行内省和改进。例如,将其运行在一个循环中,并让它自我批评;或者,提供错误消息并让它改进。
  4. 拥有擅长一项任务的专业代理,而不是拥有一个通用代理,期望它在任何事情上都表现良好。
  5. 投资于 evals。这让您可以训练您的代理以提高任务的完成度。

通过代码编排

虽然通过 LLM 编排功能强大,但通过代码编排可以使任务更具确定性和可预测性,在速度、成本和性能方面。常见的模式是

  • 使用 结构化输出 生成格式良好的数据,您可以使用代码进行检查。例如,您可以要求代理将任务分类为几个类别,然后根据类别选择下一个代理。
  • 通过将一个代理的输出转换为下一个代理的输入来串联多个代理。您可以将诸如撰写博客文章之类的任务分解为一系列步骤 - 进行研究、撰写大纲、撰写博客文章、批评它,然后改进它。
  • 在一个 while 循环中运行执行任务的代理,并使用一个评估和提供反馈的代理,直到评估器说输出通过了某些标准。
  • 并行运行多个代理,例如通过 Python 原语如 asyncio.gather。当您有多个不相互依赖的任务时,这对于提高速度很有用。

我们在 examples/agent_patterns 中提供了一些示例。