[论文解读]Voyager: LLM Agent在我的世界游戏中的开放性探索能力实现

您所在的位置:网站首页 voyager组合 [论文解读]Voyager: LLM Agent在我的世界游戏中的开放性探索能力实现

[论文解读]Voyager: LLM Agent在我的世界游戏中的开放性探索能力实现

2024-07-05 23:24| 来源: 网络整理| 查看: 265

VOYAGER是 Minecraft 中第一个 LLM 驱动的具身终身学习能力的智能体。它可以在没有人工干预的情况下不断探索世界、掌握各种技能并完成新的发现。

论文简介

最近LLM Agent进展迅猛,研究者们通过一系列的架构搭建,让LLM Agent实现了很多高度复杂的工作,例如建网站,打游戏等等.一些相关的工作包括:

ReAct: 通过让 LLMs 同时生成推理过程和行动规划,来使用思维链 prompting。作者向它提供作者的实验反馈和智能体状态作为 observations。

Reflexion: 建立在 ReAct 之上,使用自我反思来推理更符合直觉的未来行动。作者为它提供了程序运行错误和自我验证模块。

AutoGPT: 是一个流行的软件工具,它通过将高级的目标拆分成多个子目标并通过 ReAct 的循环方式来执行,从而自动执行 NLP 任务。作者通过使用 GPT-4 来做任务拆解来调整 AutoGPT,并且为它提供了智能体状态、环境反馈和运行错误作为子目标执行的 observations。相比 VOYAGER,AutoGPT 缺少技能库来积累知识,没有自我验证来确认任务完成度,也没有自动课程来支持开放世界探索。

相比上述的 SOTA方案,Voyager能获得的物品数多了 3.3 倍,探索的距离多了 2.3 倍,解锁关键技能树的速度快了 15.3 倍。

整体实现

一个简单的代码流程逻辑如下:

具体模块

voyager主要由3个核心模块构成:

一种最大化探索的自动课程.

本质上,这是一个以Novelty Search为主要目标,并逐步提升任务难度的学习过程. 传统的方案中(例如AutoGPT), 不会对环境和技能的信息进行限制, 导致Agent的决策空间过于开放,反而在很多场景下不利于找出合适的解决方案. 在Voyager中, 作者通过限制一些信息量,并根据环境信息(包括地形,地貌,身上的物品栏,周五有没有怪物,时间等等)来限制Agent的决策空间, 从而让Agent能更好的基于它当前的技能水平和环境情况开展合适的工作,比如当它发现身处沙漠而非深林时,它应该知道比起冶铁,应该先学习采集沙砾和仙人掌.

通过评估Agent当前的探索进展(主要是discover item nums/completed task num.),设计一套从简单到复杂的课程,让Agent能够逐渐解决一些更为困难的Task.

这里的Novelty Search 主要是一个In context Learning的版本,通过探索不断获取更多的信息,然后基于更多的信息来自我提问和自我回答,并在prompt中强调提问和回答应该以创新性为目标.以此来实现更多的创新性探索.

输入 GPT-4 的 prompt 包含几个部分:

鼓励多样化行为和施加限制,比如

我的最终目标是探索尽可能多的东西。由于我还没有掌握必要的资源或者学习到足够的技能,因此下一个任务不应该太难以至于我无法完成。

智能体当前的状态,包括物品清单、装备、附近的砖石和实体、生态环境、时间、血量和饥饿值,以及地点

之前完成的和失败的任务,反应智能体当前的探索进度和能力边界

其它上下文:作者还利用 GPT-3.5 根据智能体的当前状态和探索进度进行自我提问,并使用 wiki 知识库自己回答问题,为 GPT-4 提供额外的上下文。

生成Task的promptWarm-up schedule

信息不是一上来全都给的.对于简单的任务,给太多信息反而不利于学习.因此Voyager的作者设计了一套Warm-up schedule, 来帮助Agent更好的学习

QA部分step-1: 提出问题

可以注意到:

prompt里面specificly说明了"Do not ask questions about building tasks (such as building a shelter) since they are too hard for me to do.",不要提出任何build相关的task(因为这个太难了)

