介绍Auto-GPT

158 阅读22分钟

在前言中,我讲述了Auto-GPT是什么以及它的起源,但我也在思考,“为什么有人会读这本书呢?” 我的意思是,Auto-GPT就是它所是的——一种自动化的人工智能(AI),它可能帮助你完成一些任务,也可能成为一个有时很吓人的玩具,对吧? 我希望你能清楚了解你可以用它做什么,或者不能做什么。 当然,你越是富有创造力,它能做的事情就越多,但有时它的边界看起来似乎是随机的。例如,假设你刚刚建造了一个房屋建造机器人,但它莫名其妙地拒绝把前门漆成蓝色,尽管你非常想要一个蓝色的门;它总是跑题,甚至开始解释什么是门。 Auto-GPT在这些限制上可能会非常令人沮丧,因为这些限制来源于OpenAI的限制(它们在GPT模型中提供的)和编写及编辑Auto-GPT的人的限制(包括你——给它指令的用户)。最初看起来很明确的指令,可能只通过改变一个字符,就会导致完全不同的结果。 对我来说,这正是它迷人的地方——你总是可以预期它像一个活生生的存在一样,随机选择做其他事情,甚至有自己的想法。 注释 请记住,这是一个快速发展的项目,因此代码可能会在本书发布之前发生变化。也可能是你在稍晚的时候购买了这本书,而Auto-GPT已经完全不同了。本书的大部分内容聚焦于版本0.4.1,但也已经考虑到了0.5.0版本的更改。 例如,当我完成本书草稿时,“Forge”(这是我们在团队会议上提出的一个想法)已经被实现了。这是一个实验,允许其他开发者构建自己的Auto-GPT变体。 Auto-GPT项目是一个框架,包含了我们将在本书中使用的Auto-GPT,并且可以启动其他开发者创建的代理。这些代理位于添加它们的程序员的代码库中,所以我们不会在这里深入讨论它们。 在这一章中,我们将介绍Auto-GPT,包括它的历史和发展,以及LangChain。本章将帮助你理解Auto-GPT是什么,它的意义,以及它如何发展。到本章结束时,你将拥有扎实的基础,准备好在后续章节中深入探讨更高级的话题。

我们将在本章中讨论以下主要内容:

  • Auto-GPT概述
  • Auto-GPT的历史与发展
  • LangChain简介

Auto-GPT概述

Auto-GPT大致是它自己所描述的类别:“一种自动化的生成预训练变换器”(Automated Generative Pretrained Transformer)。 这意味着它自动化了GPT或ChatGPT。然而,在本书中,我们主要关注的是以Auto-GPT为名的版本。如果你从未听说过它,或者只是出于好奇拿起了这本书,那么你来对地方了! Auto-GPT最初是一个实验性的自我提示AI应用,旨在创建一个自主系统,能够创建“代理”来执行各种专门的任务,以实现更大的目标,并最小化人工输入。它基于OpenAI的GPT,由Toran Bruce Richards开发,他在GitHub上的用户名是Significant Gravitas。 那么,Auto-GPT是如何思考的呢?Auto-GPT创建提示并将其输入到大型语言模型(LLM)中,让AI模型生成原创内容并执行如浏览、编程等命令操作。它代表了自主AI发展的一个重要步骤,使其成为GitHub历史上增长最快的开源项目(截至本书写作时)。 Auto-GPT通过串联多个OpenAI的语言模型实例——GPT——并通过这种方式创建所谓的“代理”,这些代理被分配执行简化任务。它们共同协作完成复杂的目标,例如写博客,且几乎不需要人工干预。

现在,让我们来谈谈它如何走红的。

从实验到GitHub增长最快的项目之一

Auto-GPT最初被命名为Entrepreneur-GPT,并于2023年3月16日发布。该项目的初衷是赋予GPT-4自主性,看看它能否在商业世界中蓬勃发展,并测试其做出现实世界决策的能力。

一段时间内,Auto-GPT的开发大多没有引起注意,直到2023年3月底。然而,在2023年3月30日,Significant Gravitas在Twitter上发布了Auto-GPT的最新演示并附上了一个演示视频,这个视频开始获得关注。真正的兴趣激增发生在2023年4月2日,当时计算机科学家Andrej Karpathy引用了Significant Gravitas的其中一条推文,称Auto-GPT是提示工程(prompt engineering)的下一前沿。

