Anthropic이 Fable 5 출시 페이지에서 선보인 시각 전용(vision-only) 포켓몬 플레이를 재현한 후, 그 사고
요약
Anthropic의 Fable 5가 시각 정보만으로 포켓몬을 플레이할 수 있다는 주장을 독립적으로 검증한 실험 결과입니다. 작성자는 직접 구축한 하네스를 통해 모델이 1,785턴 만에 첫 배지를 획득했음을 확인했으며, 모델의 사고 체인을 통해 고도의 추론 능력을 분석했습니다.
핵심 포인트
- Fable 5의 시각 전용 포켓몬 플레이 성능을 독립적으로 재현 및 검증함
- 1,785턴과 65.40달러의 비용으로 첫 번째 체육관 배지 획득 성공
- 모델이 화면에 보이지 않는 미래 계획을 사고 체인에 기록하는 추론 능력 확인
- 단순 시각 인지를 넘어선 고차원적 전략 수립 및 상황 기억 능력 관찰
Anthropic은 Fable 5가 시각 정보(vision)만으로 포켓몬을 플레이할 수 있다고 말합니다. 저는 이 주장을 독립적으로 검증했습니다: 1,785번의 결정과 65.40달러를 들여 첫 번째 체육관 배지를 획득했으며, 이후 로그에 기록된 사고 체인(thinking chains)을 읽어보니 그 결과가 그리 단순해 보이지 않았습니다.
요약하자면 — Anthropic의 Fable 5 출시 페이지는 해당 모델이 "최소한의 시각 전용 하네스(vision-only harness)"를 사용하여 포켓몬 FireRed를 이겼다고 주장합니다. 프로토콜, 단계 수, 비용, 코드는 공개되지 않았습니다. 그래서 저는 그들의 설명에 있는 모든 제약 조건을 일치시키거나 그보다 낮게 설정하여 저만의 하네스를 구축했고, Fable 5가 FireRed의 중국어 팬 번역판을 플레이하도록 했습니다. 결과적으로 1,785턴 만에 65.40달러를 들여 첫 번째 체육관 배지를 획득했으며, 2,000턴 제한 시점에는 세 마리의 포켓몬 팀을 이끌고 3번 도로(Route 3)에 도달했습니다. 전체 로그, 모델이 본 모든 프레임, 그리고 하네스 코드는 공개되어 있습니다.
주장의 첫 번째 단계는 독립적인 검증을 통해 입증되었습니다. 첫 번째 배지는 측정되었습니다. 이 속도라면 게임을 완료하는 것은 능력의 문제가 아니라 예산의 문제입니다.
그다음 저는 사고 체인(thinking chains)을 읽었습니다. 게임이 모델에게 "오박사의 꾸러미(Oak's Parcel)"를 건네주기 141턴 전부터, 모델은 이미 어느 도시를 방문할지, 누구와 대화할지, 무엇을 수집할지를 기록해 두었습니다. 3번 도로(Route 3)에 이르렀을 때, 모델의 추론은 상대방을 _"FireRed의 3번 도로에 있는, 그 상징적인 반바지 대사를 하는 꼬마 트레이너(Youngster trainer)"_로 인식하고 있었으며, 그의 팀을 기억해 내려 노력하고 있었습니다. 이 중 어느 것도 화면에는 나타나지 않는 정보입니다.
결과는 실제입니다. 하지만 이 결과를 만들어내는 능력은 아마도 사람들이 "시각만으로 포켓몬을 이긴다"라는 문구를 읽었을 때 상상하는 바로 그 능력은 아닐 것입니다.
주장
Anthropic의 Fable 5 발표 내용 중:
"또한 더 적은 스캐폴딩(scaffolding)이 필요합니다. 예를 들어, 이전 Claude 모델들은 추가적인 유용한 도구를 제공하는 하네스가 있어도 포켓몬 FireRed를 플레이하는 데 어려움을 겪었지만, Fable 5는 최소한의 시각 전용 하네스(vision-only harness)로 FireRed를 이겼습니다."
그리고 함께 제공된
의 캡션 내용입니다:"지도, 내비게이션 보조 도구, 또는 추가적인 게임 상태 정보 없이 오직 가공되지 않은 게임 스크린샷만을 사용하여 Claude가 Pokémon FireRed를 처음부터 끝까지 플레이하는 타임랩스 영상입니다. 이전의 Claude 모델들은 Pokémon을 플레이하기 위해 복잡한 헬퍼 하네스 (helper harness)가 필요했습니다. 하지만 Claude Fable 5는 시각 (vision)만으로 게임을 완료했습니다."
이것이 공개된 기록의 전부입니다. 하네스 (harness) 코드도, "최소한 (minimal)"에 대한 정의도, 단계 수, 토큰 수, 비용, 시도 횟수도 없습니다. 저만의 최소한의 Pokémon 하네스 (harness)를 직접 구축해 본 적이 있는 Pokémon 팬으로서, 저는 알고 싶었습니다: 이것이 재현 가능한가?
이것이 왜 강력한 주장인지에 대한 맥락을 설명하자면: 동일한 조건(가공되지 않은 스크린샷 + 버튼 입력, 실시간)에서 가장 유사한 학술적 베이스라인 (baseline)은 VideoGameBench입니다. 여기서 가장 뛰어난 프런티어 모델 (frontier models)들은 게임의 **0.48%**를 완료했으며, 특히 Pokémon Crystal에서는 **0~0.9%**의 점수를 기록했습니다. Anthropic의 자체적인 이전 Pokémon 실행 사례(Claude Plays Pokémon 스트림)에서는 Claude 3.7 Sonnet이 **세 번째 체육관 구역에 도달하는 데 약 35,000번의 액션 (actions)**이 필요했습니다. 이때는 RAM에서 추출한 상태 텍스트 (state text)와 내비게이션 도구를 포함한 훨씬 더 두꺼운 하네스 (harness)를 사용했습니다. "시각 전용 (vision-only)으로 FireRed를 클리어했다"는 것은 표면적으로 보기에 세대적 도약입니다.
"더 얇다 (thinner)"는 의미 — 그리고 내가 그렇게 말할 수 있는 이유
무언가를 "더 얇다(thinner)"라고 부르기 전에, 저는 **잘 알려진 9개의 오픈 소스 "LLM 포켓몬 플레이" 하네스 (harnesses)**가 모델의 입력을 어떻게 구성하는지 연구했습니다. 한 문장으로 요약된 결과는 다음과 같습니다: "시각 전용(vision-only)"은 이 분야에서 대부분 마케팅 용어일 뿐입니다. "인간처럼 화면만 본다"고 주장하는 일부 방식은 매 턴마다 에뮬레이터 RAM에서 좌표와 맵 ID를 읽어 프롬프트에 붙여넣습니다. 어떤 방식에서는 스크린샷이 모델에 전혀 도달하지 않기도 합니다. 즉, 인지(perception)가 전적으로 RAM 읽기와 OCR(광학 문자 인식)로 수행됩니다. Anthropic 자체의 오픈 소스 교육용 스타터조차 전체 RAM 상태 텍스트(소지금, 배지, 좌표, 파티 구성 — 화면 버퍼에서 직접 읽은 대화 텍스트)를 주입합니다. 9개 중 모델에게 스크린샷 외에는 아무것도 보여주지 않는 것은 정확히 하나뿐이었으며, 그 방식은 메모리 메커니즘이 없어 100턴에서 제한됩니다. (리포지토리별 세부 분석은 리포지토리 부록에서 확인할 수 있습니다).)
이것은 게으름 때문이 아닙니다. 스캐폴딩 (scaffolding)의 각 계층은 알려진 모델의 결함을 보완합니다. 이 분야의 공통된 경험에 따르면, VLM (시각 언어 모델)은 픽셀을 보는 것만으로는 걸을 수 있는 타일과 벽을 안정적으로 구분할 수 없기 때문에, 개발자들은 에뮬레이터 RAM에서 정확한 좌표를 읽어 시각으로부터 내비게이션을 완전히 자유롭게 만듭니다. 하지만 그렇게 되면 결과물에서 모델이 한 일과 엔지니어가 한 일을 더 이상 분리할 수 없게 됩니다. Julian Bradshaw는 Claude와 Gemini 하네스를 비교한 글에서 이를 명확하게 표현했습니다: "포켓몬이 LLM 능력의 좋은 벤치마크가 되려면, LLM이 특수한 도구 없이도 대부분 스스로 관리할 수 있어야 합니다." 두꺼운 하네스는 엔지니어와 모델의 결합체를 측정합니다. 모델 자체를 측정하려면 보완 장치들을 계층별로 하나씩 제거해야 합니다. 그리고 이 실험은 그 보완 장치들을 뼈대만 남기고 모두 제거했습니다.
공개된 단서들로 재구성해 본 그들의 내부 하네스 예상 모습
먼저 인식론적 상태(epistemic status)에 대한 면책 조항을 밝힙니다. Anthropic은 이 실행에 관한 어떠한 기술적 세부 사항도 공개하지 않았으며, 저는 Anthropic 직원으로부터 이와 관련된 직접적인 공개 성명을 찾지 못했습니다. 이 섹션은 공개된 자료로부터의 추론을 바탕으로 진행됩니다. 저는 그들의 코드를 가지고 있지 않으며, 모든 단서는 출처가 명확하므로 여러분이 직접 그 과정을 검증할 수 있습니다.
단서 하나: 공식적인 문구 자체가 '제거'에 관한 이야기입니다. 출시 페이지의 문장은 "또한 더 적은 스캐폴딩 (scaffolding)이 필요합니다"라는 문구 아래에 놓여 있습니다. 즉, 프레임워크가 "우리가 새로운 것을 만들었다"가 아니라 "기존의 것에서 무언가를 제거했다"는 식입니다. 영상 캡션은 제거된 세 가지 요소인 지도(maps), 내비게이션 보조 도구(navigation aids), 추가적인 게임 상태 정보(extra game-state information)를 명시하고 있습니다. 또한 "시각만으로 게임을 완료했다"는 표현은 줌 도구(zoom tools)나 스크린샷 저장 기능과 같은 시각 측면의 보조 장치(crutches)를 추가로 배제합니다.
단서 둘: 제거 대상이 된 "기존의 것"은 반공개(semi-public) 상태입니다. Claude Plays Pokémon 스트림의 제작자인 David Hershey는 이전 섹션에서 언급된 공식 스타터(starter)를 오픈 소스로 공개했습니다. 해당 프로젝트의 README에는 다음과 같은 루프(loop)가 명시되어 있습니다: "에이전트가 에뮬레이터에서 스크린샷을 캡처합니다. 메모리로부터 게임 상태 정보(game state information)를 읽습니다. 스크린샷과 게임 상태를 Claude에게 전송합니다." 스크린샷에 RAM 상태 텍스트를 더한 것, 이것이 바로 공식 계보의 기반입니다.
스트리밍 버전이 그 위에 쌓아 올린 것은 Bradshaw의 동시대 분석 (contemporaneous analysis)에 기록되어 있습니다: "지식 베이스 (knowledge base), 지식 베이스 유지를 돕는 비평가 Claude (critic Claude), 그리고 게임과 더 쉽게 상호작용할 수 있도록 돕는 다양한 도구들을 포함한 방대한 양의 스캐폴딩 (scaffolding)입니다." Opus 4.7이 마침내 레드(Red)를 이겼을 시점에는, 이 목록은 한쪽으로는 늘어나고 있었습니다. 즉, "화면의 특정 영역을 선택하여 더 자세히 볼 수 있도록 '확대(zoom in)'할 수 있게 해주는" 도구와 "스크린샷 또는 스크린샷의 일부를 일종의 시각적 참조 (visual reference)로 저장하는" 도구라는 두 가지 새로운 도구가 추가되었습니다. 동시에 다른 한쪽으로는 이미 줄어들고 있었습니다. 비평가 모델 (critic model)과 일련의 시각적 힌트 (vision hints)들이 이전 반복 (iterations) 단계에서 제거되었기 때문입니다. 이 타임라인은 한 가지 사실을 말해줍니다. 그들은 어떤 스캐폴딩 (scaffolding)을 제거할 수 있는지 층별로 탐색해 왔다는 것입니다. 따라서 출시 페이지에서 "제거되었다"라고 말할 때는, 그 단어 뒤에 정밀한 체크리스트가 존재합니다. (Hershey는 그의 Latent Space 인터뷰에서 이 시스템이 어떻게 구축되었는지 논의합니다.)
세 번째 단서: 그들이 하네스(harness)를 어떻게 생각하는지는 기록으로 남아 있습니다. Anthropic의 하네스 설계 포스트는 하네스를 "가공되지 않은 지능을 작동하는 에이전트(agent)로 전환하는 루프(loop), 도구(tools), 컨텍스트 관리(context management), 그리고 가드레일(guardrails)"로 정의합니다. 또한 압축(compaction, 과거 컨텍스트 요약)과 메모리 폴더(memory folders, 모델이 자신의 파일을 직접 쓰고 다시 읽는 것)를 메모리 메커니즘으로 명시하고 있습니다. 이 포스트의 실행 예시는 포켓몬입니다. Sonnet 3.5는 메모리를 트랜스크립트(transcript)로 취급하여, 두 번째 마을에 갇혀 있는 동안 14,000단계에 걸쳐 31개의 파일(애벌레 포켓몬에 관한 거의 중복된 두 개의 파일 포함)을 축적했습니다. 반면 Opus 4.6은 동일한 단계 수에서 디렉토리로 구성된 10개의 파일, 3개의 체육관 배지, 그리고 자신의 실패로부터 추출된 학습 파일(learnings file)을 보유했습니다. 해당 포스트는 자체적인 핵심 논지를 다음과 같이 밝히고 있습니다: "에이전트 하네스는 Claude가 스스로 할 수 없는 것에 대한 가정을 인코딩합니다... Claude의 능력이 향상됨에 따라, 그러한 가정들은 테스트되어야 합니다." (해당 포스트 본문에는 FireRed에 대한 언급이 없으며 Fable 5에 대해서도 논의하지 않습니다. 즉, 이 포스트는 실행 세부 사항이 아닌 설계 철학을 제공합니다.)
이 세 가지 단서를 쌓아보면, 이 모든 것과 일치하는 가장 단순한 형태가 도출됩니다:
- 루프 골격은 유지됩니다: 스크린샷 입력, 버튼 출력, 주기적인 히스토리 요약 — 이것이 그들의 자체적인 턴(turn) 구조이며, 초기 단계(starter)에서도 나타납니다.
- 캡션에 따라 제외됩니다: RAM 상태 텍스트(추가적인 게임 상태 정보), 네비게이터(navigator, 탐색 보조 도구), 오버레이 및 충돌 맵(collision maps, 맵)은 모두 제외됩니다. "시각만으로(vision alone)"라는 원칙에 따라 줌(zoom) 기능과 스크린샷 저장 기능도 제외됩니다.
- 메모리는 반드시 유지되어야 합니다: 시작부터 끝까지의 플레이는 하나의 컨텍스트 윈도우(context window)에 담을 수 없으며, 그들이 문서화한 메모리 습관은 정확히 두 가지입니다 — 압축 방식의 요약(compaction-style summarization), 그리고 모델이 관리하는 노트/메모리 폴더입니다.
뺄셈(subtraction)을 거치고 남은 것들: 스크린샷 루프, 버튼 도구, 요약 및 노트입니다. 이것이 다음 섹션에서 설명할 800줄의 코드입니다. "그들의 내부 설정과 유사하다"라고 말할 수 있는 근거는 다음과 같습니다. 뼈대는 그들이 공개한 오픈 소스 코드에서 가져왔고, 뺄셈 목록은 그들의 캡션(caption)에서, 메모리 형태는 그들의 블로그에서 가져왔습니다. 저는 그 어떤 것도 발명하지 않았습니다. 단지 그것들을 조립하고, 실행되게 만들고, 게시했을 뿐입니다.
그들의 설명이 생략된 부분 — 도구의 개수, 게임 일시 정지 여부, 시도 횟수, 단계(steps), 비용 등 — 에 대해서는 저는 매번 더 가혹한 옵션을 선택했습니다: 일시 정지 없는 실시간(real-time), 단일 게임 도구, 자유 형식의 노트만 허용, 재시도 없는 N=1 방식입니다. 만약 재현 과정의 세부 사항 중 틀린 것이 있다면, 그 오류는 제 조건이 더 까다로운 방향으로 발생할 것이며, 따라서 재현 결과(replication conclusion)는 유효하게 유지됩니다.
나의 하네스(harness): 네 가지 불변량(invariants)
나의 하네스는 대략 두 개의 의존성(anthropic, pillow)을 가진 800줄의 Python 코드로 구성되어 있으며, 로컬 소켓을 통해 실제 mGBA 에뮬레이터를 구동합니다. 이 하네스는 네 가지 불변량을 유지합니다:
- 시각 전용 (Vision only). 매 턴마다 모델은 정확히 두 가지만을 전달받습니다: 스크린샷 하나(단순 픽셀 복제 — nearest-neighbor 방식, 스무딩이나 오버레이 없음, 2배 업스케일링됨)와 모델이 작성한 노트의 텍스트입니다. 런타임 어설션(runtime assertion)을 통해 사용자 메시지에
[image, text]외에 다른 것이 유입되지 않도록 강제합니다. - 단일 게임 도구.
press_buttons— 열거형(enum)으로 제한된 8개의 게임보이 버튼입니다. 내비게이터(navigator), 경로 탐색(pathfinding), 좌표 도우미는 없습니다. - 메모리는 유일한 비시각적 메커니즘입니다. 매 20턴마다 히스토리는 모델이 작성한 요약본으로 압축되며(이때 이미지는 폐기됩니다), 모델이 완전히 제어하는 자유 형식의 노트 스크래치패드(scratchpad)가 매 턴마다 다시 주입됩니다. 그게 전부입니다.
- 시스템 프롬프트는 모델에게 암기된 포켓몬 지식을 신뢰하지 말라고 지시합니다 — 레이아웃이 다를 수 있으므로, 오직 화면과 노트만을 신뢰하십시오.
모델의 컨텍스트(context)로 읽어들이는 RAM 데이터는 없습니다. 지도(map)도 없습니다. 그리드 오버레이(grid overlay)도 없습니다. 공략 텍스트(walkthrough text)도 없습니다. 비평 모델(critic model)도 없습니다. 게임은 실시간으로 실행됩니다 — 모델이 생각하는 동안 게임이 일시 정지되지 않습니다.
Anthropic의 설정에서 의도적으로 변경한 한 가지 사항은 다음과 같습니다: 제가 사용하는 ROM은 FireRed의 중국어 팬 번역(Chinese fan translation) 버전입니다. 제가 가지고 있던 복사본이 그것이었습니다. 텍스트 읽기 축(text-reading axis) 측면에서 이는 분명히 더 어렵습니다 — 라틴 알파벳 대신 저해상도 CJK 비트맵 폰트(bitmap fonts)를 사용하기 때문입니다; 다른 축에 대해서는 이 포스트에서 판단을 내리지 않습니다.
하네스(harness) 내부: 모든 토큰을 파악하기
"최소한(Minimal)"이라고 주장하기는 쉽지만, 검사하기는 어렵습니다. 그래서 여기 전체 내용을 공개합니다.
시스템 프롬프트(system prompt) 전문. 이것은 모델이 받는 모든 지침이며, 약 350단어 분량입니다:
당신은 Game Boy에서 포켓몬 게임을 플레이하고 있습니다. 당신은 오직 스크린샷을 보고 버튼을 누름으로써 게임과 상호작용합니다. 당신은 게임에 대한 다른 접근 권한이 없습니다.
...
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기