超越工作流程:揭示真正的代理--下一次进化?
- Rifx.Online
- Large Language Models , AI Research , Industry Insights
- 05 Mar, 2025
观看视频!
大多数人所称的代理并不是代理。我一直不太喜欢“代理”这个术语,直到我看到这篇最近的安索普文章,我完全同意,现在也明白我们如何称某些东西为代理。绝大多数其实只是对语言模型的应用程序接口调用。其实就是这样:几行代码和一个提示。
这不能独立行动、做决策或执行任何操作。它只是回复你的用户。尽管如此,我们还是称它们为代理。但这并不是我们所需要的。我们需要真正的代理,但什么才是真正的代理呢?
那么,让我们重新开始。我们有一个通过应用程序接口程序化访问的大语言模型,或者在你自己的服务器或机器上本地访问,然后呢?好吧,我们需要它采取行动,或做一些比仅仅生成文本更多的事情。怎么做?通过给予它对工具及其文档的访问权限。我们给它访问一个工具的权限,比如在数据库中执行结构化查询语言查询以获取私有知识。具体来说,我们自己编写所有代码,让大语言模型生成结构化查询语言查询,然后我们的代码会自动在我们的数据库中发送和执行查询。然后我们将输出发送回来,以便它使用这些输出来回答用户。
这就是另一大部分人所称的代理。它们仍然不是代理。这只是一个过程,硬编码或有小变动,就像我们在课程中讨论的路由器。当然,它是有用的,并且功能强大。然而,它不是一个智能存在或独立的东西。它不是一个代表我们行动的“代理”。这只是我们制作并控制的一个程序。或者,正如安索普所称的那样,一个工作流。
别误解我的意思。工作流非常有用。它可以变得相当复杂和高级。我们可以实现智能路由器,以决定使用哪个工具以及何时给予它访问各种数据库的权限,让它决定查询哪个,何时查询,通过代码通过行动工具执行任务,等等。此外,你可以拥有任意数量的工作流。然而,我只是想说明它与真正代理的不同。我们梦想中的代理类型,以及伊利亚在最近的神经信息处理系统演讲中提到的类型……
下一个自然的问题可能是:“真正的代理”到底是什么?简单来说,真正的代理是能够独立运作的东西。更具体地说,它是能够运用像我们的系统2思维那样的过程——能够真正推理、反思,并意识到自己缺乏知识。这几乎与我们的系统1思维相反,系统1思维是快速的、自动的,纯粹基于模式和学习的反应,比如当你需要抓住掉落的玻璃时的反射。相比之下,系统2思维可能涉及决定是否首先防止玻璃掉落,可能通过使用附近的工具如托盘或将易碎物品移开。因此,真正的代理不仅知道如何使用工具,还能够根据深思熟虑的推理决定何时以及为何使用它们。OpenAI的新o1和o3系列体现了这种转变,因为它们开始探索类似于系统2的方法,并试图通过首先与自己内部讨论来使模型“推理”,模仿人类的推理方式,然后再进行发言。与依赖下一个单词(或下一个标记)预测的传统语言模型不同——本质上是一个系统1的瞬时思维机制,纯粹基于它所知道的和学会的去猜测下一个瞬间要做的事情,没有计划——这些新模型旨在融入更深层次的推理能力,标志着向与系统2相关的深思熟虑的反思性思维的转变。这是成为真正代理所必需的。但我们在这个卡尼曼的插曲上稍微偏离了一点。让我通过回到工作流和它们真正是什么来澄清我对真正代理的看法……
工作流遵循特定的代码线和集成,除了大语言模型的输出外,都是相当可预测的。它们负责你今天看到和使用的大多数高级应用程序,这也是有原因的。它们是一致的,更可预测,并且在适当利用时非常强大。正如安索普所写,“工作流是大语言模型和工具通过预定义代码路径进行协调的系统。”
这就是工作流的样子。我们有我们的大语言模型,一些工具或内存以获取额外的上下文,通过多次调用大语言模型进行一些迭代,然后将输出发送回用户。正如我们所讨论的,当一个系统有时需要执行一个任务,有时需要执行另一个任务,具体取决于条件时,工作流可以使用路由器与各种条件来选择正确的工具或正确的提示。它们甚至可以并行工作以提高效率。更好的是,我们可以有某种主模型,我们称之为协调者,选择所有不同的同伴模型来执行特定任务并综合结果,比如我们的结构化查询语言示例,我们会有一个主协调者获取用户查询,并可以决定是否需要查询数据集,如果需要,则请求结构化查询语言代理生成结构化查询语言查询,查询数据集,获取结果并综合最终答案,感谢所有提供的信息。这几乎就像聊天生成预训练变换器的界面,有时利用画布或使用代码解释器来更好地满足你的需求。即使复杂和高级,它仍然是完全硬编码的。如果你知道你的系统需要做什么,你就需要一个工作流。无论它有多先进。
例如,CrewAI所称的代理像是分配给特定任务的预定义工作流,而安索普设想的代理是一个能够独立推理任何任务的单一系统。这两种方法都有其优点:一种是可预测和直观的,而另一种则旨在灵活性和适应性。然而,后者在当前模型中更难实现,更符合我对代理的定义。
那么,关于那些“真正的”代理……
代理“是系统,其中大语言模型动态地指导自己的过程和工具使用,保持对如何完成任务的控制”。这是安索普所写的,我对此表示赞同。真正的代理通过与你交流并理解你的需求来制定计划,在“推理”层面上迭代,以决定采取哪些步骤来解决问题或查询。理想情况下,它甚至会询问你是否需要更多信息或澄清,而不是像当前的大语言模型那样产生幻觉。尽管如此,它们可以简单地构建。它们需要一个非常强大的大语言模型,比我们现在拥有的更好,并且需要一个环境来发展它,比如与你的讨论和一些额外的权限,例如它们可以在适当的时候自行使用的工具,并进行迭代。简而言之,你可以将代理视为几乎替代某人或某个角色,而工作流则替代一个人会做的任务。没有硬编码的路径。代理系统将自行做出决策。它们是更先进和复杂的东西,我们仍然没有成功构建。
这种独立性和对系统的信任显然使其更容易出现故障,运行和使用的成本更高,增加延迟,最糟糕的是,结果现在并不那么令人兴奋。当它们令人兴奋时,它们完全不一致。
那么,什么是一个实际的好代理示例?两个例子迅速浮现在我脑海中,分别是德文和安索普的计算机使用。然而,目前它们都是令人失望的代理。
如果你对德文感到好奇,哈梅尔·侯赛因有一篇非常好的博客分享了他使用它的经验。德文提供了对基于代理系统的承诺
理解工作流程和真实代理
目前,与所有与代码相关的事物一样,我们应该始终寻求找到一个尽可能简单的解决方案来解决我们的问题。首先,我们可以轻松迭代和调试。简单的 LLM 调用往往是最佳选择。这通常是人们和公司所销售的“代理”,但你不会再被欺骗了。你可能想通过使用检索系统或轻微微调来补充 LLM,但你在追求真正的代理上花费的钱和时间应该留给那些我们无法通过其他方式解决的真正复杂问题。
我希望这篇文章能帮助你理解工作流程和真实代理之间的区别,以及何时使用这两者。感谢你的阅读!