跳转至

多智能体编排

编排指的是你在应用中组织智能体的流程:哪些智能体运行、以何种顺序运行、以及它们如何决定下一步。编排智能体主要有两种方式:

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

你可以混合使用这些模式。每种方式都有权衡,详见下文。

通过 LLM 编排

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

  • 网络检索以在线查找信息
  • 文件检索和读取以搜索专有数据和连接
  • 计算机操作以在计算机上执行动作
  • 代码执行以进行数据分析
  • 向擅长规划、报告撰写等的专业智能体进行任务转移

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

  1. 投入精力编写高质量提示词。明确可用工具、使用方式,以及必须遵循的参数范围。
  2. 监控并迭代你的应用。找出问题点,并迭代提示词。
  3. 允许智能体自省和改进。例如,在循环中运行它,让其自我批判;或提供错误信息并让其改进。
  4. 建立在单一任务上表现卓越的专业智能体,而不是期望一个通用智能体在所有方面都很强。
  5. 投入到评测。这有助于训练你的智能体,以改进并在任务上表现更好。

通过代码编排

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

  • 使用structured outputs生成可由你的代码检查的格式良好的数据。例如,你可以让智能体将任务分类为几个目录,然后基于该目录选择下一个智能体。
  • 将多个智能体串联,把上一个的输出转换为下一个的输入。你可以将写博客这样的任务分解为一系列步骤——先做研究、写提纲、写正文、进行批判性审阅,然后再改进。
  • 将执行任务的智能体与一个负责评估并提供反馈的智能体一起在 while 循环中运行,直到评估者表示输出满足某些标准为止。
  • 并行运行多个智能体,例如通过 Python 基本组件如 asyncio.gather。当有多个彼此不依赖的任务时,这对提升速度很有用。

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