协调多个智能体
协调是指应用中智能体的流程:哪些智能体要运行、以何种顺序运行,以及它们如何决定接下来要做什么。协调智能体主要有两种方式:
- 允许 LLM 做决策:利用 LLM 的智能进行规划、推理,并据此决定采取的步骤。
- 通过代码进行编排:用你的代码决定智能体的流程。
你可以混合使用这些模式。每种方式都有各自的权衡,详见下文。
通过 LLM 协调
一个智能体是配备了指令、工具和 handoffs 的 LLM。这意味着在给定开放式任务的情况下,LLM 可以自主规划如何处理任务,使用工具执行操作和获取数据,并通过 handoffs 将任务委派给子智能体。比如,一个研究智能体可以配备如下工具:
- 网络检索以在网上查找信息
- 文件检索与获取以搜索专有数据与连接
- 计算机操作以在计算机上执行动作
- 代码执行以进行数据分析
- handoffs 到擅长规划、报告撰写等的专业智能体
当任务是开放式且你希望依赖 LLM 的智能时,这种模式非常适合。这里最重要的策略是:
- 打造高质量提示词。明确可用的工具、如何使用它们,以及必须遵循的参数范围。
- 监控并迭代你的应用。观察问题出现在哪里,并迭代优化提示词。
- 允许智能体自我反思并改进。例如,在循环中运行它,让它自我批评;或者提供错误信息并让它改进。
- 使用在单一任务上表现卓越的专业智能体,而不是期望一个通用智能体在所有方面都很出色。
- 投入到评测。这使你能够训练智能体改进并在任务上表现更好。
通过代码协调
虽然通过 LLM 协调很强大,但通过代码协调在速度、成本和性能方面更具确定性和可预测性。常见模式包括:
- 使用structured outputs生成你可以用代码检查的格式良好的数据。例如,你可以要求智能体将任务分类到几个目录中,然后基于该目录选择下一个智能体。
- 通过将一个智能体的输出转换为下一个智能体的输入来串联多个智能体。你可以将撰写博客文章这样的任务分解为一系列步骤——进行研究、写大纲、写正文、评审,然后改进。
- 将执行任务的智能体与一个评估并提供反馈的智能体一起在
while循环中运行,直到评估者认为输出通过了特定标准。 - 并行运行多个智能体,例如通过 Python 基本组件如
asyncio.gather。当你有多个彼此不依赖的任务时,这有助于提升速度。
我们在examples/agent_patterns中提供了若干 code examples。