VOYAGER: An Open-Ended Embodied Agent with Large Language Models
Paper: arXiv:2305.16291 Code: MineDojo/Voyager Code reference:
main@55e45a88(2023-07-27)
1. Motivation (研究动机)
这篇论文针对的是 open-ended embodied agent 的一个核心缺口:现有 Minecraft / embodied AI 方法要么依赖 primitive action 上的 RL / imitation learning,要么把 LLM 当成一次性 planner,但都不具备“持续探索、累积技能、跨任务迁移”的 lifelong learning 机制。对 Minecraft 这类没有固定主线、需要逐步解锁 tech tree 的环境而言,只会输出单步动作或一次性计划的 agent 很难稳定推进到更复杂的目标。
作者想解决的不是“如何把 GPT-4 接进 Minecraft”这么宽泛的问题,而是一个更具体的问题:如何让一个 black-box LLM agent 在不做参数微调的情况下,基于环境反馈不断提出下一步任务、把成功程序保存成可复用技能,并在失败后借助执行报错与 self-verification 迭代修正代码。换句话说,VOYAGER 关注的是开放世界中的自驱式 skill acquisition,而不是传统 benchmark 上的单任务成功率。这个问题值得研究,因为 Minecraft 本身具有长时程、组合式和资源依赖的结构。
一个 agent 如果能像人类玩家一样先学会“挖木头、做工作台、做石镐”,再逐步转向 combat、smelting、ore mining 与跨地形探索,就意味着 LLM agent 有可能在其他 embodied domain 里复用同样的 pattern:自动课程负责选下一步可达目标,技能库负责压缩过去经验,程序级动作负责把 reasoning 转成可执行的 temporally extended behavior。
作者实际上是在挑战两种常见但都不够用的设定。第一种是把 embodied task 当成单回合 instruction following,只问“给你一个目标,你能不能做完”;这种设定忽略了开放世界里大量价值来自 agent 自己发现新目标。第二种是把长期能力积累寄托在模型参数更新上,但对 black-box API LLM 来说,在线微调既昂贵也不现实。VOYAGER 试图证明:即使不能改参数,也可以通过外部记忆与任务调度把“持续变强”这件事做出来。 从论文 framing 看,作者还隐含回应了 embodied agent 研究里的 evaluation gap。若只看某个静态 benchmark 的 success rate,很难区分一个 agent 是真正学会了可迁移技能,还是只在特定任务模板上碰巧奏效。因此他们把“发现多少 unique items”“是否能沿 tech tree 持续推进”“换世界后能否 zero-shot 完成未见任务”并列成核心指标,本质上是在把开放式能力增长本身当成研究对象。
2. Idea (核心思想)
核心洞察是:对 open-ended embodied exploration,LLM 不应该直接在 primitive action 上逐 token 控制环境,而应该把“程序”作为 action space,把“任务选择”与“技能积累”显式拆成三个互相耦合的模块。程序天然是 temporally extended、可解释、可组合的,因此比逐步输出低层控制更适合作为 lifelong agent 的记忆单元。VOYAGER 的关键创新可以压缩成三句话。第一,automatic curriculum 不再依赖人工写死的 task graph,而是让 GPT-4 基于当前 inventory、biome、附近实体、历史已完成/失败任务主动提出“下一步但不过难”的任务。
第二,skill library 把成功程序写成可执行代码并做 embedding 检索,使 agent 能把过去掌握的能力组合到新任务里。第三,iterative prompting 把 environment feedback、execution errors 和 self-verification critique 一起送回 LLM,让程序通过多轮修正而不是一轮生成。
与 ReAct / Reflexion / AutoGPT 的根本差异在于:这些 baseline 虽然也使用 LLM 做 reasoning 或 task decomposition,但没有一个“越用越大”的技能库,也没有一个围绕 Minecraft exploration 量身定制的 bottom-up curriculum。
与传统 Minecraft RL 或 imitation learning 方法相比,VOYAGER 不训练新的 policy 参数,而是把 GPT-4 的 world knowledge 通过 prompting、程序复用和反馈闭环转成 embodied competence。更细一点说,VOYAGER 的 idea 不是简单把 memory、planning、reflection 三个流行关键词拼在一起,而是重新定义它们之间的依赖关系。memory 在这里不是保存聊天摘要,而是保存“已经在环境里跑通过的程序”;planning 不是一次生成长链子目标,而是在每轮只提出一个当前最合适、可验证、可积累的 next milestone;
reflection 也不是抽象复盘,而是围绕报错、状态变化和任务完成条件做 program repair。这个定义方式让三者形成了闭环,而不是三个彼此松散的外挂模块。
这也是为什么作者坚持 code-as-action。若 action 只是自然语言 plan,那么 skill library 检索回来的内容仍要再次翻译成可执行行为,误差会在每一轮重生;而程序一旦被验证成功,就能直接作为下一个任务的 building block。换句话说,VOYAGER 把 LLM 最擅长的“根据上下文写出一段结构化程序”能力,转成了 embodied domain 中最稀缺的“可累积、可组合、可复用”的执行单元。

