한줄 요약: 마인크래프트에서 LLM이 코드를 작성·실행·누적 학습하여, 사람의 개입 없이 새로운 기술을 끝없이 획득하는 최초의 "평생 학습" 체화 에이전트.
| 항목 | 내용 |
|---|---|
| 저자 | Guanzhi Wang, Yuqi Xie, Yunfan Jiang, Ajay Mandlekar, Chaowei Xiao, Yuke Zhu, Linxi "Jim" Fan, Anima Anandkumar |
| 소속 | NVIDIA, Caltech, UT Austin, Stanford |
| 발표 | NeurIPS 2023 (Spotlight) |
| 링크 | arxiv.org/abs/2305.16291 |
| 키워드 | Embodied Agent, Lifelong Learning, Code Generation, Minecraft |
기존 게임 AI 에이전트의 한계:
마인크래프트가 좋은 테스트베드인 이유:
- 절차적 생성 → 무한한 환경 다양성
- 계층적 기술 트리 (나무 채취 → 도구 제작 → 채광 → 제련 → ...)
- 코드 API(Mineflayer) → LLM의 코드 생성과 자연스러운 연결
- 오픈 엔디드 → 고정 목표 없이 끝없는 탐험 가능
1. 자동 커리큘럼 (Automatic Curriculum)
→ LLM이 현재 상태를 보고 다음 목표를 자율적으로 제안
2. 코드 생성 + 실행 피드백 루프
→ LLM이 JavaScript 코드를 작성, 게임에서 실행, 에러를 보고 수정
3. 기술 라이브러리 (Skill Library)
→ 성공한 코드를 이름+설명과 함께 저장, 이후 재활용
GPT-4에게 제공하는 정보:
- 현재 인벤토리: [oak_log x5, stone_pickaxe x1]
- 발견한 블록: [iron_ore, coal_ore]
- 이미 완료한 태스크: [mine_stone, craft_stone_pickaxe]
- 실패한 태스크: [craft_iron_sword]
GPT-4의 응답 (다음 목표):
"mine 3 iron_ore"
선택 기준:
- 현재 보유 자원으로 시도 가능해야 함
- 기존에 완료하지 않은 새로운 것이어야 함
- 점진적 난이도 증가 (탐험 우선 원리)
목표: "mine 3 iron_ore"
시도 1:
GPT-4 → JavaScript 코드 생성:
async function mine3IronOre(bot) {
const ironOre = bot.findBlock('iron_ore', 32);
await bot.dig(ironOre); // 에러: stone_pickaxe 장착 안 함
}
실행 결과: "Error: need appropriate tool"
시도 2:
GPT-4 ← 에러 메시지 + 환경 피드백
GPT-4 → 수정된 코드:
async function mine3IronOre(bot) {
await bot.equip('stone_pickaxe');
for (let i = 0; i < 3; i++) {
const ironOre = bot.findBlock('iron_ore', 32);
await bot.navigateTo(ironOre);
await bot.dig(ironOre);
}
}
실행 결과: 성공 ✓ → 기술 라이브러리에 저장
저장 형식:
{
name: "mine3IronOre",
description: "Mine 3 iron ore blocks using a stone pickaxe",
code: "async function mine3IronOre(bot) { ... }",
dependencies: ["equipItem", "findBlock"]
}
활용 방법:
새 목표가 주어지면 → 설명 기반 검색 (embedding similarity)
→ 관련 기술을 컨텍스트에 포함
→ 기존 함수를 호출하거나 조합하여 새 기술 생성
효과:
초기: 매번 기본 동작부터 코드 작성
후기: craftDiamondPickaxe = smeltIron + craftStick + craftPickaxe
→ 기술이 누적될수록 복잡한 태스크를 더 빠르게 해결
| 에이전트 | 고유 아이템 수 | 기술 트리 깊이 |
|---|---|---|
| ReAct (GPT-4) | 2.3 | 나무 수준 |
| Reflexion (GPT-4) | 3.5 | 나무→돌 |
| AutoGPT (GPT-4) | 4.1 | 돌 수준 |
| Voyager (GPT-4) | 63 | 다이아몬드 수준 |
→ 기존 방법 대비 15배 이상의 아이템 발견 — 기술 트리를 끝까지 탐험
| 마일스톤 | AutoGPT | Voyager |
|---|---|---|
| 나무 도구 제작 | 12분 | 5분 |
| 돌 도구 제작 | 도달 못함 | 18분 |
| 철 도구 제작 | 도달 못함 | 45분 |
| 다이아몬드 채굴 | 도달 못함 | ~2시간 |
| 변형 | 고유 아이템 수 |
|---|---|
| Voyager (full) | 63 |
| − 기술 라이브러리 제거 | 21 |
| − 자동 커리큘럼 제거 (랜덤 목표) | 12 |
| − 실행 피드백 제거 (1회 시도) | 8 |
→ 기술 라이브러리가 가장 큰 기여 — 누적 학습의 핵심
학습 환경: 평원 바이옴
테스트 환경: 사막, 숲, 눈 바이옴 (처음 보는 환경)
결과:
기존 에이전트: 환경 바뀌면 처음부터 다시 학습 필요
Voyager: 기술 라이브러리를 그대로 이전 → 바로 적응
→ "코드"로 저장된 기술은 환경 독립적
Voyager의 가장 인상적인 점은 기술 라이브러리라는 개념의 우아함이다. RL 에이전트의 "경험 리플레이"가 벡터 형태의 난해한 것이라면, Voyager의 기술 라이브러리는 사람이 읽을 수 있는 코드다. 디버깅, 수정, 다른 환경으로의 이전이 자연스럽다. "코드가 곧 지식의 표현"이라는 통찰이 핵심이다.
마인크래프트라는 환경의 선택도 탁월하다. 충분히 복잡하면서도(계층적 기술 트리), 코드 API가 있어 LLM과 자연스럽게 연결되고, 시각적으로 인상적인 데모가 가능하다. 연구의 스토리텔링까지 고려한 설계다.
현실적 한계는 고수준 API 의존이다. bot.dig(block) 같은 추상화된 행동이 존재하기에 가능한 것이고, 실제 물리 환경에서는 이런 API가 없다. 하지만 SayCan이 로봇 primitive를 유사하게 추상화하여 성공한 것을 고려하면, 이 패턴은 충분히 확장 가능해 보인다.
관련 논문: SayCan, Inner Monologue, DEPS, STEVE-1, Reflexion