当我们讨论AGI时,Agent的工作方式无疑占据了技术前沿的中心舞台。随着大模型的快速进步,我们见证了各种新模式的涌现,这些模式不仅提升了llm的效能,更在根本上改变了它们与人类互动的方式。
最近一个月时间,吴恩达在社交媒体上分享了关于AI代理四种工作方式的见解,这些内容不仅洞察深刻,还为AI的应用开辟了新的可能性。他的讨论不仅令人兴奋,更是对所有关注人工智能发展的人士的一次宝贵启示。
接下来,让我们一起探索这些工作方式,并思考它们如何使得AI代理在执行复杂任务时更为高效和智能。
以下是吴恩达的原文:
引言:Agent的四种工作方式
我认为人工智能代理工作流程将在今年推动人工智能的巨大进步——甚至可能超过下一代基础模型。这是一个重要的趋势,我呼吁所有从事人工智能工作的人都关注它。
如今,我们主要在零样本模式下使用 LLM,促使模型逐个生成最终输出token,而无需修改其工作。这类似于要求某人从头到尾写一篇文章,直接打字,不允许退格,并期望得到高质量的结果。尽管有困难,llm在这项任务上表现得非常好!
然而,通过代理工作流程,我们可以要求llm多次迭代文档。例如,它可能需要执行一系列步骤,例如:
- 规划一个大纲。
- 决定需要进行哪些网络搜索(如果需要)来收集更多信息。
- 写初稿。
- 通读初稿,找出不合理的论点或无关的信息。
- 修改草案,考虑到发现的任何弱点。
- 等等。
这个迭代过程对于大多数人类作家写出好的文本至关重要。借助人工智能,这种迭代工作流程比单次编写产生更好的结果。
德文引人注目的演示最近在社交媒体上引起了广泛关注。我的团队一直密切关注编写代码的人工智能的发展。我们分析了多个研究团队的结果,重点关注算法在广泛使用的 HumanEval 编码基准上表现良好的能力。您可以在下图中看到我们的发现。
GPT-3.5(零样本)的正确率为 48.1%。GPT-4(零样本)的表现更好,为 67.0%。然而,从 GPT-3.5 到 GPT-4 的改进与迭代代理工作流程的结合相形见绌。事实上,在代理循环中,GPT-3.5 的成功率高达 95.1%。
开源代理工具和有关代理的学术文献正在激增,这使得这是一个令人兴奋的时刻,但也是一个令人困惑的时刻。为了帮助人们正确看待这项工作,我想分享一个用于对构建代理的设计模式进行分类的框架。我的团队 AI Fund 已在许多应用程序中成功使用这些模式,我希望您发现它们很有用。
- 反思:llm检查自己的工作,以提出改进的方法。
- 工具使用:法学硕士拥有网络搜索、代码执行或任何其他功能等工具来帮助其收集信息、采取行动或处理数据。
- 规划:法学硕士提出并执行一个多步骤计划来实现目标(例如,撰写论文大纲,然后进行在线研究,然后撰写草稿,等等)。
- 多智能体协作:多个人工智能智能体一起工作,分配任务并讨论和辩论想法,以提出比单个智能体更好的解决方案。
我将详细阐述这些设计模式,并为下周的每一周提供建议的读物。
一、反思
上周,我描述了人工智能代理工作流程的四种设计模式,我相信这些模式将在今年推动重大进展:反思、工具使用、规划和多代理协作。代理工作流程不是让法学硕士直接生成最终输出,而是多次提示法学硕士,使其有机会逐步构建更高质量的输出。在这里,我想讨论一下React。对于实现相对较快的设计模式,我已经看到它带来了令人惊讶的性能提升。
您可能有过提示 ChatGPT/Claude/Gemini、收到不满意的输出、提供关键反馈以帮助 LLM 改进其响应,然后获得更好响应的经历。如果您自动执行提供关键反馈的步骤,以便模型自动批评自己的输出并改进其响应,会怎么样?这就是反思的关键。
接受要求法学硕士编写代码的任务。我们可以提示它直接生成所需的代码来执行某些任务X。之后,我们可以提示它反思自己的输出,也许如下所示:
以下是用于任务 X 的代码:
[之前生成的代码]
仔细检查代码的正确性、风格和效率,并对如何改进提出建设性的批评。
有时这会导致法学硕士发现问题并提出建设性建议。接下来,我们可以向 LLM 提示上下文,包括 (i) 先前生成的代码和 (ii) 建设性反馈,并要求其使用反馈来重写代码。这可以带来更好的响应。重复批评/重写过程可能会产生进一步的改进。这种自我反思过程使法学硕士能够发现差距并改进各种任务的输出,包括生成代码、编写文本和回答问题。
我们可以通过提供法学硕士工具来帮助评估其输出,从而超越自我反思;例如,通过一些单元测试运行其代码以检查它是否在测试用例上生成正确的结果,或者搜索网络以仔细检查文本输出。然后它可以反思发现的任何错误并提出改进的想法。
此外,我们可以使用多代理框架来实现反射。我发现创建两个不同的代理很方便,一个提示生成良好的输出,另一个提示对第一个代理的输出提出建设性批评。两个代理之间的讨论导致了响应的改进。
反射是一种相对基本的代理工作流程类型,但我很高兴它在某些情况下改善了我的应用程序的结果。我希望你能在自己的工作中尝试一下。如果您有兴趣了解有关反射的更多信息,我推荐这些论文:
- Self-Refine: Iterative Refinement with Self-Feedback, by Madaan et al. (2023)
- Reflexion: Language Agents with Verbal Reinforcement Learning, by Shinn et al. (2023)
- CRITIC: Large Language Models Can Self-Correct with Tool-Interactive Critiquing, by Gou et al. (2024)
- 自我细化:通过自我反馈进行迭代细化,作者:Madaan 等人。(2023)
- 反射:具有言语强化学习的语言代理,作者:Shinn 等人。(2023)
- CRITIC:大型语言模型可以通过工具交互式批评进行自我纠正,作者:Gou 等人。(2024)
将来我还将讨论其他代理设计模式。
二、工具使用
工具使用是 AI 代理工作流的一个关键设计模式,即为 LLM 提供可以请求调用的功能,用于收集信息、采取行动或处理数据。您可能熟悉可以执行网络搜索或执行代码的基于 LLM 的系统。一些面向消费者的大型 LLM 已经整合了这些功能。但工具使用远不止这些例子。
如果您向基于 LLM 的在线聊天系统发出提示,“评论者认为最好的咖啡机是什么?”,它可能会决定进行网络搜索并下载一个或多个网页以获取上下文。早期,LLM 开发人员意识到仅依靠预先训练的转换器来生成输出标记是有限的,而为 LLM 提供网络搜索工具可以让它做更多的事情。使用这样的工具,LLM 可以进行微调或提示(可能是少量提示)生成特殊字符串,如 {tool: web-search, query: “coffee maker reviews”} 以请求调用搜索引擎。(字符串的确切格式取决于实现。)然后,后处理步骤会查找此类字符串,在找到字符串时使用相关参数调用网络搜索函数,并将结果作为附加输入上下文传回 LLM 以供进一步处理。
类似地,如果您问“如果我投资 100 美元,以 7% 的复利投资 12 年,最后我会得到什么?”,LLM 可能会使用代码执行工具运行 Python 命令来计算 100 * (1+0.07) ** 12 以获得正确答案,而不是尝试直接使用转换网络生成答案(这不太可能产生正确答案)。LLM 可能会生成如下字符串:{tool: python-interpreter, code: “100 * (1+0.07) ** 12”}。
但是,代理工作流中的工具使用现在更加广泛。开发人员正在使用函数来搜索不同的来源(网络、维基百科、arXiv 等)、与生产力工具交互(发送电子邮件、读取/写入日历条目等)、生成或解释图像等等。我们可以使用上下文来提示 LLM,该上下文提供了许多函数的详细描述。这些描述可能包括函数功能的文本描述以及函数期望的参数的详细信息。我们希望 LLM 能够自动选择正确的函数来调用以完成工作。
此外,正在构建的系统允许 LLM 使用数百种工具。在这种情况下,您可以使用的功能可能太多,无法将它们全部放入 LLM 上下文中,因此您可以使用启发式方法来选择最相关的子集,以便在当前处理步骤中将其包含在 LLM 上下文中。这种技术在下面引用的 Gorilla 论文中进行了描述,它让人想起,如果有太多文本无法作为上下文包含,检索增强生成 (RAG) 系统会提供启发式方法来选择要包含的文本子集。
在 LLM 的早期历史中,在 LLaVa、GPT-4V 和 Gemini 等大型多模态模型 (LMM) 广泛普及之前,LLM 无法直接处理图像,因此计算机视觉社区在工具使用方面开展了大量工作。当时,基于 LLM 的系统处理图像的唯一方法是调用函数,例如,对图像执行对象识别或其他功能。从那时起,工具使用的实践呈爆炸式增长。GPT-4 的函数调用功能于去年年中发布,这是朝着通用工具使用迈出的重要一步。从那时起,越来越多的 LLM 被开发出来,同样便于工具使用。
如果您有兴趣了解有关工具使用的更多信息,我推荐:
- Gorilla: Large Language Model Connected with Massive APIs, Patil et al. (2023)
- MM-REACT: Prompting ChatGPT for Multimodal Reasoning and Action, Yang et al. (2023)
- Efficient Tool Use with Chain-of-Abstraction Reasoning, Gao et al. (2024)
- Gorilla:与海量 API 相连的大型语言模型,Patil 等人(2023 年)
- MM-REACT:提示 ChatGPT 进行多模式推理和行动,Yang 等人(2023 年)
- 通过抽象链推理实现工具的有效使用,Gao 等人(2024 年)
我上周发布的工具使用和反射都是设计模式,我可以在应用程序中相当可靠地使用它们——这两种功能都值得学习。将来,我将描述规划和多智能体协作设计模式。它们允许 AI 智能体做更多的事情,但技术不太成熟,也不太可预测——尽管非常令人兴奋。
三、规划
规划是代理 AI 的一个关键设计模式,我们使用大型语言模型 (LLM) 自主决定执行哪些步骤来完成更大的任务。例如,如果我们要求代理对给定主题进行在线研究,我们可能会使用 LLM 将目标分解为较小的子任务,例如研究特定子主题、综合研究结果和编写报告。
ChatGPT 发布后不久,许多人都经历了“ChatGPT 时刻”,当他们玩它时,惊讶地发现它大大超出了他们对 AI 能力的预期.如果你还没有经历过类似的“AI 代理时刻”,我希望你很快就会经历。几个月前我就经历过一次,当时我展示了一个我实现的研究代理的现场演示,它可以访问各种在线搜索工具。
我曾多次私下测试过这个代理,在此期间,它始终使用网络搜索工具收集信息并撰写摘要。但在现场演示期间,网络搜索 API 意外返回了速率限制错误。我以为我的演示即将公开失败,我害怕接下来会发生什么。令我惊讶的是,代理巧妙地转向了维基百科搜索工具(我忘了我给了它)并使用维基百科而不是网络搜索完成了任务。
对我来说,这是 AI Agentic 的惊喜时刻。我认为许多尚未经历过这种时刻的人将在未来几个月内经历这种时刻。当你看到代理自主决定以你未曾预料到的方式做事并因此取得成功时,这是一件美妙的事情!
许多任务无法在一个步骤或单个工具调用中完成,但代理可以决定采取哪些步骤。例如,为了简化 HuggingGPT 论文(如下所述)中的一个例子,如果您希望代理考虑一张男孩的照片并画一张相同姿势的女孩的照片,则该任务可能分解为两个不同的步骤:(i)检测男孩照片中的姿势和(ii)渲染一张检测到的姿势的女孩照片。LLM 可能会通过输出类似“{tool: pose-detection, input: image.jpg, output: temp1 } {tool: pose-to-image, input: temp1, output: final.jpg}”这样的字符串进行微调或提示(使用少量提示)以指定计划。
此结构化输出指定要采取的两个步骤,然后触发软件调用姿势检测工具,然后调用姿势到图像工具来完成任务。(此示例仅用于说明目的;HuggingGPT 使用不同的格式。)
不可否认,许多代理工作流不需要规划。例如,您可能让代理对其输出进行固定次数的反思和改进。在这种情况下,代理采取的步骤顺序是固定且确定的。但对于您无法提前指定将任务分解为一系列步骤的复杂任务,规划允许代理动态决定要采取哪些步骤。
一方面,规划是一种非常强大的能力;另一方面,它会导致更难以预测的结果。根据我的经验,虽然我可以让反射和工具使用的代理设计模式可靠地工作并提高我的应用程序的性能,但规划是一种不太成熟的技术,我发现很难提前预测它会带来什么.但该领域仍在快速发展,我相信规划能力会迅速提高。
如果你有兴趣了解有关 LLM 规划的更多信息,我推荐:
- Chain-of-Thought Prompting Elicits Reasoning in Large Language Models, Wei et al. (2022)
- HuggingGPT: Solving AI Tasks with ChatGPT and its Friends in Hugging Face, Shen et al. (2023)
- Understanding the planning of LLM agents: A survey, by Huang et al. (2024)
- 思维链提示在大型语言模型中引发推理,Wei 等人(2022 年)
- HuggingGPT:利用 ChatGPT 及其在 Hugging Face 中的好友解决 AI 任务,Shen 等人(2023 年)
- 了解 LLM 代理的规划:一项调查,作者:Huang 等人(2024 年)
四、多智能体规划
多智能体协作已成为一种关键的 AI 智能体设计模式。对于编写软件等复杂任务,多智能体方法会将该任务分解为由不同角色-- (例如软件工程师、产品经理、设计师、QA(质量保证)工程师等–执行的子任务,并让不同的智能体完成不同的子任务。
可以通过提示一个 LLM(或者,如果您愿意,可以提示不同的 LLM)执行不同的任务来构建不同的代理。例如,要构建软件工程师代理,我们可以提示 LLM:“您是编写清晰、高效代码的专家。编写代码来执行任务……”。
虽然我们对同一个 LLM 进行了多次调用,但我们应用了使用多个代理的编程抽象,这似乎有悖常理。我想提出几个原因:
- 有效!许多团队都通过这种方法取得了良好的结果,没有什么比结果更重要了!此外,消融研究(例如,在下面引用的 AutoGen 论文中)表明,多个代理的性能优于单个代理。
- 尽管如今有些 LLM 可以接受非常长的输入上下文(例如,Gemini 1.5 Pro 接受 100 万个token),但它们真正理解长而复杂的输入的能力却参差不齐。在代理工作流中,LLM 被提示一次专注于一件事,可以提供更好的性能。通过告诉它何时应该扮演软件工程师的角色,我们还可以指定该子任务中什么是重要的:例如,上面的提示强调清晰、高效的代码,而不是可扩展且高度安全的代码。通过将整体任务分解为子任务,我们可以更好地优化子任务。
- 也许最重要的是,多代理设计模式为我们这些开发人员提供了一个将复杂任务分解为子任务的框架。在编写在单个 CPU 上运行的代码时,我们经常将程序分解为不同的进程或线程。这是一个有用的抽象,它让我们将任务-- (如实现 Web 浏览器–分解为更易于编码的子任务。我发现通过多代理角色进行思考是一种有用的抽象。
在许多公司中,管理人员通常会决定招聘哪些职位,然后决定如何将复杂的项目-- (例如编写大型软件或准备研究报告–拆分为较小的任务,以分配给具有不同专长的员工。使用多个代理是类似的。每个代理都实现自己的工作流程,拥有自己的记忆(本身就是代理技术中一个快速发展的领域–代理如何记住足够多的过去交互以便在即将到来的交互中表现更好?),并且可以向其他代理寻求帮助。代理本身也可以参与规划和工具使用。这会导致代理之间 LLM 调用和消息传递的杂音,从而导致非常复杂的工作流程。
虽然管理人很难,但这是一个足够熟悉的想法,它为我们提供了一个如何“雇用”和分配任务给我们的人工智能代理的思维框架。幸运的是,管理不当造成的损失比管理不当造成的损失要小得多!
AutoGen、Crew AI 和 LangGraph 等新兴框架提供了丰富的方法来构建多智能体问题解决方案。如果您有兴趣尝试有趣的多智能体系统,还可以查看 ChatDev,这是一组运行虚拟软件公司的智能体的开源实现。我鼓励您查看他们的 github repo,甚至可以克隆该 repo 并自己运行该系统。虽然它可能并不总是能产生您想要的结果,但您可能会惊讶于它的效果!
和 Planning 设计模式一样,我发现多代理协作的输出质量很难预测。更成熟的 Reflection 和 Tool 使用模式更可靠。希望您喜欢使用这些代理设计模式,并希望它们为您带来惊人的结果!
以上是吴恩达关于Agent四种工作方式的完整全文介绍。
随着我们深入探讨吴恩达所分享的关于Agent的四种工作方式,我们可以看到,这些方法不仅展示了llm的强大潜能,还指明了未来Agent发展的方向。
通过不断迭代和优化这些工作流,Agent不仅能够提升其独立处理复杂任务的能力,还能更好地与人类合作,共同解决问题,甚至带给人类更多的惊喜。
读者福利:如果大家对大模型感兴趣,这套大模型学习资料一定对你有用
对于0基础小白入门:
如果你是零基础小白,想快速入门大模型是可以考虑的。
一方面是学习时间相对较短,学习内容更全面更集中。
二方面是可以根据这些资料规划好学习计划和方向。
包括:大模型学习线路汇总、学习阶段,大模型实战案例,大模型学习视频,人工智能、机器学习、大模型书籍PDF。带你从零基础系统性的学好大模型!
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费
】🆓
👉AI大模型学习路线汇总👈
大模型学习路线图,整体分为7个大的阶段:(全套教程文末领取哈)
第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;
第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;
第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;
第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;
第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;
第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;
第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。
👉大模型实战案例👈
光学理论是没用的,要学会跟着一起做,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
👉大模型视频和PDF合集👈
观看零基础学习书籍和视频,看书籍和视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;
• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;
• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;
• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。
👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费
】🆓