跳转到内容

多智能体编排

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

  1. 让 LLM 做决策:利用 LLM 的智能进行规划、推理,并据此决定下一步执行的操作。
  2. 通过代码进行编排:用代码来决定智能体的流转。

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

一个智能体是配备了指令、工具和交接的 LLM。这意味着面对开放式任务时,LLM 可以自主规划解决方案,使用工具执行操作和获取数据,并通过交接把任务委派给子智能体。比如,一个研究型智能体可以配备如下工具:

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

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

  1. 打磨高质量提示(prompt)。明确可用的工具、如何使用,以及必须遵循的参数和约束。
  2. 监控你的应用并持续迭代。找出问题发生的位置,并迭代优化提示。
  3. 允许智能体自我反思与改进。比如,在循环中运行它,让其自我评审;或提供错误信息并让其改进。
  4. 使用在单一任务上表现卓越的专业智能体,而不是期望一个通用型智能体样样精通。
  5. 投入进行评测(evals)。这可以让你的智能体通过训练不断提升任务表现。

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

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

我们在examples/agent-patterns中提供了若干 code examples。