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