GPT-6 Astra는 월드 오브 워크래프트의 오크 시작 지역을 40분 만에 끝냈고, 사망은 0회였다. 화면을 보지 않고 서버 네트워크 정보와 퀘스트 데이터를 이용했다.

agent-wow 개발자는 오픈AI의 GPT-6 Astra로 이 실험을 진행했다. 오픈소스 클라이언트 agent-wow를 사설 서버에 연결해 모델이 게임을 하도록 한 사례로, 게임 에이전트를 만들거나 서버 데이터를 활용하는 방법에 관심 있는 사람이라면 구현 방식을 살펴볼 만하다.

agent-wow는 어떤 도구인가?

agent-wow는 자율적으로 게임을 하는 AI 에이전트를 위한 AzerothCore 클라이언트다. 게임의 이동이나 전투 규칙을 직접 정하지 않고, 에이전트가 필요한 기능을 만들 수 있도록 모듈 시스템을 제공한다. 게임 서버와 에이전트 사이의 중계기라고 생각하면 쉽다. 실제로는 게임 네트워크 프로토콜(network protocol)로 AzerothCore 서버와 통신한다.

AzerothCore는 월드 오브 워크래프트 3.3.5a, 즉 《리치 왕의 분노》의 마지막 빌드를 실행하는 오픈소스 서버 소프트웨어다. agent-wow는 공식 라이브 서버에는 연결하지 않으며, 실험용 로컬 사설 서버에서 쓸 수 있다.

화면 없이 어떻게 진행했나?

개발자는 Codex에서 한 번의 프롬프트로 agent-wow를 이용해 플레이를 시작했다. GPT-6 Astra는 가장 높은 수준보다 한 단계 낮은 추론 강도로 실행됐다. 에이전트는 1레벨 오크로 시작해 시험의 골짜기에서 모든 퀘스트를 완료하고 센진 마을에서 여정을 마쳤다.

에이전트는 서버 메시지 28종을 메모리에 저장하는 모듈 하나를 만들었다. 파이썬 스크립트가 이 메시지를 주기적으로 확인해 게임 상황을 구성하고, 행동을 위해 서버에 메시지를 보냈다. 개발자는 처음에는 더 높은 수준의 구현이 필요할 것으로 예상했지만, 실제로는 프로토콜 계층에서 충분히 작동했다고 전했다.

퀘스트 정보는 AzerothCore의 SQL 파일에서 가져왔다. 퀘스트 제공자와 완료 지점, 생성 위치를 추출했다. 개발자는 이를 사람이 퀘스트 정보를 찾으려고 Wowhead에서 몇 시간 조사하는 것과 비슷하다고 봤다. 서버 자체 파일은 실제 서버가 사용하는 데이터지만, 팬 사이트의 정보는 서버와 일치하지 않을 수 있다. 프로젝트의 공개 작업공간 지침에는 AzerothCore 소스 코드도 에이전트의 참고 자료로 적혀 있지만, 이번 실행에서 사용했는지는 개발자가 밝히지 않았다.

에이전트는 선행 퀘스트를 순서대로 진행하고, 잡동사니를 팔고, 장비를 교체하고, 마지막 동굴에 들어가기 전에 능력을 훈련했다. 동굴 퀘스트 두 개를 한꺼번에 받아 함께 완료하기도 했다.

이동 경로를 찾기 위해 개발자는 시작 지점과 목적지 사이의 경로를 계산하는 C++ 보조 프로그램을 만들었다. AzerothCore의 내비게이션 메시 파일인 mmaps를 이용하고, 경로 탐색 라이브러리 Detour가 경유 지점 좌표를 반환한다. 완전한 경로를 찾지 못하면 오류를 반환한다. 개발자는 경로 탐색을 주요 난제로 꼽으면서 에이전트의 능력을 “최적”이라고 평가했다. 다만 에이전트는 충돌 정보가 빠졌을 가능성이 있는 지점에서 지도 오류를 이용하기도 했다.

어디까지 확인된 성과인가?

이번 실행은 시작 지역만 다뤘고 화면 캡처는 사용하지 않았다. GPT-6 Astra는 출시 직후인 지난달 게임 《포털》도 플레이했지만, 그때는 화면 캡처와 플레이어 위치 정보를 이용해 약 24시간 동안 전체 게임을 진행했다. 두 사례는 사용한 정보와 진행 범위가 다르다.

개발자는 월드 오브 워크래프트를 장기 계획과 단기 전술이 함께 필요한 게임으로 골랐다. 장기 목표는 AI 에이전트로 서버 전체를 채우고, 이들이 영웅 난이도의 얼음왕관 성채를 공략할 수 있는지 보는 것이다. 다음으로는 단일 에이전트가 혼자 80레벨까지 도달할 수 있는지, 여러 에이전트가 게임의 사회적 기능을 통해 협력할 수 있는지 살펴볼 계획이다.

실험의 다음 확인 지점은 단일 에이전트의 80레벨 도달과 여러 에이전트의 협력 여부다. 원문은 이번 실행에서 AzerothCore 소스 코드를 실제로 참고했는지는 밝히지 않는다.