type
Post
status
Published
date
Apr 29, 2023
slug
summary
个人对AutoGPT的一些理解
tags
ChatGPT
category
技术分享
icon
password
状态
专注质量
预计(分钟)
开始时间
结束时间
🤔AutoGPT思路以及代码解读
简介
官网链接:
官网描述:
Auto-GPT 是一个实验性的开源应用程序,展示了 GPT-4 语言模型的实力。该程序由 GPT-4 驱动,将 LLM 的“思想”链接在一起,以自主实现您设定的任何目标。作为 GPT-4 完全自主运行的首批示例之一,Auto-GPT 打破了 AI 的可能性界限。
如上图,AutoGPT项目的火爆程度随着star的增长速度以指数级上升。
就在笔者开始撰写本文时的8分钟前,项目仍在快速迭代,0.2.0版本刚刚发布。
AutoGPT强在哪儿?和ChatGPT又有何本质的区别?
举个例子,ChatGPT是一个万事通的对话小助手。我们可以让他扮演各种角色,回答各个领域的问题,包括且不限于完成编写代码 👨💻、阅读论文、指导AI绘画等工作。
从交互方式的角度来看,ChatGPT是以人为主导,人类描述各种工作并让ChatGPT去工作。工作成果由人来验收,由人来给出工作完成质量的反馈。一次提问往往无法得到一个准确的结果,用户需要反复提问,修正错误,最后才能得到相对较好的答案。
对于AutoGPT而言,交互模式发生了本质的变化。我们设定了一个目标,让它自己去分析完成这项工作需要执行哪些步骤,为什么执行这些步骤,制定计划并自主思考。在最后一个步骤,它会去执行行动,行动的结果再重新输入回大脑,循环往复。AutoGPT正如其名,是一个“全自动”版本的GPT,基于GPT-4或GPT3.5开发,并扩展了自己的能力。就好比是让原来的ChatGPT作为思考的“大脑”,AutoGPT经过二次开发,让它拥有了能执行行动的“手”和“脚”。
下图是笔者在本机运行AutoGPT时执行的一个案例。我为它命名为“James”,让它分析今年NBA总决赛总冠军最有可能是哪支队伍,并将分析过程保存在word文档中。
重点看那些有颜色高亮的文字,这些文字能直观地显示出 AutoGPT 的运行流程。
- James Thoughts:名为“James”的助手对当前目标进行思考的过程,思考的结果是为了制定工作计划。
- Reasoning:给出工作计划合理性的理由,比如这里,AutoGPT 输出的内容是其针对“预测 NBA 总冠军”这一目标,要进行数据分析的理由。
- Plan:要执行哪些计划?AutoGPT 会列出一些步骤。
- Criticism:给出了一些执行工作计划的注意事项。
- Next Action:经过一系列的思考,下一步要执行怎样的行动。给出一个“Command”和对应的参数“Arguments”。
AutoGPT完成了一项从思考→行动→反馈→思考的自主循环。
依据笔者个人的理解,AutoGPT最主要的贡献是对AI未来形态进行了建模。正如上文所述,未来的人工智能不仅仅是对话,它不仅有大脑,而且还有手和脚。
这让我想起最近同样很火爆的斯坦福和谷歌的一项研究,他们制作了一个沙盒环境,其中有25个角色,每个角色都有不同的性格和身份,他们会随着时间的推移自主进行交流和举办派对。更加精妙的是,作为沙盒的旁观者,我们可以对沙盒环境进行交互,沙盒中的人工智能会做出相应的反应。
例如,我们点燃厨房里的灶台,房子里的AI就会停下手头的工作,去救火。
再例如,研究者将沙盒的时间设置为2月13日,即情人节前一天,25个代理会自己拉帮结派、筹划派对。
我们可以看看斯坦福和谷歌的研究人员对沙盒中AI的建模,Preceive、Plan、Reflect、Act等模块是不是很熟悉?
类似的研究还有浙江大学和微软联合发出的论文,文中提出了一种HuggingGPT的概念,让LLM进行任务规划、选择最适合处理任务的AI模型、执行任务、最后整合并将结果生成。
GPT3.5和GPT4是如何做到这些的?
研究者称,随着语言模型参数量的增长,它们“涌现”出了一系列原本在小型语言模型中不存在的能力,比如逻辑思考的能力;加强了基于用户提供的情境进行上下文学习的能力,被称为“In-Context Learning”。
这些也正是在ChatGPT推出后,迅速席卷网络的一些重要原因。GPT可以出乎意料地理解我们想让其执行的任务,我们有时候就会发现,即使我们不去网络上寻找各种提示词的“宝典”,只是随意地对其进行对话和指定任务,它就能理解我们的意图并执行对应的行动。
在以前的语言模型应用范式中,我们可能要针对不同的下游任务对模型进行微调,甚至使用不同的模型。比如写代码有写代码的语言模型、聊天机器人有聊天机器人的语言模型、做数学题可能又要用另一套语言模型。每当我们遇到一个全新的下游任务,如果发现模型执行的结果并不好,就得花费大量的时间、金钱去微调模型。
而如今,有了以GPT3.5和GPT-4为首的超大语言模型,我们可以用它们解决大量的下游任务,只需为其提供一个情境、控制其对输出和输出的处理即可。
说白了,普通人理论上也可以通过一些提示词,使用语言模型完成自己想让它执行的任务。如果觉得效果不好,那就再增加一些提示词,大型语言模型支持用户输出很长的提示词,尽可能具体地描述一些任务。
在各种平台上,我们都可以看到相关的视频和文章。
通过观察现象来认识本质。作为一个普通人和与自然语言处理无关的外行(本文作者本身就是这样的),我们可以忽略繁琐的微调模型技术,利用所谓的“In-Context Learning”、“Chain of Thought”、“Prompt Tuning”技术,让大型语言模型为我们所用(这个美好愿景几乎已经实现)。这些技术和微调范式都是基于不调整模型本身的,因此只要我们了解它们背后的提示词如何编写,就能达到相应的效果。
总之,随着人工智能的发展,成为一个合格的提示词工程师(Prompt Engineer)已经成为一个必备的技能。
AutoGPT的提示词
正如上文所述,各种技术和范式都可以追溯到提示词。对于如今大型语言模型的应用方面,提示词的编写是重中之重。本文将从AutoGPT的源代码入手,找到突破口,使读者能够理解其中的原理并在本地部署。有能力的读者可以尝试复现。
首先,在Prompt.py中找到以下代码:
其中最引人注目的代码就是这段了
从Prompt文件中可以看到,尝试使用名为"prompt_generator"的工具,将一系列命令传递给它。这些命令似乎是AutoGPT执行部分的函数和参数。我们可以看到谷歌搜索、列出Agent、读写文件、执行Python代码、生成图片等各种命令。这些就是AutoGPT的“手”和“脚”,它们的能力可以通过这一部分进行扩展。
接下来我们来看看PromptGenerator是如何编写的:
看以下代码:
在这里,AutoGPT规定了从GPT-4模型返回的语言的格式。这也就是为什么在一开始的图片中,Prompt能够如此清晰地思考、指定计划、执行行动并作为反馈进入下一个循环。
到了这里,应该大部分读者已经猜到了:AutoGPT理解了当前所能使用的工具和采取的手段(上网、执行Python等),当我们给它提供一个目标时,已经制定好了让它以特定的格式返回。GPT-4需要根据这个格式返回它的思考、理由、计划、反思,并给出要执行的指令,并填上对应的参数,从而在控制台中运行该指令并填写对应的参数。
AutoGPT的一些技术细节
在上一小节中,我们已经介绍了AutoGPT的核心部分如何编写,感兴趣的人甚至可以自己扩展一些命令进行二次开发。
在这一章节中,笔者尝试列出实现AutoGPT时使用的其他一些技术。以下是一些作者了解的技术的介绍。
在与GPT-4进行通信时,都发送了哪些内容?
在main.py中,可以看到如下内容:
在chat_with_ai函数中,我们发送给AI的内容包括提示词、用户输入、完整的信息历史和记忆等。其中,提示词规定了返回格式和可执行的命令。用户输入和信息历史是常规的将它们发送给大型模型。在这里,我们主要讨论如何使用memory。
memory
由于 GPT-3.5 和 GPT-4 对文字的处理并不是无限的,我们不能发送无限长的信息。在网页端进行聊天还是小事。在AutoGPT中,AI执行了很多行动,这些行动产生的 "后果" 都需要记录。例如使用谷歌搜索返回的信息、运行 Python 代码返回的信息以及一些报错等。这些内容全部一股脑发回给GPT模型几乎是不可能的,因此我们采取的方法是将其存储在 "记忆" 中。使用了矢量数据库的技术,将信息以数字的形式存储下来。
当 GPT 准备执行下一轮命令时,它需要从“记忆库”中检索与当前计划和要执行的操作相关的部分,并将其发送。
从 memory 文件夹中可以看出,除了支持本地存储记忆之外,AutoGPT 还应该支持一些云端矢量数据库,这样可以更节省本机内存,但这些数据库并不便宜。
在知乎的一篇文章中,很好地总结了GPT如何使用工具以及如何进行记忆的”召回“:
一些问题
- 在网页读取过程中,遇到反爬程序侦测
- 人类反馈的作用并不大
- 如果用GPT-4来跑,想要执行一个简单的任务就要花费15-30美元,消耗token量非常大
总结
总结下来,AutoGPT主要做了以下几件事:
- 构建了一套GPT自主思考、指定计划、执行行动的循环模型
- 以GPT-3.5/GPT-4为”大脑“,通过Prompt使”GPT“能使用工具作为”手脚“
- 将海量行动产生的数据作为记忆库,在必要时”召回“并用于解决下一轮的问题
可以参考以下图片,帮助理解AutoGPT的原理:
2023.4.29更新
截至今日,AutoGPT已经发布了0.2.2版本,添加了插件功能,这与笔者之前的预期相同。AutoGPT提供了一种创新的思路,未来还会有更多的功能被添加进去,成为其行动的工具。
当然,更新此文的另一个主要目的是告别。原因主要是AutoGPT当前确实无法成为真正的生产力工具,而更像一个精致有趣的玩具。笔者需要把更多精力放在学习更加切实可用的工程上。况且最大的LLM开源库LangChain中已经有对应的实现,AutoGPT项目本身的学习价值也在慢慢贬值。
大型语言模型仍在等待一个SD时刻,如果每个人都能够在自己的计算机上部署,以非常低廉的价格用于二次开发,那么就会变得非常方便。此外,开放易操作权重和微调对于执行一些特殊的下游任务也非常重要。
Written by Aryue,editted by Notion AI.