我对“代理”一词的主要抱怨是,虽然它有许多不同的潜在定义,但大多数使用它的人似乎认为其他人都共享并理解他们选择使用的定义。
Anthropic 的 Erik Schluntz 和 Barry Zhu 的这篇杰出作品从一开始就与这种趋势相反,提供了一个清晰的定义,并在整个过程中使用。
他们将“代理系统”作为父术语进行讨论,然后定义“工作流程”(使用预定义模式将多个法学硕士编排在一起的系统)和“代理”之间的区别,其中法学硕士“动态指导自己的流程和工具使用” ”。第二个定义后来通过以下令人愉快的清晰描述进行了扩展:
代理通过人类用户的命令或与人类用户的交互式讨论开始工作。一旦任务明确,智能体就会独立计划和操作,并有可能返回人类以获取进一步的信息或判断。在执行过程中,代理在每个步骤(例如工具调用结果或代码执行)中从环境中获取“基本事实”以评估其进度至关重要。然后,特工可以在检查站或遇到拦截者时暂停以获取人工反馈。任务通常在完成后终止,但通常还包含停止条件(例如最大迭代次数)以维持控制。
这是我可以接受的定义!
他们还引入了一个我非常喜欢的术语:增强法学硕士。这是一个带有诸如工具之类的增强功能的法学硕士——我见过人们为此使用“代理”一词,但我觉得这并不合适。
本文的其余部分是构建我在任何地方见过的结合多个 LLM 调用的系统的最清晰的实用指南。
大多数关注点实际上是在工作流程上。他们详细描述了五种不同的工作流程模式:
- 提示链接,例如生成文档,然后将其翻译为单独的语言作为第二个 LLM 调用
- 路由,初始 LLM 调用决定接下来应使用哪个模型或调用(例如,将简单的任务发送到 Haiku,将较难的任务发送到 Sonnet)
- 并行化,其中任务被分解并并行运行(例如,同时在多个文档页面上进行图像到文本)或通过某种投票机制进行处理
- Orchestrator-workers,其中协调器触发多个 LLM 调用,然后将这些调用合成在一起,例如针对多个源运行搜索并将结果组合起来
- 评估器优化器,其中一个模型在循环中检查另一个模型的工作
这些模式对我来说都很有意义,给它们提供清晰的名称可以让它们更容易推理。
您什么时候应该从基本提示升级到工作流程,然后升级到完整代理?作者提出了这个明智的警告:
当使用法学硕士构建应用程序时,我们建议尽可能寻找最简单的解决方案,并且仅在需要时增加复杂性。这可能意味着根本不构建代理系统。
但假设您确实需要超越上述工作流程模式所能实现的目标,那么他们的代理模型可能是一个有用的选择:
代理可用于解决难以或不可能预测所需步骤数以及无法硬编码固定路径的开放式问题。法学硕士可能会运作很多轮,你必须对其决策有一定程度的信任。代理的自主性使它们成为在可信环境中扩展任务的理想选择。
代理的自主性意味着更高的成本,并且可能会出现复合错误。我们建议在沙盒环境中进行广泛的测试,并配备适当的护栏
他们还警告,在使用直接 API 访问和简单代码用尽所有选项之前,不要投资复杂的代理框架。
本文附有一套全新的食谱,说明了所有五种工作流程模式。 Evaluator-Optimizer Workflow示例特别有趣,它设置了代码生成提示和代码审查评估器提示,并让它们循环,直到评估器对结果感到满意。
通过哈梅尔·侯赛因
标签:提示工程、人类、生成人工智能、 llm-工具使用、人工智能、 llms 、人工智能代理
原文: https://simonwillison.net/2024/Dec/20/building-effective-agents/#atom-everything