为了提升concept的准确度,括号里给出了一些COT的说明,例如"the above concept should not be "food" because I need to look up the page of "sparse jungle" to find out what food I can obtain in the sparse jungle"

为了避免agent反复想出一个很困难的task然后又实现不了(一直拿头撞墙),prompt里会记录Completed tasks so far和 Failed tasks that are too hard. 以此提升提出的task能被执行的概率.

step-2: 回答问题

根据外部知识库来回答问题

(其实没有外部知识库,效果也差不多,原因是GPT3.5已经在MC数据上train过,已经有比较好的知识了)

任务拆解

基于上述的问题和回答,决定最终要做什么.然后拆解成能被python理解的json格式

对拆解后的任务有格式要求, 例如"Mine [quantity] [block]", "Craft [quantity] [item]"

生成的结果要能直接被Json解析.

迭代式 prompting 机制.

Agent很难一次性输出正确的代码,所以需要有反复迭代的机制来解决这个问题.(最难的任务可能要迭代上百次)

整体循环

用伪代码表达如下:

环境反馈&执行报错

展示程序执行的中间过程。比如,「我无法制作一副铁甲,因为我需要:7 个铁块」强调了无法制作铁甲的原因。作者使用控制原始 APIs 中的 bot.chat() 来生成环境反馈(这个是游戏自带的系统通知), 并通过 prompt 让 GPT-4 在生成代码期间也使用这个函数.

生成Code的prompt(for GPT4)

明确申明需要确保plan中不应该有任何缺失的步骤.

Debug: 分析为什么code没有完成task.(bot.chat很关键,这是一种debug信息)

反复强调Inventory的重要性, 并要求在plan前先检查Inventory, 因为Self_verification也是基于Inventory做的.

写了很多其他hand-crafted规则,例如:

Use `exploreUntil(bot, direction, maxDistance, callback)` when you cannot find something. You should frequently call this before mining blocks or killing mobs. You should select a direction at random every time instead of constantly using (1, 0, 1).

Do not use `bot.on` or `bot.once` to register event listeners. You definitely do not need them.

Self-Verfication Module

作者没有人工为自动课程提出的每个新任务都编写验证方法, 他们使用另一个 GPT-4  Agent来自我验证。通过向 GPT-4 提供 VOYAGER 当前的状态和任务,让它扮演 critic 的角色并告诉程序是否完成了任务。此外,如果任务失败了,它会提供一个关于如何成功完成任务的建议

在每一轮代码生成阶段,会执行生成的代码来获得环境反馈和运行错误,并且将这些信息合并到 GPT-4 的 prompt 中进行下一轮的代码完善。这个迭代式过程会一致重复,直到自我验证确认任务成功完成了。此时,Agent会将这个新技能加入技能库,然后让自动课程给出下一个新的目标。如果智能体在 4 轮代码生成后仍然没成功,那么Agent会让课程换一个任务。这种迭代式的 prompting 方法能显著改善用于实体控制的程序综合(program synthesis),使 VOYAGER 在没有人工介入的情况下不断掌握各种技能。

Prompt:

Skill Library一个不断增长的可执行代码的技能库

技能库用于存储和检索复杂行为. 受到程序通用性、可解释性和普适性的启发,作者也将每一项技能表示为可执行的代码。

输入信息

输入到 GPT-4 的 prompt 包含下面的部分:

代码生成指南,比如

你的函数会被复用以创建更复杂的函数。因此,你应该尽可能使它通用且可复用。

控制原始 API 和从技能库中检索相关的技能,对于 in-context learning 的运作至关重要

上一轮生成的代码、环境反馈、执行的错误信息可以让 GPT-4 自我优化

智能体当前的状态,包括物品清单、装备、附近的砖石和实体、生态环境、时间、血量和饥饿值,以及地点

在生成代码前利用思维链(COT) prompting 进行推理

建立Embedding索引

通过Iterative Prompting Mechanism优化程序,将它作为新技能并入技能库中,然后基于程序的描述信息的 emebdding 建立索引。

Key: 程序描述的embedding向量(由GPT3.5生成)

