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