跳转到内容

多智能体编排

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

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

你可以混用这些模式。每种方式都有取舍,详见下文。

一个智能体是配备了 instructions、tools 和 handoffs 的 LLM。这意味着面对一个开放任务,LLM 可以自主规划如何处理任务,使用工具执行操作和获取数据,并通过 handoffs 将任务委派给子智能体。例如,一个研究型智能体可以配备以下工具:

  • Web 搜索,以在线查找信息
  • 文件搜索与检索,以搜索专有数据和连接
  • 计算机操作,以在计算机上执行操作
  • 代码执行,以进行数据分析
  • 交接,委派给在规划、报告撰写等方面表现出色的专业智能体

当任务是开放式且你希望依赖 LLM 的智能时,这种模式非常适合。关键策略包括:

  1. 打磨高质量的 prompts。明确可用的工具、使用方式,以及必须遵循的参数边界。
  2. 监控你的应用并持续迭代。观察问题发生的位置,并迭代你的 prompts。
  3. 允许智能体自省和改进。例如,在循环中运行它,让它自我批评;或者提供错误信息,让它改进。
  4. 使用在单一任务上表现出色的专业智能体,而不是期望一个通用智能体样样精通。
  5. 投入于评测(evals)。这可帮助你训练智能体改进并更好地完成任务。

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

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

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