Value: 程序本身(GPT4生成)

Query: Agent生成的Task+环境反馈.

新Task Query后,程序会在向量数据库中找出5个最相关的skill, 用于新的task的实现.

生成Description的Prompt(for GPT3.5)实验实验设定

作者使用 OpenAI 的 gpt-4-0314 和 gpt-3.5-turbo-0301 的 APIs 来进行文本续写,并使用 text-embedding-ada-002 API 来获得文本 embedding。自动课程的 temperature 被设为 0.1,以鼓励任务的多样性,其它所有的 temperatures 都设为 0。作者的模拟环境建立在 MineDojo 之上,同时使用 Mineflayer JavaScript APIs 来进行运动控制。

实验结果

科技树掌握能力: 分号表示 3 次完整的运行中成功的次数。0/3 表示方法没能在最大 prompting 迭代次数(160)内达到对应的水平。表中的数字表示 3 次实验的平均 prompting 的迭代次数。迭代次数越小,方法就越高效。

地图覆盖情况:Minecraft 地图的鸟瞰图。VOYAGER 在穿越不同地形时,能够比其它基线多向前探索 2.3 倍的距离。

明显更好的探索能力

VOYAGER 的优越性在其不断大踏步前进的表现中显而易见。它在 160 次 prompting 的迭代内发现了 63 种不同的物品,相比其它方法多获得了 3.3 倍的新物品。另一方面,鉴于开放世界探索目标天然比较抽象,AutoGPT 在发现新东西上比较落后,而 ReACT 和 Reflexion 基本没有什么进展。

始终如一的科技树掌握能力

Minecraft 科技树测试智能体制作和使用层次工具的能力。逐步遍历这棵树(木制工具 -> 石器工具 -> 铁制工具 -> 钻石工具)要求智能体掌握系统性和综合性的技能。相比其它基线,VOYAGER 解锁木器时代的速度快了 15.3 倍(就 prompting 的迭代次数而言),解锁石器时代的速度快了 8.5 倍,解锁铁器时代的速度快了 6.4 倍。此外,VOYAGER 是唯一一个在科技树中达到钻石时代的

这突出了自动课程的有效性,它始终抛出了难度适中的挑战来推动智能体的进步。

巨大的地图探索能力

VOYAGER 能够穿越各种地形,比基线方法多前进 2.3 倍的距离,而基线中的智能体通常停留在局部一个地区,这非常影响它们探索新知识的能力

高效的零样本迁移到未知任务的能力

为了评估零样本的泛化能力,作者清空了智能体的物品清单,将它重新放到一个新实例化的世界中,并且用之前没见过的任务测试它。对于 VOYAGER 和 AutoGPT,作者都用 GPT-4 来将任务拆解成一系列子目标。VOYAGER 始终能够解决所有任务,而基线方法无法在 50 次 prompting 迭代内完成任何任务。终身学习不仅增强了 VOYAGER 的能力,还为 AutoGPT 带来了提升。这说明技能库能够作为一个多样的工具箱直接应用于其它方法,这种增强能力的即插即用方法非常有效。

零样本迁移到未知任务。作者可视化了每种方法在两个任务上的中间过程。作者没有画出 ReAct 和 Reflexion 因为它们没有取得任何实质进展。消融实验

作者对 VOYAGER 中的 6 种设计选择进行了消融(自动课程,技能库,环境反馈,运行报错, 自我验证,  GPT-4)并且研究了它们对探索能力的影响。结果如下所示。

消融实验结果.可以看到Voyager的每一个模块都是必不可少的

左半部分是关于自动课程、技能库和 GPT-4 的消融研究。GPT-3.5 表示在生成代码时用 GPT3.5 来替代 GPT-4。VOYAGER 比所有方法都好,说明每个组成部分都非常重要, 缺一不可。

右半部分是关于迭代式 prompting 机制的消融。VOYAGER 超越了其它所有方法,突出了每种反馈类型在这个机制中的必要性。作者在下面强调一下关键发现:

