多智能体编排
在应用中,编排指的是智能体的流转:哪些智能体运行、以什么顺序运行、以及它们如何决定下一步做什么。编排智能体主要有两种方式:
- 让 LLM 做决策:利用 LLM 的智能进行规划、推理,并据此决定采取哪些步骤。
- 通过代码进行编排:用你的代码决定智能体的流程。
你可以混合使用这些模式。每种方式都有各自的权衡,详见下文。
通过 LLM 的编排
Section titled “通过 LLM 的编排”一个智能体是配备了 instructions、工具和交接 的 LLM。这意味着面对开放式任务时,LLM 可以自主规划如何完成任务,使用工具执行操作和获取数据,并通过交接把子任务委派给子智能体。例如,一个研究智能体可以配备以下工具:
- Web 搜索,用于在线查找信息
- 文件搜索与检索,用于检索专有数据和连接
- 计算机操作,用于在计算机上执行操作
- 代码执行,用于进行数据分析
- 交接,指向擅长规划、写报告等的专业智能体
当任务是开放式且你希望依赖 LLM 的智能时,这种模式非常适合。关键策略包括:
- 投入精力打磨提示词。明确可用的工具、如何使用它们,以及必须遵守的参数。
- 监控你的应用并持续迭代。观察问题发生在哪里,并迭代优化提示词。
- 允许智能体自省并改进。例如,将其置于循环中,让它自我批评;或提供错误信息并让其改进。
- 使用专注于单一任务的专业智能体,而不是期待一个通用智能体对所有事情都很擅长。
- 投入于evals。这能帮助你让智能体不断改进并提升任务表现。
通过代码的编排
Section titled “通过代码的编排”虽然通过 LLM 编排很强大,但通过代码编排在速度、成本和性能方面更具确定性和可预测性。常见模式包括:
- 使用structured outputs生成可由代码检查的格式良好的数据。例如,你可以让一个智能体将任务归类到若干类别中,然后基于该类别选择下一个智能体。
- 将多个智能体串联起来,把一个的输出转换为下一个的输入。你可以把写博客这种任务分解为一系列步骤——做研究、写大纲、撰写正文、批评审阅、再改进。
- 让执行任务的智能体与负责评估和反馈的智能体在
while循环中运行,直到评估者认为输出满足特定标准为止。 - 并行运行多个智能体,例如通过 JavaScript 基本组件如
Promise.all。当你有彼此无依赖的多个任务时,这有助于提升速度。
我们在examples/agent-patterns中提供了若干代码示例。