Figure 1 解读:这张主结果图展示 unique items 随 prompting iterations 持续增长。VOYAGER 的曲线比 ReAct、Reflexion、AutoGPT 明显更陡,说明它不是偶然在某个任务上成功,而是在 160 次 prompting budget 内持续发现新物品、推进新能力。图的意义在于把“lifelong exploration”具体化成可累计的 discovery process,而不是单次任务成功率。
3. Method (方法)
3.1 整体框架:任务生成、程序执行、技能沉淀组成闭环
Figure 2 解读:Figure 2 把系统拆成三个主模块。左侧 automatic curriculum 根据 exploration progress 产生新任务;中间 iterative prompting mechanism 把 code as actions 扔进环境执行,并把环境反馈、执行报错、自验证结果回流给 GPT-4;右侧 skill library 在任务成功后把程序存成可检索技能。箭头方向体现的不是单步 inference,而是一个“提任务 → 写代码 → 执行修正 → 成功沉淀 → 继续探索”的循环。
论文附录把整体算法写成很短的 loop:对每个任务最多尝试 4 轮代码修正;如果成功,则把程序加入 skill library 并把任务记入 completed tasks,否则把任务记入 failed tasks。released code 的 voyager/voyager.py 与此对应:Voyager.learn() 在 max_iterations=160 的外循环里不断调用 curriculum_agent.propose_next_task(...),再通过 rollout() 执行单任务闭环;
内部停止条件是 self.action_agent_rollout_num_iter >= self.action_agent_task_max_retries 或 success。从实现直觉上看,这个设计真正重要的地方不是“用 GPT-4 写 JS 代码”,而是把 exploration state、错误信号和长期记忆拆成了可独立演化的模块。automatic curriculum 决定学什么,action agent 决定怎么做,critic 决定是否算成功,skill manager 决定哪些程序值得记忆。这样即便底层 LLM 是 black-box API,agent 仍然能在 system level 上形成长期累积。
这里有一个容易被忽视的点:VOYAGER 的主循环刻意把“任务完成”设成 skill 写入的唯一入口,而不是只要程序运行了就存档。这相当于给长期记忆加了一层 outcome-based filter,避免 skill library 被大量半成品脚本污染。对一个依赖检索的系统来说,这种记忆洁净度和记忆规模同样重要,否则 retrieval 很快会把未来 prompt 挤满低质量示例。
3.2 Automatic Curriculum:让任务难度跟着探索进度走
Figure 3 解读:Figure 3 展示 GPT-4 在不同 agent state 下给出的下一任务示例,例如从已有 wooden pickaxe 和 stone 推出“Craft 1 stone pickaxe”,或在 river biome 且手里有 fishing rod 时提出“Catch 1 fish”。这张图想说明 curriculum 不是泛泛地说“继续探索”,而是把 inventory、biome、实体、时间等状态压成一个具体、单短语、可验证的 next task。
论文在 §2.1 和 Appendix A.3 中说明 curriculum prompt 由五类信息组成:鼓励多样探索且不要过难的 directive、当前 agent state、已完成/失败任务列表、额外 QA context,以及 chain-of-thought。附录 Table A.1 还给出 warm-up schedule:inventory / completed tasks / failed tasks / nearby blocks / nearby entities 从第 0 个完成任务起就能进入 prompt;equipment 在进度 5 后出现;chests 与 position 在进度 7 后出现;
biome / health / hunger / time 在进度 10 后出现;额外 context 在进度 15 后出现。released code 的 voyager/agents/curriculum.py 把这一设计落成了显式逻辑。curriculum_observations 包含 context, biome, time, nearby_blocks, other_blocks, nearby_entities, health, hunger, position, equipment, inventory, chests, completed_tasks, failed_tasks;
default_warmup 为不同 observation 设定启用阈值,并在 render_human_message() 中按当前 progress 和随机 0.8 采样决定是否展示。propose_next_task() 还包含两个重要 hard-coded 分支:第一步任务固定为 Mine 1 wood log;当 inventory 快满时优先要求 craft chest 或把无用物品存进 chest。这说明论文里的“automatic”并非完全无先验,released code 仍加入了少量工程性 guardrail 来避免 agent 因背包满而停滞。QA context 的实现也值得注意。
论文说 GPT-4 会在 curriculum 里利用附加上下文,而代码中 run_qa() 先让 GPT-3.5 生成 5 到 10 个与当前状态相关的问题,再调用 answer agent 自答,把最多 5 组非 Unknown 的问答插回 prompt。这相当于在任务选择前先做一次 lightweight retrieval / reasoning,把“当前 sparse state”扩展成“关于当前 state 的可操作知识”。
这一模块背后的直觉是,开放世界里的原始 observation 对任务选择来说常常过于局部。比如 agent 看到的是当前 inventory 和 biome,但真正需要的是“基于这些条件,现在最值得做且大概率可达的事是什么”。QA context 先把状态翻译成若干显式问题,相当于强迫模型把隐含知识调用出来,再用于课程生成;这比直接把原始状态一股脑喂给 task proposer 更接近“先理解局面,再决定下一步”。
3.3 Skill Library:把成功程序沉淀为可复用的长期记忆
Figure 4 解读:Figure 4 上半部分展示“新技能写入”,下半部分展示“给定新任务时检索相关技能”。作者把 skill 的 key 定义为由 GPT-3.5 生成的 program description embedding,把 value 定义为程序本身;对新任务先让 GPT-3.5 给 general suggestion,再与 environment feedback 合成 query context,用它检索 top-5 技能。图中强调的是 skill 作为“代码记忆单元”,而不是文本摘要。
论文的 skill prompt 由 12 个部分组成,核心包括:代码生成规范、Mineflayer control primitives、检索到的旧技能、上一轮代码、环境反馈、执行错误、critic critique、当前状态、当前任务以及 task context。作者为什么坚持把 skill 存成程序而不是存成自然语言经验?因为 Minecraft 的许多长时程行为本质上是组合式过程,例如“找矿 → 挖矿 → 回炉 → 合成工具”,自然语言提示可以建议方向,但真正可复用的能力载体是一个能直接执行的函数。released code 里的 SkillManager 明确采用 Chroma 向量库和 OpenAIEmbeddings()。
add_new_skill() 会把程序保存到 ckpt/skill/code/,再让 GPT-3.5 基于 program code 和 main function 生成一句 skill description,并把 description 作为 document 写入 ckpt/skill/vectordb。retrieve_skills() 则取 k = min(count, retrieval_top_k),默认 retrieval_top_k=5,按相似度取回对应程序源代码,再作为 render_system_message(skills=...) 的额外上下文。
作者这里做了一个非常 pragmatic 的 trade-off:检索键不是原始代码 embedding,而是 LLM 生成的 skill description。好处是不同实现细节但功能相近的程序更容易被拉近,例如“挖某类矿石”“制作某类工具”可以在语义上相互召回;代价是 description 质量会影响检索精度。论文没有把这一点展开成单独实验,但从系统设计角度看,这是让 skill library 更像“能力索引”而不是“脚本仓库”的关键一步。
论文公式与 released code 实现差异:Figure 4 的文字描述强调“先用 GPT-3.5 生成 general suggestion,并与 environment feedback 合成 query context,再检索 top-5 技能”;但 released code 中 SkillManager.retrieve_skills() 只是接受一个单字符串 query。具体的拼接在调用侧完成,而且初始轮与后续轮并不完全一致:voyager/voyager.py:184 在任务开始前仅以 self.context 检索技能,而 voyager/voyager.py:245-247 在失败后的下一轮才把 self.context + "\\n\\n" + self.action_agent.summarize_chatlog(events) 作为 query。也就是说,论文描述的是统一的“建议 + 环境反馈”查询语义,而 released code 的第一轮 retrieval 实际只基于 task context,环境反馈要到后续迭代才进入检索。
3.4 Iterative Prompting:把环境反馈、执行报错和 critique 变成代码修正信号
Figure 5 解读:左图展示环境反馈如何帮助模型发现“还差 2 个 planks 才能 craft sticks”;右图展示 execution error 如何暴露“acacia_axe 在 Minecraft 中不存在,所以应该改为 wooden axe”。这张图的重点是,VOYAGER 的纠错不是抽象的 self-reflection,而是把真实 runtime 反馈直接变成下一轮代码生成条件。
Figure 6 解读:Figure 6 展示 self-verification prompt 如何根据 agent state 判断任务是否完成,并在失败时给出 critique。它的功能不是重新规划全局目标,而是给 action agent 一个任务级 verdict:这次 rollout 到底算完成,还是只是部分完成、方向对但执行还不够。
论文把这种迭代过程概括为:执行生成程序得到 observation 与 error trace;把它们连同上一轮代码一起送回 GPT-4;反复直到 self-verification 判定任务成功。附录 Algorithm 伪代码直接写成:
如果成功则 add_skill(code) 和 add_completed_task(task),否则 add_failed_task(task)。这里没有 gradient-based optimization,只有 program repair loop。代码实现与论文叙述基本一致。
ActionAgent.render_human_message() 明确把上一轮代码、execution error、chat log、biome、time、nearby blocks、entities、health、hunger、position、equipment、inventory、chests、task、context、critique 拼成下一轮 user prompt;process_ai_message() 只接受带有 JavaScript code fence 的响应,并通过 Babel 解析出函数定义,确保输出可以进入 Mineflayer 环境执行。
CriticAgent.ai_check_task_success() 则要求 LLM 产出 JSON,至少包含 success 布尔值,可选 critique 字段。这个设计的工程含义很强:作者不是让 GPT-4 “自由发挥”,而是用结构化 parser、固定 response format 与 verifier 把 LLM 约束在一个可恢复的程序生成循环里。这部分方法最重要的经验价值在于:VOYAGER 没把 error 当成负面副产物,而是当成下一轮 prompt 里最高价值的监督信号。对于代码生成式 agent,执行报错往往比自然语言自我反思更具体,因为它直接指出 API 不存在、前置资源缺失、控制流没有走通,或者任务完成条件还未满足。
论文中的 iterative prompting 之所以有效,很大程度上正是因为这些错误是 environment-grounded 的,而不是模型自说自话。
3.5 关键控制原语、伪代码与代码映射
论文没有复杂的可学习损失函数,关键“算法”体现在 system loop 与 prompt-grounded API 组合上。因此这里的伪代码重点是复现 released code 的控制流,而不是虚构不存在的训练公式。
3.5.1 自动课程任务选择
def propose_next_task(curriculum_agent, events, chest_observation):
if curriculum_agent.progress == 0 and curriculum_agent.mode == "auto":
return "Mine 1 wood log", (
"You can mine one of oak, birch, spruce, jungle, "
"acacia, dark oak, or mangrove logs."
)
inventory_used = events[-1][1]["status"]["inventoryUsed"]
if inventory_used >= 33:
if chest_observation != "Chests: None\n\n":
return curriculum_agent.find_deposit_task(chest_observation)
return "Craft 1 chest", "Craft 1 chest with 8 planks of any kind of wood."
messages = [
curriculum_agent.render_system_message(),
curriculum_agent.render_human_message(
events=events,
chest_observation=chest_observation,
),
]
return curriculum_agent.propose_next_ai_task(messages=messages, max_retries=5)这段伪代码对应 voyager/agents/curriculum.py 的 propose_next_task() 与 render_human_message():先处理首任务和背包满的特殊情况,再走 GPT-4 curriculum prompt。
3.5.2 单任务 rollout 与代码修正
def rollout_task(voyager, task, context, reset_env=True):
voyager.reset(task=task, context=context, reset_env=reset_env)
while True:
skills = voyager.skill_manager.retrieve_skills(query=voyager.context)
system_message = voyager.action_agent.render_system_message(skills=skills)
human_message = voyager.action_agent.render_human_message(
events=voyager.last_events,
code="",
task=task,
context=context,
critique="",
)
ai_message = voyager.action_agent.llm([system_message, human_message])
parsed = voyager.action_agent.process_ai_message(ai_message)
events = voyager.env.step(
code=parsed["program_code"],
programs=voyager.skill_manager.programs,
)
success, critique = voyager.critic_agent.check_task_success(
events=events,
task=task,
context=context,
chest_observation=voyager.action_agent.render_chest_observation(),
max_retries=5,
)
voyager.action_agent_rollout_num_iter += 1
if success or voyager.action_agent_rollout_num_iter >= voyager.action_agent_task_max_retries:
return parsed, success, critique, events
new_skills = voyager.skill_manager.retrieve_skills(
query=context + "\n\n" + voyager.action_agent.summarize_chatlog(events)
)
voyager.messages = [
voyager.action_agent.render_system_message(skills=new_skills),
voyager.action_agent.render_human_message(
events=events,
code=parsed["program_code"],
task=task,
context=context,
critique=critique,
),
]这段伪代码综合了 voyager/voyager.py 的 reset(), step(), rollout(),以及 ActionAgent / CriticAgent 的接口,体现“初始检索 → 生成代码 → 执行 → 验证 → 失败后带反馈重检索”的闭环。
3.5.3 新技能写入与向量检索
def add_and_retrieve_skills(skill_manager, info, query):
if info["task"].startswith("Deposit useless items into the chest at"):
return []
program_name = info["program_name"]
program_code = info["program_code"]
description = skill_manager.generate_skill_description(program_name, program_code)
skill_manager.vectordb.add_texts(
texts=[description],
ids=[program_name],
metadatas=[{"name": program_name}],
)
skill_manager.skills[program_name] = {
"code": program_code,
"description": description,
}
k = min(skill_manager.vectordb._collection.count(), skill_manager.retrieval_top_k)
docs_and_scores = skill_manager.vectordb.similarity_search_with_score(query, k=k)
return [skill_manager.skills[doc.metadata["name"]]["code"] for doc, _ in docs_and_scores]这段伪代码对应 voyager/agents/skill.py 的 add_new_skill(), generate_skill_description() 与 retrieve_skills()。它说明 skill library 的“记忆”不是参数更新,而是对程序代码做 description embedding 和向量检索。
3.5.4 关键公式与目标
虽然论文主体没有传统意义上的损失函数,但它隐含了一个任务级优化目标:给定当前状态 ,curriculum 选择一个可达且新颖的任务 ,action agent 生成程序 ,critic 判定程序执行后的状态 是否满足任务。可以把单轮闭环写成: 其中 表示已完成/失败任务与额外上下文, 表示 skill library。若 ,则把 以新 skill 的形式写回 。VOYAGER 的关键不是优化一个 differentiable loss,而是通过这个离散闭环使 skill inventory 单调扩张。
Code reference:
main@55e45a88(2023-07-27) — pseudocode and mapping based on this commit
| Paper Concept | Source File | Key Class / Function | 作用 |
|---|---|---|---|
| Overall lifelong loop | voyager/voyager.py | Voyager.learn, Voyager.rollout, Voyager.step | 任务级主循环、最多 160 iteration、每任务最多 4 轮尝试 |
| Automatic curriculum | voyager/agents/curriculum.py | CurriculumAgent.propose_next_task, render_human_message, run_qa | 基于探索进度和状态生成下一任务 |
| Iterative prompting | voyager/agents/action.py | ActionAgent.render_system_message, render_human_message, process_ai_message | 把反馈转成下一轮代码生成输入 |
| Self-verification | voyager/agents/critic.py | CriticAgent.check_task_success, ai_check_task_success | 判断任务是否完成并给 critique |
| Skill library | voyager/agents/skill.py | SkillManager.add_new_skill, retrieve_skills | 把程序写入向量库并检索 top-k 旧技能 |
| Prompt templates | voyager/prompts/*.txt | curriculum.txt, critic.txt, action_template.txt, skill.txt | 论文附录中的 prompt 结构落地 |
| Executable action space | voyager/control_primitives/*.js | exploreUntil, mineBlock, craftItem, smeltItem, killMob | 给 GPT-4 提供 Mineflayer 层的高层 API |
4. Experimental Setup (实验设置)
4.1 Datasets / 环境与任务规模
这篇论文没有传统 supervised dataset,而是在 MineDojo 提供的 open-ended Minecraft 环境中评测 agent。环境状态来自 inventory、equipment、biome、time、health、hunger、position、附近 blocks / entities 与 chest 内容;外部知识部分可选使用 MineDojo wiki knowledge base,但作者明确说 GPT-3.5 本身已经对 Minecraft mechanics 有较好理解,因此 wiki 不是必需组件。
评测包含三类核心任务集合:
- Open-ended exploration:在最多 160 次 prompting iterations 内持续探索,统计 unique items 数量。
- Tech tree mastery:按 wooden tool → stone tool → iron tool → diamond tool 的层级推进,每个 setting 运行 3 次。
- Zero-shot generalization:在新世界里清空 inventory 后测试 4 个未见任务,分别是 Diamond Pickaxe、Golden Sword、Lava Bucket、Compass;每个任务运行 3 次,单任务预算 50 次 prompting iterations。
4.2 Baselines
作者主要比较三类 LLM-based agent baseline,并做了一个去模块的 ablation:
- ReAct:提供环境反馈和 agent state,让它在 MineDojo 中做 reasoning + acting。
- Reflexion:在 ReAct 基础上加入 self-reflection,并接入 VOYAGER 的 execution errors 与 self-verification。
- AutoGPT:用 GPT-4 做 task decomposition,并为 subgoal execution 提供环境反馈和执行错误。
- VOYAGER w/o Skill Library:去掉技能库,只保留 curriculum 与 iterative prompting,用于验证 skill accumulation 的作用。
作者强调没有直接和 pixel-input、low-level control 的 Minecraft methods 做 apple-to-apple 比较,因为 VOYAGER 依赖 Mineflayer API,关注点是高层 lifelong planning,而不是视觉感知或低层 controller 学习。
4.3 Evaluation Metrics
- Unique items discovered:在固定 prompting budget 内获得的不同物品数量,用来衡量开放探索能力。
- Tech tree prompting iterations:到达 wooden / stone / iron / diamond tool milestone 所需的平均 prompting iterations;若在预算内失败,则记为
N/A (0/3)。 - Map coverage / traversal distance:通过俯视地图观察跨地形探索范围,论文总结为 VOYAGER 能走得比 baselines 更远。
- Zero-shot task success:在未见任务上的成功率(3 次试验中的成功次数)以及平均 prompting iterations。
4.4 Runtime / Training Config
这篇论文没有 gradient-based training,也没有 GPU 数量、learning rate、batch size 之类的训练超参数;作者明确把 VOYAGER 定义为对 GPT-4 / GPT-3.5 的 black-box prompting system,而不是 fine-tuned policy。因此这里的“配置”应来自实际运行脚本与 released constructor,而不是虚构训练设置。
released code voyager/voyager.py 给出的关键默认配置如下:
- 环境交互:
env_wait_ticks=20,env_request_timeout=600。 - 全局探索预算:
max_iterations=160。 - 单任务修正预算:
action_agent_task_max_retries=4。 - LLM 角色分工:
- action agent:
gpt-4 - curriculum agent:
gpt-4 - curriculum QA agent:
gpt-3.5-turbo - critic agent:
gpt-4 - skill manager description model:
gpt-3.5-turbo
- action agent:
- skill retrieval:
skill_manager_retrieval_top_k=5。 - curriculum warm-up:来自
voyager/agents/curriculum.py的default_warmup,与 Appendix Table A.1 对齐。
如果按 skill 的 Mandatory Skeleton 来看,这篇论文的“training config”最佳表述就是:论文未进行模型参数训练;released code 提供的是 runtime / prompting 配置,而非优化器配置。因此不应捏造 GPU、step、LR 等信息。
5. Experimental Results (实验结果)
5.1 主结果:开放探索、tech tree、跨世界泛化都明显领先

Figure 7 解读:Figure 7 用鸟瞰地图显示不同 agent 的探索轨迹。VOYAGER 不是在一个局部区域来回打转,而是跨越多种 terrain 持续扩张可达区域;作者据此总结其 traversal distance 比 baselines 长 。图像证据说明 automatic curriculum 的价值不仅是“多做任务”,也是持续把 agent 推离已有舒适区。

Figure 8 解读:Figure 8 可视化 zero-shot unseen tasks 的中间进度。VOYAGER 在 Diamond Pickaxe 与 Compass 等任务上能沿着合理子目标逐步推进,而 baseline 往往停留在前几步或完全没有 meaningful progress。图像层面说明 skill library 的迁移不是只提高最终成功率,还改变了任务推进曲线。

Figure 9 解读:这张图展示 VOYAGER 在 human feedback 下逐步建造 3D 结构的过程。它不是论文主 benchmark,但说明作者希望系统具备比 resource-collection 更广的 embodied programmability:一旦有可执行 API 和 verifier,程序级 skill accumulation 也能扩展到 building 类任务。
5.2 具体数值
Exploration
- VOYAGER 在 160 次 prompting iterations 内发现 63 个 unique items。
- 论文摘要与正文都报告:相较 baseline,VOYAGER 获得 3.3× 更多 unique items。
Tech tree mastery(Table 1)
| Method | Wooden Tool | Stone Tool | Iron Tool | Diamond Tool |
|---|---|---|---|---|
| ReAct | N/A (0/3) | N/A (0/3) | N/A (0/3) | N/A (0/3) |
| Reflexion | 92 ± 72 (3/3) | 94 ± 72 (3/3) | 135 ± 103 (3/3) | N/A (0/3) |
| AutoGPT | 7 ± 2 (3/3) | 9 ± 4 (3/3) | 29 ± 11 (3/3) | N/A (0/3) |
| VOYAGER w/o Skill Library | 6 ± 2 (3/3) | 11 ± 2 (3/3) | 21 ± 7 (3/3) | N/A (0/3) |
| VOYAGER (Ours) | N/A (0/3) | N/A (0/3) | N/A (0/3) | 102 (1/3) |
这张表在 PDF 文本抽取里有换行错位,但结合正文解释可以明确读出结论:VOYAGER 是唯一在预算内解锁 diamond tool 的方法;相较 baselines,作者总结 wooden / stone / iron milestone 分别快 15.3× / 8.5× / 6.4×。同时,去掉 skill library 后虽然前期 wooden / stone / iron 仍能推进,但无法到达 diamond tool,说明长期知识积累对高层 tech tree 目标是必要的。
Zero-shot generalization(Table 2)
| Method | Diamond Pickaxe | Golden Sword | Lava Bucket | Compass |
|---|---|---|---|---|
| ReAct | N/A (0/3) | N/A (0/3) | N/A (0/3) | N/A (0/3) |
| Reflexion | N/A (0/3) | N/A (0/3) | N/A (0/3) | N/A (0/3) |
| AutoGPT | N/A (0/3) | N/A (0/3) | N/A (0/3) | N/A (0/3) |
| AutoGPT w/ Our Skill Library | 39 (1/3) | 30 (1/3) | N/A (0/3) | 30 (2/3) |
| VOYAGER w/o Skill Library | 36 (2/3) | 30 ± 9 (3/3) | 27 ± 9 (3/3) | 26 ± 3 (3/3) |
| VOYAGER (Ours) | 19 ± 3 (3/3) | 18 ± 7 (3/3) | 21 ± 5 (3/3) | 18 ± 2 (3/3) |
这里最值得注意的不是“VOYAGER 也能成功”,而是它在新世界、清空 inventory、面对未见任务时仍能稳定成功 3/3。AutoGPT 即便拿到 VOYAGER 的 skill library 也只能部分提升,说明性能收益不只是来自 task decomposition,更来自 VOYAGER 自己的程序生成、反馈修正与 skill retrieval 协同机制。
5.3 Ablation 与附加发现
- 去掉 skill library 会明显伤害长期上限:VOYAGER w/o Skill Library 在较浅层 tech tree 和部分 unseen tasks 上还能运行,但高难 milestone 与跨任务复用显著变差。
- retrieval 本身具有迁移价值:AutoGPT + VOYAGER skill library 比原版 AutoGPT 好,说明 skill library 不只是 VOYAGER 自己可用的内部缓存,而是包含真正有用的可执行知识。
- warm-up curriculum 不是可有可无的 prompt trick:正文多次强调 baseline 难以处理“discover as many diverse things as possible”这类抽象目标,而 curriculum 把它收缩为局部可验证任务,才使探索曲线持续向上。
5.4 局限性
作者明确或隐含承认了几类限制:
- 依赖 black-box frontier LLM:系统的 planner、coder、critic 都重度依赖 GPT-4 / GPT-3.5,成本与可复现性受 API 质量影响。
- 不处理低层感知与控制:论文依赖 Mineflayer 高层 API,因此无法直接说明 VOYAGER 在 raw pixels、连续控制或真实机器人上的效果。
- 工程启发式仍然不少:例如第一个任务固定为
Mine 1 wood log、背包满时强制引入 chest 任务、warm-up schedule 手工设定,说明“完全自动 lifelong learning”仍带有较强 system engineering 痕迹。 - diamond milestone 仍非完全稳健:虽然 VOYAGER 是唯一到达 diamond tool 的方法,但表中也只有
1/3成功,说明高难长时程组合任务仍未彻底解决。
5.5 总结
总体上,这篇论文证明了一个很强的 system-level 命题:即便完全不微调参数,只要把任务生成、程序执行、环境反馈、自验证和技能记忆组织成闭环,black-box LLM 也可以在 open-ended embodied world 里表现出近似 lifelong learning 的能力。VOYAGER 的真正贡献不是某个新 loss,而是给出了一个后来很多 agentic RL / embodied LLM work 都在复用的架构母板。