多个agent的编排
编排指的是你应用中agent的流程控制。哪些agent会运行,以什么顺序运行,以及它们如何决定下一步行动?有两种主要的agent编排方式:
- 让LLM做决策:利用LLM的智能来规划、推理并决定下一步行动。
- 通过代码编排:用你的代码来控制agent的流程。
你可以混合使用这些模式。每种方式都有各自的优缺点,下面我们来聊聊。
通过LLM进行编排
一个agent就是配备了指令、工具和交接能力的LLM。这意味着面对开放性任务,LLM可以自主规划如何处理任务,使用工具来执行操作和获取数据,并通过交接将任务委派给子agent。比如,一个研究型agent可以配备这些工具:
- 网络搜索,用于在线查找信息
- 文件搜索和检索,用于搜索专有数据和连接
- 计算机操作,用于在计算机上执行操作
- 代码执行,用于数据分析
- 交接给专门的agent,这些agent擅长规划、报告撰写等工作
当任务比较开放,你想依靠LLM的智能时,这种模式非常棒。这里最重要的策略是:
- 投入精力写好提示词。明确说明有哪些工具可用,如何使用它们,以及它必须在什么参数范围内运行。
- 监控你的应用并不断迭代。看看哪里出了问题,然后改进你的提示词。
- 允许agent自我反思和改进。例如,让它在循环中运行并自我批评;或者,提供错误信息让它改进。
- 拥有专门的agent,每个擅长一项任务,而不是期望一个通用agent擅长所有事情。
- 投资于evals。这让你能训练你的agent,提高它们完成任务的能力。
通过代码进行编排
虽然通过LLM进行编排很强大,但通过代码编排可以使任务在速度、成本和性能方面更加确定和可预测。常见的模式包括:
- 使用structured outputs生成格式良好的数据,你可以在代码中检查这些数据。比如,你可以让agent将任务分类,然后根据类别选择下一个agent。
- 通过将一个agent的输出转换为下一个agent的输入来链接多个agent。你可以将写博客这样的任务分解为一系列步骤 - 做研究、写大纲、写博客、批评它,然后改进它。
- 在
while循环中运行执行任务的agent,同时有另一个agent进行评估和提供反馈,直到评估者认为输出符合特定标准。 - 并行运行多个agent,例如通过Python的
asyncio.gather。当你有多个不相互依赖的任务时,这对提高速度很有用。
我们在examples/agent_patterns中有许多示例。