跳至内容

编排多个代理

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

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

您可以混合搭配这些模式。每种模式都有各自的权衡取舍,如下所述。

通过LLM进行编排

智能体是一个配备了指令、工具和任务交接机制的大型语言模型。这意味着当面对开放式任务时,该模型能够自主规划任务执行方案,通过工具采取行动获取数据,并通过交接机制将任务委托给子智能体。例如,一个研究型智能体可能配备以下工具:

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

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

  1. 投资于优质的提示词。明确说明可用的工具、如何使用它们以及必须遵守的参数范围。
  2. 监控您的应用程序并进行迭代。查看问题出现的位置,并对您的提示进行迭代优化。
  3. 允许代理进行自我反思和改进。例如,在循环中运行它,让它自我批评;或者,提供错误消息让它改进。
  4. 拥有专注于单一任务的专用代理,而非期望一个通用代理能擅长所有事情。
  5. 投资于评估。这能让您训练您的智能体不断进步,在任务中表现得更好。

通过代码编排

虽然通过LLM进行编排很强大,但通过代码进行编排可以使任务在速度、成本和性能方面更加确定和可预测。这里的常见模式包括:

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

我们在examples/agent_patterns目录下提供了多个示例。