VOYAGER: An Open-Ended Embodied Agent with Large Language Models

一句话总结 VOYAGER
First LLM-powered embodied lifelong learning agent to drive exploration, master a wide range of skills, and make new discoveries continually without human intervention in Minecraft.
概念介绍:embodied AI
具身人工智能(Embodied AI)是指具有身体的人工智能,能够与真实世界进行感知和交互,并从中学习和进化的智能体。具身人工智能是人工智能和机器人的交叉领域,也是通向通用人工智能(Artificial General Intelligence)的一条研究道路。具身人工智能的典型应用包括玩 Minecraft、机器人导航和操控等。具身人工智能与传统的基于监督学习的人工智能有很大的不同,它更强调智能体与环境的动态互动,而不是被动地接收数据输入。具身人工智能是一个前沿而有挑战性的领域,有很多未解决的问题和潜在的机遇。
概念介绍:什么是一个有效的 lifelong learning?
可以根据周围的环境和目前可以使用的技能,提出适合当前情况的小目标
propose suitable tasks based on its current skill level and world state,
e.g., learn to harvest sand and cactus before iron if it finds itself in a desert rather than a forest;
根据环境反馈精进技能,并将技能存放到记忆中
refine skills based on environmental feedback and commit mastered skills to memory for future reuse in similar situations
e.g. fighting zombies is similar to fighting spiders;
可以自主在环境中持续探索,不断给自己找新task做
continually explore the world and seek out new tasks in a self-driven manner.
VOYAGER 结构

生成阶段目标 (左图):自动化课程,目标是最大化探索
An automatic curriculum that maximizes exploration
Minecraft 的目标是解锁技能树:砍木头 —> 做桌子 —> 打僵尸 —> 采集钻石
课程的最高目标是:“discovering as many diverse things as possible”
自动化课程可以看作是:基于上下文的新颖性搜索(novelty search)
维护实现不同skills的代码库 (右图):不断增长的技能库,用于存储和检索代码
An ever-growing skill library of executable code for storing and retrieving complex behaviors
技能库是:完成一些动作的program。用了gpt3.5为每个程序生成一段description,这些程序的搜索index这些description的embedding。
下次遇到类似的情况,可以根据description的embedding,调用技能库里的函数;并且如果遇到复杂情况,也可以将复杂情况分解成一系列的简单函数,这样可以避免灾难遗忘的问题。
生成可执行的代码 (中图):迭代提示机制用来生成可执行的代码
从Minecraft中获取观测量:库存列表、附近的东西、代码解释器的报错,等
把这些反馈信息写进GPT-4的prompt里,进行一轮代码改进
重复这个过程,直到self-verification模块确认任务完成,此时我们将代码提交到技能库中(例如,craftStoneShovel()和combatZombieWithSword()),并查询自动课程以获取下一个task
YOYAGE展示了强大的in-context lifelong learning。不断拓展的技能库中包含了可以完成各种动作命令的程序,这些程序都具有可复用性、可解释性和可泛化到新任务的能力
效果展示

优点总结:
Voyager通过黑盒查询与GPT-4交互,无需对模型参数进行微调
VOYAGER interacts with GPT-4 via blackbox queries, which bypasses the need for model parameter fine-tuning.
Voyager开发的技能具有时间延展性、可解释性和可组合性,这使得智能体的能力能够快速增长,并缓解了灾难性遗忘。
The skills developed by VOYAGER are temporally extended, interpretable, and compositional, which compounds the agent’s abilities rapidly and alleviates catastrophic forgetting.
时间的延展性,指的是lifelong learning。Agent可以随着时间持续稳定地获得、更新、累积和迁移
三个模块细节
Automatic Curriculum

GPT-4接受到的prompt包括:
prompt提示词:加入鼓励行为多样化,同时对接下来的指令加以约束的提示词。比如:我的最终目标是尽可能发现更多的多样化事物,但下一个任务不能太难,因为我可能没有必要的资源和技能树。
agent目前的状况:包括库存,装备,附近的东西、动物,时间,血条,饥饿程度和位置
之前的任务成功了还是失败了,用来反映agent最近的探索进度,和能力边界
用GPT-3.5结合Minecraft-wiki的知识、目前的状态和探索进度,给GPT-4提供一些额外的知识
Skill Library

GPT-4接受到的prompt包括:
prompt提示词:例如:生成的函数会在其它复杂的函数中复用,所以你要生成generic and reusable的函数
控制MineCraft的api 和相关的skill library里的技能
生成的代码(下一部分说明)
agent目前的状况,包括:库存,装备,附近的东西、动物,时间,血条,饥饿程度和位置
CoT prompting: 在生成代码前,先做reasoning
将完成的代码加入到lib:key 是gpt-3.5生成的对代码的描述,vlaue是代码
从lib中筛选出要用的技能:gpt-3.5根据task提供建议,建议作为q,去lib里搜索最相关的5个技能
Iterative Prompting Mechanism
3种feedback:
1. Environment feedback
左图:用bot.chat()获取environment feedback

2. Execution errors
右图:报错
3. Self-verification for checking task success

GPT-4 做自查:
给目前的state和task,gpt-4判断是否完成了目标
如果完成,就加入到lib里
如果没有完成,要给一个如何完成目标的建议
如果agent 生成代码生成了四次,还是不能通过self-verification,就换一个任务
评估
从四个方面评估:
探索度:figure 1,用160 prompting iterations,发现了63种东西
技能树:用更少的回合制造&升级工具

地图区域大小:Voyager探索区域很大;区域太小的话,会阻碍了学习新知识

zero-shot 将能力泛化到一个new world:
实验方法是:删除agent的库存,把他放在一个新开的世界,然后给他从未见过的task
Voyager 和 AutoGPT都是利用gpt4将任务分解为小的subgoal
AutoGPT在50回合内无法完成任务,但有意思的是:把Voyager的lib给AutoGPT用,AutoGPT的效果明显变好 ——> lib可以是一个plag-and-play的工具

消融实验
6个消融实验:
automatic curriculum (左图)
对持续学习很重要
将自动课程模块换成随机模块,发现的物品会降低 93%。因为任务很可能会太难
将自动课程模块换成人工设计,后期表现也很不好

skill libraryenvironment feedback: 智能体在后期倾向于绝望平原
execution errors (右图)
self-verification: 没有这个部分,发现的新物品会减少73%,因为这个部分用来指导是否要在尝试之前失败的task
GPT-4 for code generation:用gpt-4 生成代码可以比 GPT-3.5 可以获得5.7倍的新物体
多模态:paper写的时候gpt-4不能接受图像,但论文尝试了用human-feedback做3d场景
局限和未来工作
开销高:gpt-4比GPT-3.5贵15倍,但是不得不用gpt-4编写代码,因为好用
有的时候出错:比如没能生成正确的skill,self-verification有的时候不好使
幻觉:有的时候让agent生成不存在的东西;生成代码的时候也会出错,比如把鹅卵石当作燃料;调用一些不存在的minecraft API