自动课程对智能体的持续进步至关重要。如果随机选择一个课程,那么发现的物品数量会下降 93%。这是因为如果不按照(合理的)顺序,那么某些任务可能对智能体来说太过于困难了。另一方面,手工设计的课程要求大量关于 Minecraft 的专业知识,而且也无法考虑智能体的实际处境。这种方法在作者的实验中反而不如自动课程。

没有技能库的 VOYAGER 在后期往往遇到瓶颈。这反映出技能库在 VOYAGER 中的重要性。它有助于创造更多复杂的动作并,且通过鼓励在旧技能的基础上建立新技能直接推动智能体的能力边界。

自我验证是在所有反馈类型中最为重要的。移除这个模块会在发现物品数量方面导致巨大的性能衰减(-73%)。自我验证是一种重要机制,它负责决定什么时候开始新任务或者重新尝试之前失败的任务。

GPT-4 在生成代码上显著优于 GPT-3.5 , 并且让智能体多取得 5.7 倍的不同物品,这是因为 GPT-4 在编码能力上有巨大的跃升。

多模态人类反馈

目前纯靠AI还没有办法做建造相关的任务,但是given人类反馈,Voyager也能做到这样的能力.

AI可以在人类反馈中制作出地狱传送门或者搭建房子

VOYAGER 目前不支持视觉感知,因为截止本文写作时只有纯文本的 GPT-4 可用。然而,VOYAGER 有望通过多模态感知模型增强以完成更令人印象深刻的任务。作者证明了在给定人类反馈的情况下,VOYAGER 能够在 Minecraft 中搭建复杂的 3D 结构,比如下界传送门(Nether Portal)和小屋。有两种结合人类反馈的方法:

Human as critic(相当于 VOYAGER 的自我验证模块):人类为 VOYAGER 提供视觉的 critique,让它调整上一轮生成的代码。这种反馈对于纠正 VOYAGER 无法直接感知的 3D 结构中的某些细节错误至关重要。

Human as Curriculum(相当于 VOYAGER 的自动课程模块):人类将一个复杂的建造任务拆解为更小的步骤,引导 VOYAGER 逐步完成它们。这个方法改善了 VOYAGER 处理更复杂的 3D 结构的能力。

局限性成本

GPT-4 的 API 耗费巨大,比 GPT-3.5 贵 15 倍。但是,VOYAGER 的确从 GPT-4 中获得了生成代码质量的巨大飞升,这一点不是 GPT-3.5 和开源 LLMs 能够提供的。

准确性

尽管有迭代 prompting 机制,但仍然存在智能体卡壳无法生成正确技能的情况。自动课程会有一些帮助,允许当前生成失败时,在之后再重试这个任务的情况。自我验证模块有时也可能会失败,比如没有将蜘蛛网识别为成功打败蜘蛛的信号。

幻觉

自动课程偶尔提出了不可能的任务。比如。它可能让智能体制作一把「铜剑」或一副「铜甲」,而这是游戏中不存在的东西。幻觉还发生在代码生成的过程中。比如,GPT-4 倾向于使用鹅卵石作为燃料输入,尽管它在游戏中实际上是一个无效的能量来源。此外,它还会调用控制原始 APIs 中没有提供的函数,导致代码执行错误。

数据预训练

另外一个很重要的点是,GPT4在Train的时候应该就用了大量的Minecraft数据.理论上如果没有train过这样的数据,比如换一个开源模型,Voyager效果可能会大打折扣.所以如果在其他模型上跑,SFT+RLHF可能是一个比较重要的事情

能力存在上限

例如建造能力目前还不具备, 或者打boss(如末影龙)的能力也不具备.这些需要更多的visual 信息和一个更加强大的reactive policy. 这一点可能更加适合用强化学习来实现.

总结

本工作介绍了 VOYAGER,第一个 LLM 驱动的具身终身学习智能体。它利用 GPT-4 来持续探索世界,学习不断复杂的技能并且在没有人工干预的情况下持续发现新事物。VOYAGER 在探索新物品、解锁 Minecraft 世界树、穿越各种地形以及将学到的技能应用到新实例化的世界中的未知任务中表现出优越的性能。VOYAGER 可作为不用调整模型参数就能开发强大的全能智能体的起点。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3