跳转到内容

多智能体编排

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

  1. 让 LLM 做决策:利用 LLM 的智能来规划、推理,并据此决定要采取的步骤。
  2. 通过代码进行编排:用你的代码确定智能体的流程。

你可以混合使用这些模式。每种方式都有各自的取舍,见下文。

一个智能体是一个配备了指令、工具和交接的 LLM。这意味着在面对开放式任务时,LLM 能自主规划如何处理任务,使用工具来执行动作和获取数据,并使用交接将任务委派给子智能体。比如,一个研究智能体可以配备如下工具:

  • Web 搜索以在线查找信息
  • 文件搜索与检索以查询专有数据和连接
  • 计算机操作以在电脑上执行动作
  • 代码执行以进行数据分析
  • 交接至擅长规划、写报告等工作的专门智能体

当任务是开放式且你希望依赖 LLM 的智能时,这种模式非常合适。这里最重要的做法是:

  1. 打造优质提示词。明确可用的工具、如何使用它们,以及必须遵循的参数边界。
  2. 监控应用并迭代优化。找出问题发生的地方,并迭代你的提示词。
  3. 允许智能体自省与改进。例如在循环中运行,让其自我批评;或提供错误信息并让其改进。
  4. 使用在单一任务上表现卓越的专门智能体,而不是期望一个通用智能体样样精通。
  5. 投入于评测(evals)。这能帮助你训练智能体以改进并更擅长完成任务。

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

  • 使用structured outputs生成可由代码检查的格式良好的数据。例如,你可以让智能体将任务分类为若干类别,然后基于该类别选择下一个智能体。
  • 将多个智能体串联,把一个的输出转换为下一个的输入。你可以将“写博客文章”这样的任务分解为一系列步骤——做研究、写提纲、写正文、批评审稿、再改进。
  • 让执行任务的智能体与负责评估和提供反馈的智能体在 while 循环中运行,直到评估者认为输出通过某些标准。
  • 并行运行多个智能体,例如通过 JavaScript 基本组件 Promise.all。当你有彼此不相依的多个任务时,这有助于提升速度。

我们在examples/agent-patterns中提供了若干代码示例。