我今天很高兴与大家分享我对 AI Agent 的看法,我认为这是一个令人兴奋的趋势,所有从事 AI 开发的人都应该关注。目前,大多数人使用语言模型的方式是非 Agent 式的工作流,即输入提示,生成答案,就像让一个人从头到尾写一篇文章,中间不能使用退格键。尽管这很难,但语言模型完成得非常好。
09172710-2024-04-09T09:24:00.png
相比之下,Agent 式工作流是这样的:让 AI 编写文章大纲,看是否需要做一些研究,然后写初稿,阅读初稿并思考哪些部分需要修改,然后修改草稿,如此反复。这个工作流程更加迭代,在其中你可能让语言模型做一些思考,然后修改文章,然后做更多的思考,如此迭代多次。
09172725-2024-04-09T09:24:23.png
令人惊讶的是,Agent 式工作流能够带来非常好的结果。我自己在使用这些 Agent 工作流时也感到非常吃惊,它们的效果出乎意料的好。我的团队使用一个名为 HumanEval 的编码基准测试数据进行了一项案例研究,这个基准测试包含一些编码问题,比如给定一个整数列表,返回所有偶数位置上元素的总和。

如果你使用 GPT-3.5 进行 zero-shot 提示,正确率为 48%,GPT-4 则达到了 67%。但如果你基于 GPT-3.5 使用 Agent 式工作流,实际上会比 GPT-4 做得更好。如果你在 GPT-4 使用这种类型的工作流,效果也会非常好。你会注意到,使用 Agent 工作流的 GPT-3.5 实际上优于 GPT-4,我认为这对我们如何构建应用程序有重大影响。
09172811-2024-04-09T09:25:17.png
Agent 是一个经常被提及的术语。有很多咨询报告谈论 Agent 是 AI 的未来等等,我想更具体地与大家分享我在 Agent方面看到的一些广泛的设计模式。这是一个非常混乱、不确定的领域,有大量的研究和开源项目。尽管如此,我还是尝试对 Agent 的发展进行了更具体的分类。

AI Agent 的四种模式

反思(Reflection) 是一个我认为我们都应该使用的工具,因为它确实有效,但我认为它还没有得到广泛的认可。规划(Planning)和多智能体协同(Multi-agent collaboration) 目前还处于新兴阶段,当我使用它们时,有时会对它们的表现感到震惊,但至少在目前,我觉得还不能让它们稳定工作。

接下来,我将通过几页幻灯片来介绍这四种设计模式。如果你们中有人回去让你的工程师使用这些模式,我认为你会很快获得生产力的提升。
09172827-2024-04-09T09:25:25.png
1.关于反思(Reflection),举个例子,假设你要求系统为你编写一个给定任务的代码。然后我们有一个 Coder Agent,它本质上就是一个语言模型,你提示它编写类似 def do_task() 这样的函数。

自我反思的一个例子是,如果你用与刚刚生成的代码完全相同的代码提示语言模型,然后说"请仔细检查代码的正确性、健全性、效率和良好的结构"。
09172850-2024-04-09T09:25:51.png
事实证明,你提示编写代码的同一个语言模型可能能够发现问题,比如"第 5 行有一个 bug,可以通过做 xxx 来修复",如果你现在把它自己的反馈再次提供给它并重新提示,它可能会提出一个比第一版更好的版本 2 代码。这并不能保证,但在很多应用中,它经常能奏效,值得一试。

如果你让它运行单元测试,如果没通过单元测试,就问它为什么没通过,进行对话,找出没通过单元测试的原因,然后尝试修改一些东西,提出版本 3 的代码。顺便说一下,对于那些想更多地了解这些技术的人,我对它们感到非常兴奋。对于这四个部分中的每一个,我在底部都有一个推荐阅读的小节,希望能提供更多的参考资料。

再次说一下多智能体协同(Multi-agent collaboration)。我把它描述为一个单一的 Coder Agent,你提示它与自己进行对话。这个想法的一个自然演变是,不是一个单一的代码 Agent,而是可以有两个 Agent,一个是 Coder Agent,另一个是 Critic Agent。

它们可以是相同的基础语言模型,但你以不同的方式提示它们,比如对其中一个说"你是专业的程序员,请编写代码",对另一个说"你是专业的代码审查员,请审查这个代码"。这种类型的工作流实际上很容易实现,我认为这是一种非常通用的技术,适用于很多工作流程,这将显著提高语言模型的性能。

2.第二个设计模式是使用工具(Tool use)。我们已经看到基于语言模型的系统使用工具的例子,左边是 GitHub Copilot 的截图,右边是我从 GPT-4 中提取的内容。但是今天的语言模型,如果你问它"什么是最好的咖啡机",它会进行网络搜索。
09173223-2024-04-09T09:29:24.png
对于一些问题,它会生成代码并运行代码。事实证明,有很多不同的工具被用于分析、收集信息、采取行动和提高个人生产力。

有趣的是,早期关于工具使用的许多工作似乎都源于计算机视觉领域,因为在大型语言模型出现之前,它们无法处理图像。因此,唯一的选择是让语言模型生成一个可以操作图像的函数调用,比如生成图像或进行目标检测等。

