编排多个 Agents
编排指的是应用程序中 Agents 的运行流程。哪些 Agents 运行、按什么顺序运行,以及它们如何决定接下来做什么?编排 Agents 主要有两种方式:
- 让大语言模型(LLM)做决策:利用 LLM 的智能进行规划、推理,并据此决定采取哪些步骤。
- 通过代码编排:通过代码确定 Agents 的运行流程。
你可以混合使用这些模式。每种模式都有其优缺点,如下所述。
通过 LLM 编排
Agent 是配备了指令、工具和交接/切换功能的 LLM。这意味着,对于开放式任务,LLM 可以自主规划如何完成任务,使用工具采取行动并获取数据,以及使用交接/切换功能将任务委托给子 Agents。例如,一个研究 Agent 可以配备以下工具: - 网页搜索,用于在网上查找信息 - 文件搜索和检索,用于搜索专有数据和连接 - 计算机使用,用于在计算机上执行操作 - 代码执行,用于进行数据分析 - 交接/切换到擅长规划、撰写报告等的专业 Agents。
当任务是开放式的,并且你希望依赖 LLM 的智能时,这种模式非常适用。这里最重要的策略有: 1. 精心设计提示词。明确说明有哪些可用工具、如何使用这些工具,以及必须在哪些参数范围内操作。 2. 监控应用程序并进行迭代。找出问题所在,并对提示词进行迭代。 3. 允许 Agent 进行自省和改进。例如,让它循环运行,并让它自我批评;或者,提供错误消息并让它改进。 4. 拥有擅长单一任务的专业 Agents,而不是使用期望擅长所有事情的通用 Agent。 5. 投入精力进行评估。这能让你训练 Agents,使其在任务中不断改进并表现得更好。
通过代码进行编排
虽然通过大语言模型(LLM)进行编排功能强大,但通过代码进行编排能让任务在速度、成本和性能方面更具确定性和可预测性。常见模式如下:
- 使用 结构化输出 生成格式规范的数据,以便用代码进行检查。例如,你可以让一个 Agent 将任务分类为几个类别,然后根据类别选择下一个 Agent。
- 通过将一个 Agent 的输出转换为下一个 Agent 的输入,将多个 Agent 串联起来。你可以将撰写博客文章这样的任务分解为一系列步骤:进行研究、撰写大纲、撰写博客文章、进行评论,然后加以改进。
- 在 while
循环中,让执行任务的 Agent 与进行评估并提供反馈的 Agent 一起运行,直到评估者表示输出通过特定标准。
- 例如通过 asyncio.gather
等 Python 基础组件并行运行多个 Agent。当你有多个相互独立的任务时,这有助于提高速度。
在examples/agent_patterns
中有许多代码示例。