Voyager: An Open-Ended Embodied Agent with Large Language Models
论文:Wang et al., MIT + NVIDIA + UT Austin
原文链接:https://arxiv.org/abs/2305.16291
发表:2023,引用 1,516
开源:https://github.com/MineDojo/Voyager
本文记录我的论文学习过程与核心理解

一、论文基础介绍

基本信息

项目 信息
论文 Voyager: An Open-Ended Embodied Agent with Large Language Models
作者 Wang et al., MIT + NVIDIA + UT Austin
发表 2023
引用 1,516(Semantic Scholar)
开源 https://github.com/MineDojo/Voyager
核心贡献 ① 基于 LLM 的终身学习具身 Agent ② 三层组件架构 ③ Minecraft 环境中持续技能习得

二、核心贡献

2.1 问题背景

核心问题: 如何让 Agent 在开放世界中终身学习——不断习得新技能、复用已有技能、避免灾难性遗忘?

具身智能(Embodied AI)的挑战:

  • 环境是开放的,没有固定答案
  • 技能需要积累而不是每次重新学
  • 长期任务需要课程管理(从简单到复杂)

2.2 三层组件架构

Voyager 提出了业界领先的三层组件架构

┌─────────────────────────────────────────────────────────┐
│                    任务输入 (Task)                       │
└─────────────────────────────────────────────────────────┘
                           ↓
         ┌─────────────────────────────────┐
         │         Curriculum              │
         │    (课程管理器 - 难度递进)        │
         └─────────────────────────────────┘
                           ↓
         ┌─────────────────────────────────┐
         │      Prompt Generator           │
         │    (提示生成器 - 任务到提示)      │
         └─────────────────────────────────┘
                           ↓
         ┌─────────────────────────────────┐
         │        Skill Library           │
         │    (技能库 - 技能存储与复用)     │
         └─────────────────────────────────┘
                           ↓
┌─────────────────────────────────────────────────────────┐
│                  Minecraft 环境                        │
└─────────────────────────────────────────────────────────┘

2.3 三层职责详解

Skill Library(技能库)
class SkillLibrary:
    def __init__(self):
        self.skills = {}  # skill_name -> skill_code
    
    def add_skill(self, name, code):
        """习得新技能后存入技能库"""
        self.skills[name] = code
    
    def retrieve(self, task):
        """根据任务检索相关技能"""
        return self.search_similar(task)
    
    def compose(self, skills):
        """组合多个技能完成复杂任务"""
        return self.merge_code(skills)

关键设计:

  • 技能用可执行代码存储(非文本描述)
  • 支持技能检索(根据当前任务找到相关技能)
  • 支持技能组合(多个技能协同完成复杂任务)
Prompt Generator(提示生成器)
class PromptGenerator:
    def generate(self, task, context):
        prompt = f"""
        Task: {task}
        Context: {context}
        Hint: {self.get_hint(task)}
        Skills: {self.get_relevant_skills(task)}
        """
        return prompt
    
    def get_hint(self, task):
        """从技能库中提取相关技能的描述作为提示"""
        skills = self.skill_library.retrieve(task)
        return [s.description for s in skills]

关键设计:

  • 每次生成提示时,从技能库中检索相关技能作为上下文
  • 把"如何做"的知识编码进提示,而非让模型凭空推理
Curriculum(课程管理器)
class Curriculum:
    def __init__(self):
        self.tasks = []  # 按难度排序的任务列表
    
    def next_task(self, performance):
        """根据表现选择下一个任务"""
        if performance > 0.8:
            return self.get_harder_task()
        else:
            return self.get_easier_task()
    
    def get_harder_task(self):
        """获取更难的任务(难度递进)"""
        pass
    
    def get_easier_task(self):
        """获取更容易的任务(降级)"""
        pass

关键设计:

  • 难度自适应:根据 Agent 表现动态调整任务难度
  • 循序渐进:先学简单技能,再组合成复杂技能

三、实验验证

3.1 测试环境

Minecraft - 开放世界的挑战:

  • 无限的可能性空间
  • 需要长期探索和学习
  • 技能组合空间巨大

3.2 核心结论

指标 Voyager vs 其他
任务完成率 显著领先
技能数量 最多(习得了 80+ 技能)
迁移能力 强(新任务可复用已有技能)