所以如果你真的看一下文献,有趣的是,在工具使用方面的大量工作似乎都源于视觉领域,因为在 GPT-4 等出现之前,语言模型对图像是盲目的。这就是使用工具,它扩展了语言模型的能力。

3.关于规划(Planning),对于那些还没有大量使用过规划算法的人,我觉得很多人都谈论过 ChatGPT 时刻,觉得"哇,从未见过这样的东西"。

我想,如果你没有使用过规划算法,很多人会有一种"AI Agent,哇,我无法想象 AI Agent 能做到这一点"的感觉。我举办过现场演示,有时候某些东西失败了,AI Agent 绕过了这些失败。实际上,我有过很多这样的时刻,感到"哇,真不敢相信我的 AI 系统刚刚自主地做到了这一点"。

举个我从一篇 HuggingGPT 论文中改编的例子。比如你说"有一幅女孩正在读书的通用图像,让图像中的女孩摆出与男孩相同的姿势。Jack,请为你的声音描述新的图像"。

给出这样一个例子,今天我们有 AI Agent 可以做,首先要确定男孩的姿势,然后可能在 Hugging Face 上找到合适的模型来提取姿势。接下来需要找到一个姿势图像模型来合成一张女孩的图片,遵循指令,然后使用图像到文本的转换,最后使用文本到语音的转换。
09173232-2024-04-09T09:29:36.png
今天,我们实际上有 Agent,我不想说它们工作得很可靠,它们并不总是奏效,但当它奏效时,实际上相当惊人。使用 Agent 循环,有时你也可以从早期的失败中恢复。所以我发现自己已经在使用研究 Agent 来完成我的一些工作,比如一项研究工作,我不想自己去 Google 搜索,花很长时间,我会把它发送给 Research Agent,几分钟后回来看看它提出了什么,有时它奏效,有时不奏效,但这已经是我个人工作流程的一部分了

4.最后一个设计模式是多智能体协同(Multi-Agent collaboration),这是一件有趣的事情,但它的效果比你想象的要好得多。

如下图,左边是一篇名为 ChatDev 的论文的截图,它是完全开源的。你们许多人可能看过令人眼花缭乱的社交媒体公告,演示了 DeepMind 的AI 编码助手。ChatDev 是开源的,可以在我的笔记本电脑上运行。

ChatDev 所做的是多 Agent 系统的一个例子,你提示一个语言模型,有时扮演软件公司的 CEO,有时扮演设计师,有时扮演产品经理,有时扮演测试人员。你通过提示语言模型告诉他们"你现在是CEO,你现在是软件工程师",建立了一群 Agent,它们协作并进行广泛的对话。
09173314-2024-04-09T09:30:16.png
所以如果你告诉它"请开发一个游戏,开发一个 GUI 游戏",它们实际上会花几分钟编写代码,测试代码,迭代,然后生成一个非常复杂的程序。它并不总是奏效,我有时使用它,有时它不奏效,有时它令人惊叹,但这项技术确实在不断进步。

事实证明,让不同的 Agent 进行辩论,例如让 ChatGPT 和 Gemini 互相辩论,实际上也会带来更好的表现。所以让多个模拟的 AI agent 协同工作已经成为一个强大的设计模式。

总结一下,我认为这些是我看到的模式,如果我们在工作中使用这些模式,我们中的许多人都可以很快得到生产力的提升。我认为 Agent 推理设计模式将很重要,我预计今年 AI 能做的事情将因 Agent 工作流而大大扩展。
09173338-2024-04-09T09:30:36.png
让人们难以适应的一点是,当我们提示语言模型时,我们希望立即得到响应。事实上,十年前,当我在 Google 参与有关大型搜索框的讨论时,你输入一个长长的提示,其中一个原因是,当你做网络搜索时,你希望在半秒钟内得到响应,这是人性,我们喜欢即时的反馈

但对于许多 Agent 工作流,我认为我们需要学会将任务委托给 AI Agent,并耐心等待几分钟,甚至几个小时才能得到响应。就像我看到很多新的产品经理把一些事情交给别人,然后过一些时间来检查一样,这可能并不高效。我想我们也需要对我们的一些 AI Agent 做同样的事情。

另外,快速的 Token 生成也很重要,因为在这些 Agent 工作流中,我们反复迭代,语言模型为自己生成 Token 以供阅读。能够以比任何人阅读都快得多的速度生成 Token 是非常棒的。

我认为,从一个稍低质量的语言模型快速生成更多 Token,可能比从一个更好的语言模型慢速生成 Token 产生更好的结果。这可能有点争议,因为它可能让你绕过这个循环更多次,有点像我在第一张幻灯片上展示的带有 Agent 架构的 GPT-3 的结果。

我非常期待 Anthropic 的 Claude、GPT-5、Gemini 2.0 以及你们许多人正在构建的所有其他精彩模型。我有一部分感觉是,如果你期待在 GPT-5 上运行你的 zero-shot 任务,通过在一个更弱的模型上使用 Agent 推理可能会比你想象的更接近那个性能水平,我认为这是一个重要的趋势。

老实说,通往 AGI 的道路感觉更像是一段旅程,而不是一个目的地。但我认为这种类型的 Agent 工作流可以帮助我们在这个非常漫长的旅程中向前迈进一小步。