这条推文迅速传播,Auto-GPT成为社交媒体上的讨论话题。由Auto-GPT创建的一个代理——ChaosGPT,尤其在被幽默地指派执行“摧毁人类”这一任务时,变得格外出名,这也促成了Auto-GPT的病毒式传播(decrypt.co/126122/meet…

当然,我们并不希望摧毁人类;如果你想了解Entrepreneur-GPT能够做什么,可以查看这份关于Entrepreneur-GPT的旧日志: github.com/Significant…

你对提示和配置的创造性越高,Auto-GPT的创造力就越强。这一点将在第二章中详细介绍,当我们一起运行第一个Auto-GPT实例时,你将会看到更多。

LLMs——AI的核心

虽然Auto-GPT可以与其他LLMs(大型语言模型)一起使用,但它最能发挥GPT-4的强大能力,GPT-4是OpenAI开发的最先进的语言模型。 对于没有图形卡来运行像GPT-4这种大模型的用户来说,Auto-GPT提供了巨大的优势。尽管有许多7-B和13-B参数(B表示十亿参数)的LLM模型在与ChatGPT竞争,但它们无法在每个提示中承载足够的上下文,无法发挥应有的作用,或者根本不够稳定。

截至目前,GPT-4和GPT-3.5-turbo是Auto-GPT默认使用的两种模型。根据任务的复杂性,Auto-GPT会在这两种模型之间进行选择:

  • 智能模型
  • 快速模型

什么时候Auto-GPT使用GPT-3.5-turbo,而不是总是使用GPT-4?

当Auto-GPT进行思考时,它使用的是快速模型。例如,当Auto-GPT在循环其思考过程时,它使用配置的快速模型;但当它需要总结网站内容或编写代码时,它会决定使用智能模型。

快速模型的默认设置是GPT-3.5-turbo。尽管它的精确度不如GPT-4,但它的响应时间更好,因此能够提供更流畅的响应;而GPT-4如果思考太久,可能会显得卡顿。

OpenAI还新增了一些功能来支持像Auto-GPT这样的应用程序。其中之一就是调用功能的能力。在此新功能出现之前,Auto-GPT需要向GPT解释什么是命令,以及如何在文本中正确地表达它。这导致了许多错误,因为GPT有时会决定改变预期输出的语法。这个新功能是一个巨大的进步,它简化了命令的传达和执行过程,减少了复杂性。它使GPT能够更好地理解每个任务的上下文。

那么,为什么我们不直接使用LLM呢?

因为LLM只是响应型的:

  • 它们不能执行任务;
  • 它们的知识是固定的,不能自行更新;
  • 它们不会记住任何信息;只有运行它们的框架才能做到这一点。

Auto-GPT如何利用LLM?

Auto-GPT的结构方式是,它通过终端接收用户的初始提示:

image.png

在这里,你可以定义一个主要任务,或者输入 --manual 来手动回答问题,如下所示:

image.png

主要的提示信息随后会保存为一个 ai_settings.yaml 文件,内容可能如下所示:

ai_goals:
- Conduct a thorough analysis of the current state of the book
  and identify areas for improvement.
- Develop a comprehensive plan for creating task lists that will help you structure research, a detailed outline per chapter and individual parts.
- Be sure to ask the user for feedback and improvements.
- Continuously assess the current state of the work and use the speak property to give the user positive affirmations.
ai_name: AuthorGPT
ai_role: An AI-powered author and researcher specializing in creating comprehensive, well-structured, and engaging content on Auto-GPT and its plugins, while maintaining an open line of communication with the user for feedback and guidance.
api_budget: 120.0

让我们来看一下前述文件中的一些AI组件: 首先是 ai_goals,它指定了Auto-GPT必须执行的主要任务。Auto-GPT会根据这些目标来决定要采取哪些具体步骤。每次迭代时,它会决定跟随其中一个目标。 然后是 ai_name,它也作为参考,定义了机器人的行为或个性的一部分。这意味着,如果你将其称为 AuthorGPT,它会扮演一个基于GPT的作者角色,而如果你称其为 Author,它会尝试表现得像一个人。通常很难判断它会如何表现,因为GPT大多决定了它输出的内容。 最后是 ai_role,它可以视为更详细的角色描述。然而,根据我的经验,它仅略微影响思路,目标在这里更为重要。 完成这些设置后,Auto-GPT会总结它将要做的事情,并开始进行正确的思考:

image.png

思考通常意味着它正在向LLM发送聊天完成请求。
这个过程可能比较慢——使用的token越多,所需的处理就越多。在《理解LLMs中的token》一节中,我们将详细讨论这意味着什么。
一旦Auto-GPT开始“思考”,它会启动一系列AI“对话”。在这些对话中,它会形成一个查询,将其发送到LLM,然后处理响应。这个过程会反复进行,直到它找到一个令人满意的解决方案,或者达到思考时间的上限。
整个过程产生的“思维”可以分为以下几类:

  • 推理
  • 规划
  • 批评
  • 发言
  • 命令

这些独立的思维会显示在终端上,用户被询问是否同意执行该命令——就这么简单。
当然,这里涉及的内容远不止这些,包括构建提示来生成响应。
简而言之,Auto-GPT会传递名称、角色、目标和一些背景信息。你可以在这里查看示例:Auto-GPT 思维示例

Auto-GPT的思维过程——理解一次性操作

让我们来理解一下这种一次性操作背后的思维过程:

思维过程概述:

Auto-GPT基于一次性操作进行工作。这种方法涉及将每个数据块作为单独的聊天完成操作发送到OpenAI。这个过程的结果是生成一个基于特定结构的GPT响应文本。

GPT的结构和任务定义:

提供给GPT的结构包含了当前任务和响应的格式。这种双重结构确保GPT的响应不仅相关,而且遵循预期的对话格式。

Auto-GPT中的角色分配:

这里有两个角色分配:

  • 系统角色:系统角色在提供上下文方面至关重要。它作为信息传递的载体,保持与LLM的历史对话线程。
  • 用户角色:在流程的末尾,分配一个“用户”角色。该角色在指导GPT确定下一步要执行的命令时发挥关键作用。它遵循预定义的格式,确保交互的一致性。

命令选项和决策:

GPT配备了多种命令选项,包括:

  • 向用户提问(ask_user)
  • 发送消息(send_message)
  • 浏览(browse)
  • 执行代码(execute_code)

在某些情况下,Auto-GPT可能选择不选择任何命令。这通常发生在出现困惑时,例如提供的任务不明确,或者Auto-GPT完成任务后需要用户反馈才能继续行动。

无论如何,每个响应仅仅是一次文本响应,并且是自动完成的,意味着LLM只会通过一次响应进行反馈。

在下面的示例中,我已经激活了规划插件;稍后会介绍插件的更多内容:

{
  "thoughts": {
    "text": "I need to start the planning cycle to create a plan for the book.",
    "reasoning": "Starting the planning cycle will help me outline the steps needed to achieve my goals.",
    "plan":
      "- run_planning_cycle\n- research Auto-GPT and its plugins\n- collaborate with user\n- create book structure\n- write content\n- refine content based on feedback",
    "criticism": "I should have started the planning cycle earlier to ensure a smooth start.",
    "speak": "I'm going to start the planning cycle to create a plan for the book."
  },
  "command": {
    "name": "run_planning_cycle",
    "args": {}
  }
}

每个思维属性随后会显示给用户,并且如果启用了文本转语音功能,“speak”输出将会被朗读出来:

“我将开始规划周期来创建书籍的计划。我想要运行规划周期。”

此时,用户可以通过以下几种方式响应:

  • y:接受执行。
  • n:拒绝执行并关闭Auto-GPT。
  • s:让Auto-GPT重新评估其决策。
  • y -n:告诉Auto-GPT继续执行指定的步骤数(例如,输入y -5让它继续执行5个步骤)。此处的n始终为一个数字。

如果用户确认,命令就会被执行,并且该命令的结果会作为系统内容被添加到历史记录中:

# 检查是否有命令结果,并将其追加到消息历史中
if result is not None:
    self.history.add("system", result, "action_result")

此时,你可能在想,历史记录在这个上下文中是什么意思,为什么是self

Auto-GPT使用代理,并且每个代理实例都有自己的历史记录,作为短期记忆。它包含了之前消息和结果的上下文。

历史记录在每次代理运行周期后会被修剪,以确保不会达到token限制。

为什么不直接请求LLM解决问题?

有几个原因:

  • 尽管LLM非常复杂,但它们无法在一次查询中解决复杂的多步问题。相反,它们需要一系列相互关联的问题来引导它们得出最终的解决方案。这就是Auto-GPT的优势——它可以战略性地提出这些问题并消化响应。
  • LLM无法维护其上下文。它们不会记得之前的查询或答案,这意味着它们无法基于过去的知识回答未来的问题。Auto-GPT通过保持对话的历史记录来弥补这一点,允许它理解之前查询和响应的上下文,并利用这些信息来构建新的查询。
  • 虽然LLM是强大的文本生成工具,但它们无法主动采取行动。它们响应提示,但不会主动寻求新的任务或知识。另一方面,Auto-GPT旨在更加主动。它不仅响应分配给它的任务,还主动探索多种方式来完成这些任务,真正成为一个自主代理。

在我们深入了解Auto-GPT如何利用LLM之前,了解这些模型如何处理信息的一个关键组件:tokens,是很重要的。

理解LLM中的Tokens

Tokens是LLM(如GPT-3和GPT-4)中的基本构建块。它们是知识的片段,根据给定的上下文,它们之间的距离可能不同。一个token可以代表一个单词、一个符号,甚至是单词的碎片。

语言处理中的Token化

在训练LLM时,文本数据被分解成更小的单元,或者称为tokens。例如,句子“ChatGPT is great!”将被分解成像["ChatGPT", "is", "great", "!"]这样的tokens。token的性质在不同语言和编码范式之间可能有显著差异:

  • 在英语中,一个token通常表示一个单词或部分单词。
  • 在其他语言中,一个token可能表示一个音节或字符。
  • 在编程语言中,tokens可以包括关键字、运算符或变量。

让我们看一些token化的例子:

  • 自然语言:句子“ChatGPT is great!”被token化为["ChatGPT", "is", "great", "!"]。
  • 编程语言:像Python代码行print("Hello, World!")会被token化为["print", "(", " ", "Hello", ",", " ", "World", "!", ")", "]。

平衡细节与计算资源

Token化策略旨在平衡细节与计算效率。更多的tokens提供了更大的细节,但也需要更多的计算资源来处理。这种平衡对于模型在粒度层面理解和生成文本的能力至关重要。

LLM中的Token限制

Token限制指的是像GPT-3或GPT-4这样的模型在一次交互中能够处理的最大token数量。这个限制是由于处理大量tokens所需的计算资源。

Token限制还会影响模型的“注意力”能力——即在生成输出时,它对输入中不同部分的优先级处理能力。

Token限制的影响

如果模型的token限制被超出,可能无法完全处理超出限制的输入。例如,在20个token的限制下,一段30个token的文本需要被分割成更小的部分,以便模型有效地处理它们。

在编程中,token化有助于理解代码结构和语法,这对于代码生成或解释等任务至关重要。

总而言之,token化是自然语言处理(NLP)中的一个关键组成部分,使得LLM能够以有意义和上下文准确的方式解读和生成文本。例如,当你使用模型生成Python代码时,输入["print", "("]作为token时,你会期待模型生成可以构成有效参数的tokens——例如[“Hello, World!”, ")"]。

展望

在接下来的章节中,我们将深入探讨Auto-GPT的工作原理、其能力以及如何使用它来解决复杂问题或自动化任务。我们还将介绍其插件,这些插件扩展了其功能,使得Auto-GPT能够与外部系统进行互动,举个例子,它甚至能为你订一份披萨。

简而言之,Auto-GPT就像是一个非常智能且非常坚持的助手,利用最先进的AI技术完成你为其设定的目标。无论你是AI研究员、开发者,还是单纯对AI潜力感到好奇的人,我希望本书能为你提供所需的知识和灵感,帮助你充分利用Auto-GPT。

截至写作时(2023年6月1日),Auto-GPT不仅可以通过终端提供反馈。现在有多种内置的文本转语音引擎供你选择。根据个人偏好,你可以使用默认选项——Google的文本转语音,ElevenLabs,macOS的say命令(低质量的Siri语音包),或Silero TTS。

对于插件,Auto-GPT变得更加强大。目前,已经有一个官方插件库,其中包含了许多优秀的插件,如规划插件(Planner Plugin)、Discord、Telegram、本地或其他LLM的文本生成插件等。

这种模块化使得Auto-GPT成为我所接触过的最令人兴奋的工具。

启动与推进Auto-GPT——创新与社区的故事

Auto-GPT的开发始于一个大胆的愿景——让GPT-4的复杂技术变得易于访问和使用。这个项目的启动标志着一段持续演进的旅程,随着新功能和改进的整合,项目不断发展。Auto-GPT的核心是一项协作努力,它始终受到一群开发者和研究人员的输入与反馈的塑造。

Auto-GPT的起源可以追溯到发现GPT-4具备自动化任务完成潜力的那一刻。这个突破成为了创建一个可以充分利用GPT-4能力的平台的催化剂,为用户提供广泛的控制和定制选项。

项目的初步受欢迎程度可以归功于一个早期版本——Entrepreneur-GPT,这是Auto-GPT能力展示的一个关键里程碑。这个阶段(记录在此: Entrepreneur-GPT文档)表明与后期阶段相比,提示和功能上有显著的差异。查看git历史记录,可以看到Auto-GPT早期的功能,包括在线研究和使用本地数据库进行长期记忆。

Auto-GPT的崛起迅速,吸引了大量贡献者——包括我自己——在早期参与其中。我参与这个开源项目的经历是变革性的,它将创新的激情与兴奋感完美结合。这些贡献者的奉献带来了一种自豪感,尤其是当你看到自己的工作被更广泛的受众所认可,包括流行的YouTuber。

作为一个开源项目,Auto-GPT依赖于自愿贡献,最终形成了一个团队,显著增强了其结构。这个团队在管理提交的pull request和引导开发路径方面发挥了至关重要的作用,推动了Auto-GPT核心的持续改进。

尽管Auto-GPT的受欢迎程度不断增长,但每一个新版本的发布都带来了更强的功能。这些版本是经过社区精心测试的稳定版本,确保无重大bug,已准备好供公众使用。

Auto-GPT演进的一个关键组成部分是其插件。这些插件在平台定制中发挥了重要作用,允许用户根据自己的具体需求对平台进行个性化调整。未来我们将深入探讨这些插件,探讨它们的安装、使用方式以及如何通过增强Auto-GPT的能力来提升平台的功能。这个探索非常重要,因为大多数定制化操作都是通过插件完成的,除非有显著的贡献直接通过pull request提交到核心平台。

LangChain简介

尽管LangChain本身并不是Auto-GPT的一部分,但它在Auto-GPT的开发中起着至关重要的作用,因为它专注于使用控制的过程。这与Auto-GPT强调结果而不注重控制的方式形成了对比。

LangChain是一个强大的工具,使用户能够使用LLM(大语言模型)原语构建自己的Auto-GPT实现。它允许进行明确的推理,并且使Auto-GPT具备成为一个自主代理的潜力。

随着多种Auto-GPT的替代品的出现,LangChain已经成为其中许多工具的一部分。一个例子就是AgentGPT。

LangChain在语言处理和控制方面的独特方法使其成为AgentGPT功能的核心组成部分。通过结合LangChain和Auto-GPT的优势,用户可以创建强大且定制化的解决方案,充分发挥GPT的全部潜力。

LangChain与Auto-GPT的交汇

LangChain和Auto-GPT可能关注的领域不同,但它们在增强LLM能力方面的共同目标使得它们之间自然形成了协同效应。LangChain提供的结构化、可控过程与Auto-GPT专注于自主任务完成相得益彰。两者结合提供了一个集成的解决方案,既控制了方法,又实现了目标,在过程与结果之间取得了平衡。

LangChain使Auto-GPT具备了明确推理的潜力。它为将模型从一个由人类主导任务的工具转变为一个能够做出有根据、理性决策的自我治理代理提供了途径。

此外,LangChain对语言处理的控制增强了Auto-GPT传达用户友好信息的能力,特别是在JSON格式中,使得它成为一个更加易于用户访问的平台。通过优化语言处理和控制,LangChain显著改善了Auto-GPT与用户的互动。

您可以阅读更多信息:LangChain文档

小结

在本章中,我们开始了探索Auto-GPT的激动人心的旅程。Auto-GPT是一种创新的AI应用,利用GPT-4的强大能力,能够自主解决任务并在浏览器环境中运行。我们回顾了Auto-GPT的发展历程,了解它如何从一个雄心勃勃的实验演变成一个强大的工具,正在改变我们与AI互动的方式。

我们还探讨了令牌(tokens)的概念,它在LLM(如GPT-4)如何处理信息中起着至关重要的作用。理解这一基本概念有助于我们更好地理解Auto-GPT如何与LLM互动,以生成有意义且符合上下文的响应。

此外,我们简要介绍了LangChain的作用,它通过提供结构化控制来补充Auto-GPT,控制语言处理。LangChain与Auto-GPT的交汇创造了强大的协同效应,增强了Auto-GPT的能力,并为更高级的AI应用铺平了道路。

在接下来的章节中,我们将深入探讨Auto-GPT的工作原理,探索它的插件、安装过程,以及如何构建有效的提示。我们还将深入探讨更高级的主题,如如何将自己的LLM与Auto-GPT集成、设置Docker,并安全有效地使用连续模式。

无论您是AI爱好者、开发者,还是仅仅对AI的潜力感到好奇的人,这段旅程都将是一次令人兴奋的经历。系好安全带,让我们一起继续解锁Auto-GPT的巨大潜力吧!