Voyager 是第一个在 Minecraft 中展现终身学习能力的 Agent 系统。


四、我的核心理解

4.1 为什么三层架构有效

本质:用工程化方式解决学习问题

解决的问题
Skill Library 记忆 - 不遗忘,可复用
Prompt Generator 提示 - 把知识编码进上下文
Curriculum 课程 - 从简单到复杂,按序学习

关键洞察:

  • 不是让 LLM 凭空学习,而是构建学习基础设施
  • 技能库 = 外部记忆(解决遗忘问题)
  • 提示生成器 = 知识注入(解决上下文不足)
  • 课程管理 = 学习路径(解决难度控制)

4.2 与 AgentVerse 的关系

不是简单的演进,而是继承 + 扩展:

维度 AgentVerse Voyager
核心思想 动态角色调整 终身学习
协作方式 多 Agent 分层协作 技能库 + 课程递进
创新点 动态角色分配 技能库(外部记忆)
适应场景 中期任务 长期任务(开放世界)

Voyager 继承了 AgentVerse 的"动态组织"思路,并加入了:

  • 技能库:外部化记忆,不再每次重新学
  • 课程管理:用难度递进的方式组织学习路径

所以准确地说:

AgentVerse 启发了 Voyager,Voyager 是 AgentVerse 思路在终身学习方向的延伸。

4.3 核心架构演进规律

从简单到复杂的能力提升:

架构 核心能力 解决的问题
ReAct 推理 + 行动 单步任务
MetaGPT 角色 + 流水线 封闭多步任务
AgentVerse 动态角色 + 分层协作 开放多步任务
Voyager 技能库 + 课程 + 终身学习 超长 horizon 任务

五、实战思考

5.1 在自动化测试平台中的应用

# 如果用 Voyager 思路设计测试平台:

class TestVoyager:
    def __init__(self):
        self.skill_library = TestSkillLibrary()      # 测试技能库
        self.prompt_gen = TestPromptGenerator()      # 提示生成器
        self.curriculum = TestCurriculum()           # 测试课程
    
    def learn_new_test_skill(self, task):
        """学习新的测试技能"""
        # 1. 课程管理决定学什么
        target = self.curriculum.next_task(self.performance)
        
        # 2. 提示生成器生成学习提示
        prompt = self.prompt_gen.generate(target, 
            context=self.skill_library.retrieve(target))
        
        # 3. LLM 学习并生成测试代码
        test_code = self.llm.execute(prompt)
        
        # 4. 存入技能库
        self.skill_library.add(target, test_code)
        
        return test_code
    
    def execute_complex_test(self, task):
        """执行复杂测试任务"""
        # 1. 从技能库检索相关技能
        skills = self.skill_library.retrieve(task)
        
        # 2. 组合技能
        combined = self.skill_library.compose(skills)
        
        # 3. 执行
        return self.execute(combined)

5.2 可以借鉴的设计

  1. 测试技能库 - 把积累的测试模式用代码存储,而非每次重新设计
  2. 课程管理 - 按难度组织学习路径:单元测试 → 集成测试 → E2E 测试
  3. 提示工程基础设施 - 把领域知识编码进提示,而非让模型猜

六、架构演进总结

AI Agent 架构演进:从单步推理到终身学习

单Agent推理 (ReAct)
        ↓
角色化流水线 (MetaGPT)     ← 封闭任务,有SOP
        ↓
分层协作 (AgentVerse)      ← 开放任务,动态组织
        ↓
终身学习 (Voyager)         ← 超长horizon,技能积累

复杂度递进的本质规律:

  • 任务越开放 → 越需要动态组织
  • horizon 越长 → 越需要外部记忆
  • 技能越多样 → 越需要课程管理

这条演进路径指向的方向:

未来的 Agent 系统 = 强大的基础模型 + 高效的记忆系统 + 智能的学习机制


七、总结

维度 Voyager
论文质量 ⭐⭐⭐⭐⭐
创新程度 三层架构 + 技能库
实战价值 高(为长期任务提供架构参考)
启发意义 指明了"记忆 + 学习"是终身学习的关键

一句话总结: Voyager 用"技能库 + 课程管理"解决了 Agent 的遗忘问题,为开放世界中的终身学习 Agent 提供了标杆架构。


相关论文:

如果你也在学习 AI Agent,欢迎交流讨论,我的 blog:https://sunrong.site

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