Voyager 智能体由哪些核心组件构成,如何运作?

更新时间

Voyager 是 NVIDIA、Caltech 等机构提出的、由大语言模型驱动的 Minecraft 具身终身学习智能体。它的核心设计可以概括为三个组件加一条调用路径:自动课程负责决定“接下来探索什么”,技能库负责把学到的行为以可执行代码的形式存下来并随时取用,迭代提示机制负责让写出的程序在环境反馈中不断修正;三者都通过黑盒查询调用 GPT-4 来驱动,不需要对模型参数做微调。理解这套结构,就能理解它为什么能在无人干预下持续探索、积累技能并迁移到新世界。

三个核心组件各自解决什么问题

自动课程:把“开放世界”拆成可执行的目标

开放世界最大的难题是目标空间无限大,智能体容易原地打转。Voyager 的自动课程根据智能体当前的状态和已掌握的技能,自动生成下一个探索目标,且目标难度随能力增长而提升,从而最大化探索。

这里的关键机制是课程与技能库联动:课程提出的任务应当落在“稍微够得着”的区间——太难会导致程序反复失败,太简单则没有新技能产出。课程不是一次性写死的任务列表,而是随智能体进度动态调整的。

技能库:用可执行代码存储复杂行为

Voyager 不把技能存成模型权重或隐向量,而是存成可执行的代码程序。每个技能是一段能在 Minecraft 环境中运行的程序,配有描述,便于之后按语义检索复用。

这种设计带来三个直接好处:

  • 可解释:技能就是代码,人能读懂它在做什么。
  • 可组合:新任务可以调用已有技能作为子程序,能力快速叠加。
  • 抗遗忘:技能以代码形式持久保存,不会像参数更新那样出现灾难性遗忘。

当智能体面对新任务时,先从技能库检索相关程序,再在其基础上编写新程序,而不是从零开始。

迭代提示机制:让程序在反馈中自我改进

LLM 一次生成的程序往往跑不通。Voyager 的做法是把三类信号回灌给模型,让它改写程序:

  1. 环境反馈:执行后世界状态发生了什么变化;
  2. 执行错误:代码报错信息;
  3. 自我验证:由模型判断任务是否真的完成。

这三类信号构成一个“生成—执行—诊断—重写”的循环,直到程序通过验证或被判定失败。这是 Voyager 能把粗糙的初始代码打磨成可用技能的关键。

一次任务是怎么跑起来的

把三个组件串起来,单轮任务的流程大致是:

  1. 自动课程依据当前状态与技能库,提出下一个目标;
  2. 智能体从技能库检索可能相关的已有技能;
  3. 通过黑盒查询调用 GPT-4,生成完成该目标的代码;
  4. 在环境中执行代码,收集环境反馈、报错与自我验证结果;
  5. 若未完成,带着上述信号迭代改写程序;
  6. 成功后,把新程序连同描述写入技能库,供后续检索复用。

例如需要完成“制作一把石镐”这类任务时,智能体不必从“砍树”重新学起,而是检索技能库中已有的采集、合成类程序,组合出新的程序;若首次执行因缺少某个前置材料而失败,报错与状态反馈会进入下一轮提示,促使它补上缺失步骤。

为什么用黑盒查询而不是微调

Voyager 与 GPT-4 的交互方式是黑盒查询,即只发送提示、读取输出,不更新模型参数。这一选择的意义在于:

  • 省去为具身任务收集训练数据和微调模型的成本;
  • 智能体的“学习”发生在外部——课程、技能库和提示内容随经验增长,而底层模型保持不变;
  • 能力提升来自上下文中的技能复用与程序改进,属于上下文内的终身学习。

代价是每次决策都依赖对 GPT-4 的调用,运行开销与延迟由外部模型决定;资料未给出具体调用成本或访问限制,实际使用需以官方代码仓库与论文说明为准。

效果与适用边界

论文报告的结果显示,Voyager 相比此前的最优方法(SOTA)获得 3.3 倍 的独特物品、行进距离达 2.3 倍,解锁关键技术树里程碑的速度最高快 15.3 倍;并且能把学到的技能库用于一个全新的 Minecraft 世界,从零解决新任务,而其他方法在泛化上表现吃力。

需要区分的是:这些数字是论文在 Minecraft 基准上的实验结果,说明的是该方法在开放世界探索与技能迁移上的相对优势,不等于它在任意具身任务上都成立。判断是否适合借鉴时,可以看两个条件——任务是否具有可执行代码这一中间表示,以及环境是否能提供可回灌的反馈与报错;两者都满足时,这套“课程 + 技能库 + 迭代提示”的结构最容易落地。

想进一步核对组件细节与实验设置,可查阅该页面链接的 arXiv 论文与代码仓库。