最近,开源 AI 项目 AutoGPT 在开发者圈中掀起了不小的热潮,“无需人类插手,自主完成任务
”的特点吸引来了很多人的关注,为此本文作者将就 AutoGPT 的工作原理进行深入解析。原文链
接:https://sudoapps.substack.com/p/technical-dive-into-autogpt未经授权,禁止转载!
作者 | SAMIR KHOJA
译者 | 弯月 责编 | 郑丽媛
出品 | CSDN(ID:CSDNnews)
你是否曾听说过开源项目 Auto-GPT?该项目使用各种技巧打造的 GPT 可以围绕某个特定的目标自主完成任务,还为 GPT 提供了一个可执行命令列表,帮助它朝着总体目标持续迈进。
我尝试使用 Auto-GPT 获得了一些有趣的结果,我还深入查看了项目的整体架构,GitHub 上 10 万 的 Star 数表明了其巨大的发展潜力。
为了更好地理解 Auto-GPT 的概念及其工作原理,我们将深入探讨以下核心领域:
▶ 该项目使用了哪些模型?
▶ 如何让 GPT 具备记忆力?
▶ 如何提高 GPT 的响应可靠性?
▶ 如何解析 GPT 的响应?
▶ 如何指定 GPT 可以执行的命令?
如何让 GPT 具备记忆力?GPT 模型的设计并没有考虑记忆力,然而 Auto-GPT 使用外部记忆模块消除了这个限制。在深入了解如何让 GPT 具备记忆力之前,我们先来介绍几个概念:
▶ 嵌入
▶ 向量存储与搜索
▶ OpenAI 的聊天补全 API
嵌入是文本的向量表示,可以更轻松地用于各种机器学习的模型或算法。Auto-GPT 使用了 OpenAI 的嵌入 API 根据 GPT 文本输出创建嵌入。
我们可以使用的向量存储服务有很多。Auto-GPT 使用的是:本地存储、Pinecone(第三方服务)、Redis 和 Milvus(开源服务)。Pinecone 和 Milvus 优化了向量搜索算法,可以根据相关上下文搜索文本嵌入。
Auto-GPT 将嵌入存储到这些向量存储服务之一,然后通过搜索当前任务会话的相关向量将上下文注入到 GPT。下面是这段代码的核心部分:
图片源自:https://github.com/Significant-Gravitas/Auto-GPT/blob/master/autogpt/prompts/prompt.py
我们看到在这些提示的引导下,GPT 的自主性和自力更生能力都得到了提高,还能看到很多通过持续反馈循环来帮助 GPT 自我改进输出的案例。我不确定下面的自我绩效评估提示是否能达到同样的效果,但至少这段代码奠定了基础:
解读响应这可能是理解 Auto-GPT 内部工作原理最重要的方面。如果不能有效地解释响应,就不应该让 GPT 执行命令(即允许它访问外部世界)。Auto-GPT 使用了一种非常简单但很强大的提示技术来确保 GPT 以固定的 JSON 格式响应,然后通过代码进行解析:
图片源自:https://github.com/Significant-Gravitas/Auto-GPT/blob/master/autogpt/prompts/generator.py
在测试中,我使用了固定格式的响应,从结果看来 GPT-3.5-turbo 非常高效,尽管偶尔也有一些幻觉(相比之下 GPT-4 更可靠)。我们通过这种方法指示 GPT 执行命令,还需要检查结果。在 GPT 执行命令时,响应的信息包含在 command 对象中。
与现实世界互动自主代理要想真正发挥作用就必须能够完成实际的工作,并与现实世界交互,比如文件系统或互联网等。Auto-GPT 必须编写能授权 GPT 执行的每个命令,在生成约束和自我评估的初始提示时,还可以提供可执行命令及其参数的列表。下面是将命令添加到提示符的类函数:
图片来源:https://github.com/Significant-Gravitas/Auto-GPT/blob/master/autogpt/prompts/generator.py
基本的提示生成器中有一个预定义的命令列表:
图片来源:https://github.com/Significant-Gravitas/Auto-GPT/blob/stable/autogpt/prompt.py
这是 GPT 引用命令的格式,可以使用参数执行命令。以下代码可以将最终提示格式化为 GPT 的字符串:
图片来源:https://github.com/Significant-Gravitas/Auto-GPT/blob/master/autogpt/prompts/generator.py
如你所见,这段代码集合了上述所有功能。这个提示可以为 GPT 提供约束条件、自我评估的方向、资源、命令以及响应格式。接下来,在解析 GPT 返回的响应时,我们就很清楚它所执行的命令和参数了。最后一步是执行命令:
图片来源:https://github.com/Significant-Gravitas/Auto-GPT/blob/stable/autogpt/app.py
在这段代码中,在解析 GPT 的响应后,每个命令都获得了自己的参数,然后执行。GPT 的命令之一是 task_completed,如果在连续模式下运行,程序将在 GPT 实现目标后关闭或退出:
图片来源:https://github.com/Significant-Gravitas/Auto-GPT/blob/master/autogpt/app.py
BabyAGIBabyAGI 也使用了类似的概念,但大大简化了实现(整体功能较少)。它支持 LLaMA 和 OpenAI 作为模型输入,在提供目标和初始任务后,创建三个代理来执行目标:任务执行代理、任务创建代理和任务优先级代理。每个代理都有自己的提示和约束,包括来自每个相关任务执行的上下文。这个过程将循环执行,直到没有剩余的任务并且目标完成。
Auto-GPT 和 BabyAGI 都获得了大量关注,并且正在不断改进。
总结毋庸置疑,很多人为这些项目做出了努力,并在不断改进它们。这些项目是 AI 领域向前迈出的激动人心的一步,我们距离 AI 自主完成任务并在生活方方面面协助我们的未来更近了一步。我要强调的不仅仅是一些核心概念,这些概念可以帮助我们了解其内部运作方式,并为自主代理的新世界做出贡献。
相关文章
猜你喜欢