奥德赛:赋予智能体开放世界技能
论文"奥德赛:赋予智能体开放世界技能"的官方代码库。此代码库基于MineDojo和Voyager框架。
概述
摘要: 近期研究致力于构建适用于开放世界实体环境(如Minecraft)的通用智能体。尽管取得了令人鼓舞的结果,现有工作主要集中在解决基本的程序化任务上,如按照Minecraft科技树收集材料和制作工具,将获得钻石任务视为最终目标。这一局限源于智能体可用的狭窄行动集,要求它们从头开始学习有效的长期策略。因此,在开放世界中发现多样化的游戏机会变得具有挑战性。在本研究中,我们提出了奥德赛,这是一个新的框架,赋予基于大型语言模型(LLM)的智能体开放世界技能,以探索广阔的Minecraft世界。奥德赛包括三个关键部分:
- (1) 一个交互式智能体,拥有包含40个基本技能和183个组合技能的开放世界技能库。
- (2) 一个在包含390,000多个指令条目的大型问答数据集上训练的微调LLaMA-3模型,该数据集源自Minecraft Wiki。
- (3) 一个新的开放世界基准,包括数千个长期规划任务、数十个动态即时规划任务和一个自主探索任务。
大量实验表明,所提出的奥德赛框架能够有效评估智能体的规划和探索能力。所有数据集、模型权重和代码均公开可用,以激励未来更高级自主智能体解决方案的研究。
新闻
演示
所有演示视频均在Minecraft的旁观者模式下捕获。为遵守GitHub的文件大小限制,部分视频已加速。
从零开始挖掘钻石:
制作剑并与僵尸战斗:
剪羊毛和挤牛奶:
自主探索:(仅展示前几轮)
目录
目录说明
-
LLM-Backend
部署LLM后端的代码。
-
MC-Crawler
从Minecraft Wiki爬取Minecraft游戏信息并以markdown格式存储数据。
-
MineMA-Model-Fine-Tuning
微调LLaMa模型并生成训练和测试数据集的代码。
-
Odyssey
基于大型语言模型和技能库的Minecraft智能体代码。
奥德赛安装
我们使用Python ≥ 3.9和Node.js ≥ 16.13.0。我们已在Ubuntu 20.04、Windows 10和macOS上进行了测试。
Python安装
cd Odyssey
pip install -e .
pip install -r requirements.txt
Node.js安装
npm install -g yarn
cd Odyssey/odyssey/env/mineflayer
yarn install
cd Odyssey/odyssey/env/mineflayer/mineflayer-collectblock
npx tsc
cd Odyssey/odyssey/env/mineflayer
yarn install
cd Odyssey/odyssey/env/mineflayer/node_modules/mineflayer-collectblock
npx tsc
Minecraft服务器
您可以使用docker部署Minecraft服务器。请参阅此处。
嵌入模型
-
首先需要安装git-lfs。
-
下载嵌入模型仓库
git lfs install git clone https://huggingface.co/sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2.git
-
您克隆仓库的目录随后用于设置
embedding_dir
。
配置
您需要根据conf
目录中conf/config.json.keep.this
的格式创建config.json
。
server_host
: LLaMa后端服务器IP。server_port
: LLaMa后端服务器端口。NODE_SERVER_PORT
: Node服务端口。SENTENT_EMBEDDING_DIR
: 您的嵌入模型路径。MC_SERVER_HOST
: Minecraft服务器IP。MC_SERVER_PORT
: Minecraft服务器端口。
奥德赛任务
子目标
def test_subgoal():
odyssey_l3_8b = Odyssey(
mc_port=mc_port,
mc_host=mc_host,
env_wait_ticks=env_wait_ticks,
skill_library_dir="./skill_library",
reload=True, # 如果skill_json更新,设置为True
embedding_dir=embedding_dir, # 您的模型路径
environment='subgoal',
resume=False,
server_port=node_port,
critic_agent_model_name = ModelType.LLAMA3_8B_V3,
comment_agent_model_name = ModelType.LLAMA3_8B_V3,
curriculum_agent_qa_model_name = ModelType.LLAMA3_8B_V3,
curriculum_agent_model_name = ModelType.LLAMA3_8B_V3,
action_agent_model_name = ModelType.LLAMA3_8B_V3,
)
# 5个经典MC任务
test_sub_goals = ["制作工作台", "制作木镐", "制作石镐", "制作铁镐", "挖掘钻石"]
try:
odyssey_l3_8b.inference_sub_goal(task="subgoal_llama3_8b_v3", sub_goals=test_sub_goals)
except Exception as e:
print(e)
模型 | 用途 |
---|---|
action_agent_model_name | 从k个检索到的技能中选择一个执行 |
curriculum_agent_model_name | 提出农业和探索任务 |
curriculum_agent_qa_model_name | 安排战斗子任务,生成QA上下文,并排序杀怪顺序 |
critic_agent_model_name | 行动评判 |
comment_agent_model_name | 对上次战斗结果进行评价,以重新安排战斗子任务 |
长期规划任务
def test_combat():
odyssey_l3_70b = Odyssey(
mc_port=mc_port,
mc_host=mc_host,
env_wait_ticks=env_wait_ticks,
skill_library_dir="./skill_library",
reload=True, # 如果skill_json更新,设置为True
embedding_dir=embedding_dir, # 您的模型路径
environment='combat',
resume=False,
server_port=node_port,
critic_agent_model_name = ModelType.LLAMA3_70B_V1,
comment_agent_model_name = ModelType.LLAMA3_70B_V1,
curriculum_agent_qa_model_name = ModelType.LLAMA3_70B_V1,
curriculum_agent_model_name = ModelType.LLAMA3_70B_V1,
action_agent_model_name = ModelType.LLAMA3_70B_V1,
)
multi_rounds_tasks = ["1个末影人", "3个僵尸"]
l70_v1_combat_benchmark = [
# 单怪物任务
"1个骷髅", "1只蜘蛛", "1只僵尸猪人", "1个僵尸",
# 多怪物任务
"1个僵尸, 1个骷髅", "1个僵尸, 1只蜘蛛", "1个僵尸, 1个骷髅, 1只蜘蛛"
]
for task in l70_v1_combat_benchmark:
odyssey_l3_70b.inference(task=task, reset_env=False, feedback_rounds=1)
for task in multi_rounds_tasks:
odyssey_l3_70b.inference(task=task, reset_env=False, feedback_rounds=3)
动态即时规划任务
def test_farming():
odyssey_l3_8b = Odyssey(
mc_port=mc_port,
mc_host=mc_host,
env_wait_ticks=env_wait_ticks,
skill_library_dir="./skill_library",
reload=True, # 如果skill_json更新,设置为True
embedding_dir=embedding_dir, # 您的模型路径
environment='farming',
resume=False,
server_port=node_port,
critic_agent_model_name = ModelType.LLAMA3_8B_V3,
comment_agent_model_name = ModelType.LLAMA3_8B_V3,
curriculum_agent_qa_model_name = ModelType.LLAMA3_8B_V3,
curriculum_agent_model_name = ModelType.LLAMA3_8B_V3,
action_agent_model_name = ModelType.LLAMA3_8B_V3,
)
farming_benchmark = [
# 单目标任务
"通过剪羊毛收集1个羊毛",
"收集1桶牛奶",
"烹饪1块肉(牛肉或羊肉或猪肉或鸡肉)",
# 多目标任务
"收集并种植1颗种子(小麦或西瓜或南瓜)"
]
for goal in farming_benchmark:
odyssey_l3_8b.learn(goals=goal, reset_env=False)
自主探索任务
def explore():
odyssey_l3_8b = Odyss
| **ID** | **论文** | **作者** | 会议 |
| :----: | :----------------------------------------------------------: | :----------------------------------------------------------: | :--------------------: |
| 1 | [MineRL:一个大规模的Minecraft演示数据集](https://arxiv.org/abs/1907.13440) | William H. Guss, Brandon Houghton, Nicholay Topin, Phillip Wang, Cayden Codel, Manuela Veloso, Ruslan Salakhutdinov | IJCAI 2019 |
| 2 | [视频预训练(VPT):通过观看未标记的在线视频学习行动](https://arxiv.org/abs/2206.11795) | Bowen Baker, Ilge Akkaya, Peter Zhokhov, Joost Huizinga, Jie Tang, Adrien Ecoffet, Brandon Houghton, Raul Sampedro, Jeff Clune | arXiv 2022 |
| 3 | [MineDojo:利用互联网规模知识构建开放式实体智能体](https://arxiv.org/abs/2206.08853) | Linxi Fan, Guanzhi Wang, Yunfan Jiang, Ajay Mandlekar, Yuncong Yang, Haoyi Zhu, Andrew Tang, De-An Huang, Yuke Zhu, Anima Anandkumar | NeurIPS 2022 |
| 4 | [通过目标感知表示学习和自适应视野预测实现开放世界多任务控制](https://arxiv.org/abs/2301.10034) | Shaofei Cai, Zihao Wang, Xiaojian Ma, Anji Liu, Yitao Liang | CVPR 2023 |
| 5 | [描述、解释、规划和选择:与大型语言模型的交互式规划使开放世界多任务智能体成为可能](https://arxiv.org/abs/2302.01560) | Zihao Wang, Shaofei Cai, Guanzhou Chen, Anji Liu, Xiaojian Ma, Yitao Liang | NeurIPS 2023 |
| 6 | [开放世界长期任务的技能强化学习与规划](https://arxiv.org/abs/2303.16563) | Haoqi Yuan, Chi Zhang, Hongcheng Wang, Feiyang Xie, Penglin Cai, Hao Dong, Zongqing Lu | NeurIPS Workshop 2023 |
| 7 | [Voyager:一个具有大型语言模型的开放式实体智能体](https://arxiv.org/abs/2305.16291) | Guanzhi Wang, Yuqi Xie, Yunfan Jiang, Ajay Mandlekar, Chaowei Xiao, Yuke Zhu, Linxi Fan, Anima Anandkumar | arXiv 2023 |
| 8 | [Minecraft中的幽灵:通过具有基于文本知识和记忆的大型语言模型实现开放世界环境中的通用能力智能体](https://arxiv.org/abs/2305.17144) | Xizhou Zhu, Yuntao Chen, Hao Tian, Chenxin Tao, Weijie Su, Chenyu Yang, Gao Huang, Bin Li, Lewei Lu, Xiaogang Wang, Yu Qiao, Zhaoxiang Zhang, Jifeng Dai | arXiv 2023 |
| 9 | [STEVE-1:Minecraft中文本到行为的生成模型](https://arxiv.org/abs/2306.00937) | Shalev Lifshitz, Keiran Paster, Harris Chan, Jimmy Ba, Sheila McIlraith | NeurIPS 2023 |
| 10 | [GROOT:通过观看游戏视频学习遵循指令](https://arxiv.org/abs/2310.08235) | Shaofei Cai, Bowei Zhang, Zihao Wang, Xiaojian Ma, Anji Liu, Yitao Liang | arXiv 2023 |
| 11 | [MCU:Minecraft中用于开放式智能体评估的以任务为中心的框架](https://arxiv.org/abs/2310.08367) | Haowei Lin, Zihao Wang, Jianzhu Ma, Yitao Liang | arXiv 2023 |
| 12 | [LLaMA Rider:激励大型语言模型探索开放世界](https://arxiv.org/abs/2310.08922) | Yicheng Feng, Yuxuan Wang, Jiazheng Liu, Sipeng Zheng, Zongqing Lu | arXiv 2023 |
| 13 | [JARVIS-1:基于记忆增强多模态语言模型的开放世界多任务智能体](https://arxiv.org/abs/2311.05997) | Zihao Wang, Shaofei Cai, Anji Liu, Yonggang Jin, Jinbing Hou, Bowei Zhang, Haowei Lin, Zhaofeng He, Zilong Zheng, Yaodong Yang, Xiaojian Ma, Yitao Liang | arXiv 2023 |
| 14 | [看与思:虚拟环境中的实体智能体](https://arxiv.org/abs/2311.15209) | Zhonghan Zhao, Wenhao Chai, Xuan Wang, Li Boyi, Shengyu Hao, Shidong Cao, Tian Ye, Jenq-Neng Hwang, Gaoang Wang | arXiv 2023 |
| 15 | [创造性智能体:通过想象力赋能智能体执行创造性任务](https://arxiv.org/abs/2312.02519) | Chi Zhang, Penglin Cai, Yuhui Fu, Haoqi Yuan, Zongqing Lu | arXiv 2023 |
| 16 | [MP5:通过主动感知实现Minecraft中的多模态开放式实体系统](https://arxiv.org/abs/2312.07472) | Yiran Qin, Enshen Zhou, Qichang Liu, Zhenfei Yin, Lu Sheng, Ruimao Zhang, Yu Qiao, Jing Shao | arXiv 2024 |
| 17 | [Auto MC-Reward:使用大型语言模型为Minecraft自动设计密集奖励](https://arxiv.org/abs/2312.09238) | Hao Li, Xue Yang, Zhaokai Wang, Xizhou Zhu, Jie Zhou, Yu Qiao, Xiaogang Wang, Hongsheng Li, Lewei Lu, Jifeng Dai | arXiv 2024 |
## 引用
如果您发现这项工作对您的研究有用,请引用我们的论文:
@article{Odyssey2024, title={Odyssey: 赋予智能体开放世界技能}, author={Shunyu Liu and Yaoru Li and Kongcheng Zhang and Zhenyu Cui and Wenkai Fang and Yuxuan Zheng and Tongya Zheng and Mingli Song}, journal={arXiv preprint arXiv:2407.15325}, year={2024} }
## 联系方式
这个项目由浙江大学[VIPA实验室](https://www.vipazoo.cn/)开发。如果您对我们的研究感兴趣,欢迎通过电子邮件(<liushunyu@zju.edu.cn>)与我联系 :)
<div align="center">
<img src="https://yellow-cdn.veclightyear.com/2b54e442/5cd80e6f-9fd7-4332-80eb-8959f2862446.jpg" width="30%">
</div>