안녕하세요. 포켓몬 옐로를 플레이하는 개인 프로젝트 Pikagente를 만들다가, 지금은 Project Zomboid에서 같은 문제를 풀고 있습니다. 어떤 행동을 고르게 할지뿐 아니라, 그 행동이 게임 안에서 실제로 일어났는지가 생각보다 어렵더군요.
포켓몬 쪽은 Gen1Recomp라는 Lua/LÖVE 기반 재구현 엔진에서 구조화된 상태를 읽었습니다. 이동 경로와 메뉴 조작처럼 계산할 수 있는 부분은 규칙으로 처리하고, 판단이 필요한 상황에는 선택지 메뉴를 만들어 Jev 방식으로 각 선택지의 점수를 비교했습니다. build 5는 게임 속도 6배에서 실제 경과 시간 7시간 33분 11초로 전당에 입성했습니다. 중단 시간도 포함한 시스템 전체의 기록입니다.
좀보이드에서는 Lua 모드가 상태를 읽고 행동을 실행하며, Python 쪽에서 다음 행동을 고릅니다. 현재 의사결정의 대부분은 규칙과 효용 점수로 처리하고, 로컬 모델과 여러 전문 에이전트의 역할을 실험하고 있습니다. 전문 에이전트 중에는 실제 조작 없이 판단만 비교하는 단계의 것도 있습니다.
최근에는 한 캐릭터가 살아 있는 동안 밀치기 명령이 13번 수락됐는데 실제 타격은 0번인 문제가 있었습니다. 이전 도주 경로가 캐릭터의 방향을 계속 제어하고 있었던 겁니다. 명령이 성공적으로 전달됐다는 로그만 봤다면, 잘못된 성공 사례를 학습 데이터에 넣을 뻔했습니다.
이 경험을 통해 행동 결과를 평가할 때는 다음 세 단계를 구분해야 한다고 느꼈습니다.
- 명령이 수락됐는가.
- 게임 안에서 의도한 동작이 실행됐는가.
- 명중처럼 목표한 효과가 실제로 발생했는가.
지금은 사망 기록과 행동 결과를 따로 분석하고, 학습 설정을 바꾸는 실험에도 학습용 데이터와 분리된 평가를 두고 있습니다. RSI도 그 범위에서 실험 중이며, 죽을 때마다 자동으로 더 강해진다고 입증한 단계는 아닙니다.
2026년 9월 29일 개발 캡처. 생성 이미지가 아닙니다.
게임 에이전트를 만드시는 분들은 명령 수락과 실제 효과를 어떻게 구분해 기록하시나요? 비슷한 실패를 겪으셨다면 경험을 듣고 싶습니다.
궁금한 점이나 비슷한 경험이 있으시면 댓글로 편하게 남겨 주세요.

