Metlivi 블로그

명확한 규칙, 기억, 플레이어 선택권을 갖춘 AI 봇 게임을 디자인하는 방법

플레이 가능한 AI 봇 게임을 디자인하려면 작고 반복 가능한 루프를 정의하고, 대화 외부에 게임 상태를 저장하며, 각 플레이어 행동에 명확한 결과를 부여하세요. 봇은 요청을 해석하고 이벤트를 묘사하게 하되, 명시적인 규칙이 비용, 진행 상황, 엔딩을 결정하도록 만드세요. 이 가이드는 AI 캐릭터나 내레이터를 활용해 텍스트 기반 게임을 제작하는 게임 제작자를 위한 것입니다. 핵심 과제는 플레이어가 자신의 선택지를 이해하고, 자신의 결정이 중요하다는 것을 체감하며, 유효한 엔딩에 도달할 수 있는 짧고 테스트 가능한 단일 세션을 만드는 것입니다. 아래의 배달 게임은 설명용 디자인 예시일 뿐, 검증된 완제품이나 보고된 사례 연구가 아닙니다.

2026년 9월 22일3분 분량독서·예술·문화작성: Metlivi Editorial Team
섹션 1

AI 없이도 플레이할 수 있는 코어 루프로 시작하세요

루프를 한 문장으로 적어보세요: 상황 제시 → 행동 수락 → 규칙 확인 → 상태 업데이트 → 결과 및 다음 선택지 제시. 모든 턴은 이 루프를 완료하거나 진행할 수 없는 이유를 설명해야 합니다.

성격 프롬프트를 작성하기 전에 목표, 가능한 행동, 행동 비용, 종료 조건을 정의하세요. 색인 카드나 스프레드시트만으로도 게임을 진행할 수 있어야 합니다. 이렇게 하면 생성된 대화가 변수를 추가하기 전에 메커니즘을 점검할 수 있습니다.

*Festival Parcel*(축제 소포)이라는 작은 게임을 예로 들어보겠습니다. 플레이어에게는 소포를 배달하기 위한 5단위의 시간이 주어집니다. 플레이어는 직행 경로와 정원 경로 중 하나를 선택할 수 있으며, 출발 전 선택적으로 장식용 리본을 챙길 수도 있습니다. 봇은 경로를 설명하고 배달 상황을 해설하는 축제 배달원 역할을 맡습니다.

제안하는 규칙은 의도적으로 간결하게 구성되었습니다:

첫 번째 선택 전에 이 규칙들을 보여주세요. 배달 행동을 하면 세션이 종료되므로, 플레이어가 리본을 챙기려면 그 전에 미리 해야 한다는 점을 설명하세요. 마지막 시간 단위를 소모하는 배달이라도 성공 여부 판정이 먼저 이루어지므로 정상적으로 성공합니다.

이 프로토타입은 완전한 시작, 결정 공간, 엔딩을 갖추고 있습니다. 추가 캐릭터나 장소는 해당 루프에 유의미한 결정을 더할 수 있을 때만 도입해야 합니다.

소포와 시간 5단위를 가지고 리본은 없는 상태로 보관소에서 시작합니다.
리본 수집은 시간 1단위를 소모하며 1회만 가능합니다.
직행 배달은 시간 3단위를 소모하며 세션을 성공적으로 마칩니다.
정원 배달은 시간 4단위를 소모하며 세션을 성공적으로 마치고, 엔딩에 정원 엽서를 추가합니다.
대기는 시간 1단위를 소모합니다.
상태 확인, 규칙 질문, 설명 요청은 비용이 들지 않습니다.
행동은 그 비용 전체를 지불할 만큼의 충분한 시간이 남아 있을 때만 허용됩니다.
유효한 행동 후에는 먼저 배달 성공 여부를 확인합니다. 소포가 아직 배달되지 않았고 감당할 수 있는 경로가 없다면 배달 실패 결과로 종료합니다.
섹션 2

결과 판정의 권한을 명시적 상태에 부여하세요

상태(State)를 무엇이 사실인지에 대한 게임의 공식 기록으로 취급하세요. 대화 텍스트는 그 기록을 설명할 수는 있지만, 기록을 몰래 변경해서는 안 됩니다.

Robert Nystrom의 *Game Programming Patterns*(https://gameprogrammingpatterns.com/state.html) 'State(상태)' 장에서는 유한 상태 기계를 상태, 입력, 허용된 전이로 설명합니다. 또한 불리언(Boolean) 플래그를 느슨하게 조합할 때 어떻게 유효하지 않은 조합이 발생할 수 있는지도 보여줍니다. 이 원칙을 게임의 라이프사이클에 적용하세요. 'active', 'delivered', 'missed'와 같이 명확한 전이 규칙을 가진 단일 세션 상태를 사용하세요.

배달 프로토타입의 경우, 간단한 상태 사양만으로도 충분합니다:

정원 엽서는 모순을 유발할 수 있는 별도의 값을 저장하는 대신 선택한 경로로부터 파생시키세요. 마찬가지로 현재 가능한 행동도 상태와 규칙으로부터 계산해 내세요.

요청 해석, 행동 및 매개변수 유효성 검사, 결과 계산, 상태 변경 커밋, 서사 묘사라는 고정된 처리 순서를 사용하세요. 내레이터에게는 커밋된 결과와 허용된 다음 행동을 전달해야 합니다. 내레이터가 임의로 독자적인 계산을 만들어내서는 안 됩니다.

예를 들어 리본을 챙긴 후의 공식적인 결과는 '남은 시간 4단위, 리본 수집 완료, 두 경로 모두 선택 가능'입니다. 봇은 해당 색상이 게임 메커니즘에 영향을 미치지 않는 한 리본의 색상을 묘사할 수 있습니다. 하지만 예고에 없던 시간 비용을 추가하거나 리본을 하나 더 줄 수는 없습니다.

기존 인터랙티브 픽션 도구를 사용해 이러한 조건을 프로토타이핑할 수 있습니다. Inkle의 공식 인터랙티브 픽션 튜토리얼(https://www.inklestudios.com/ink/web-tutorial/)에서는 조건부 선택, 이전에 방문한 콘텐츠 추적, 변수, 명시적 엔딩을 설명합니다. 이러한 기능은 AI 내레이션을 추가하기 전에 직접 작성한 게임을 테스트하는 데 유용한 기반이 됩니다.

필드 — 초기값 — 규칙
세션 상태(Session status) — active — 활성(active) 세션만 게임플레이 행동을 수락함
남은 시간(Time remaining) — 5 — 0 미만으로 내려갈 수 없음
리본 수집 여부(Ribbon collected) — false — 한 번만 true로 변경 가능
선택한 경로(Route taken) — none — 배달 시 direct 또는 garden으로 변경
커밋된 행동 수(Committed action count) — 0 — 수락된 게임플레이 행동당 1씩 증가
섹션 3

플레이어가 이해하고 영향을 미칠 수 있는 선택지를 제공하세요

이 디자인에서 주도권(agency)은 플레이어가 유의미한 차이를 예측하고 그 차이가 결과에 반영되는 것을 관찰할 수 있는지로 판단합니다. 문구만 다를 뿐 똑같은 결과로 이어지는 버튼 여러 개는 주도권을 시험하는 데 거의 도움이 되지 않습니다.

*Festival Parcel*에서 경로 결정은 다양한 플레이어의 선호를 뒷받침합니다:

이것들은 명시된 규칙에서 도출된 예시 계산입니다. 이는 간단한 결정 지침을 제공합니다. 더 일찍 끝내려면 직행 배달을, 장식을 원하면 리본 수집을, 엽서를 원하면 정원 경로를 선택하는 식입니다. 여기서 남은 시간은 엔딩의 세부 묘사일 뿐, 몰래 점수를 부여하는 요소가 아닙니다.

게임이 나중에 특정 결과에 보상을 주도록 바뀐다면, 결정하기 전에 그 채점 방식을 공개하세요. 그렇지 않으면 플레이어는 의도된 트레이드오프를 평가할 수 없습니다.

눈에 보이는 행동 선택지와 함께 자유로운 텍스트 입력도 지원하세요. "경치 좋은 길로 가자"는 정원 배달로 매핑될 수 있습니다. "특별하게 만들어 줘"는 모호합니다. 리본을 챙기라는 뜻일 수도 있고, 정원 경로를 택하라는 뜻일 수도 있으며, 둘 다일 수도 있습니다. 이럴 때는 시간을 소모하지 말고 간단한 확인 질문을 던지세요.

첫 프로토타입에서는 메시지당 하나의 게임플레이 행동만 수락하세요. 플레이어가 일련의 연속 행동을 요청하면 각 단계를 제시하고 첫 번째 행동을 선택하도록 요청하세요. 이렇게 하면 나중 단계가 불가능한 것으로 판명될 계획을 어설프게 부분 실행하는 상황을 방지할 수 있습니다.

지원되지 않는 요청에도 유용한 정보를 제공하세요. 플레이어가 날아가겠다고 요청하면, 이용 가능한 경로는 직행과 정원 경로뿐이며 각각의 비용이 얼마인지 설명하세요. 액션 시스템이 예측 가능한 기능 범위를 유지하는 동시에 자유로운 텍스트 입력을 통해 표현력을 확장할 수 있습니다.

계획 — 총 소요 시간 — 가시적 결과
직행 배달 — 3 — 남은 시간 2단위로 일반 소포 배달 완료
리본 수집 후 직행 배달 — 4 — 남은 시간 1단위로 장식된 소포 배달 완료
정원 배달 — 4 — 일반 소포 배달 완료 및 정원 엽서 획득
리본 수집 후 정원 배달 — 5 — 장식된 소포 배달 완료 및 정원 엽서 획득
섹션 4

봇이 기억하는 것과 알 수 있는 것을 정의하세요

메모리를 서로 다른 목적을 가진 세 가지 계층으로 분리하세요.

신뢰할 수 있는 세션 상태(Authoritative session state)는 자원, 진행 상황, 선택한 경로, 엔딩을 저장합니다. 이는 저장 및 다시 불러오기 전반에 걸쳐 유지되며 유효성이 검증된 행동을 통해서만 변경됩니다.

세션 이벤트 로그(Session event log)는 커밋된 행동과 그 결과를 기록합니다. 로그 항목에는 '행동 2가 리본을 수집하고 시간을 5에서 4로 줄였다'는 내용이 포함될 수 있습니다. 이는 디버깅과 정확한 상황 요약을 지원합니다. 요청이 중복되더라도 동일한 이벤트가 두 번 적용되지 않도록 행동 식별자를 유지하세요.

서사적 맥락(Narrative context)은 대화의 어조와 연속성을 유지하는 데 사용되는 최근 대화 및 간결한 요약을 담고 있습니다. 이는 실제 게임 상태를 지우지 않고도 내용을 축약할 수 있습니다.

효과적인 컨텍스트 엔지니어링에 관한 Anthropic의 가이드(https://www.anthropic.com/engineering/effective-context-engineering-for-ai-agents)에서는 대화 기록 요약과 컨텍스트 창 외부의 지속적인 메모 유지 모두를 다룹니다. 또한 과도한 요약으로 인해 중요한 세부 정보를 잃을 수 있다고 경고합니다. 여기서 도출할 수 있는 디자인 시사점은 정확한 기계적 사실은 구조화된 스토리지에 보관하고, 대화의 연속성을 유지하는 데에는 요약을 활용하라는 것입니다.

스토리지 경계뿐만 아니라 지식의 경계도 설정하세요. 캐릭터는 알아도 되는 사실만 전달받아야 합니다. 후속 버전에 숨겨진 경로가 포함된다면, 발견 조건이 충족될 때까지 해당 캐릭터의 컨텍스트에서 제외하세요. 게임 엔진이 알고 있는 모든 상태를 내레이터까지 알 필요는 없습니다.

이 작은 게임에서는 저장된 세션 내에서만 진행 상황을 유지하고, 새 게임을 시작할 때는 이를 초기화하세요. 한 번의 경로 선택으로 영구적인 플레이어 선호도를 지레짐작하지 마세요. 짧은 설명 선호와 같이 저장되는 설정을 추가할 경우, 플레이어가 명시적으로 확인하고 수정할 수 있도록 만드세요.

구체적인 순서로 메모리를 테스트해 보세요: 리본 수집, 저장, 다시 불러오기, 상태 확인 요청, 정원 배달 선택. 리본은 수집된 상태로 유지되어야 하고, 배달 전 남은 시간은 4단위여야 하며, 최종 시간은 0이어야 합니다.

섹션 5

게임 실패와 시스템 실패에 대한 대응을 구분하여 설계하세요

목표 실패는 게임의 일부입니다. 반면 생성 요청 실패는 구현상의 문제입니다. 두 상황에 서로 다른 결과를 부여하세요.

게임 실패의 경우 세션을 종료시킨 규칙을 명시하세요. 세 번 대기하면 남은 시간이 2단위뿐이므로 어떤 배달 경로도 이용할 수 없습니다. 플레이어를 승리할 수 없는 활성 세션에 방치하지 말고 명확한 설명 및 재시작 옵션과 함께 즉시 종료하세요.

구현 실패의 경우 복잡한 내레이션을 추가하기 전에 복구 동작부터 정의하세요:

읽을 수 없는 저장 데이터를 아무 알림 없이 새 게임으로 대체하지 마세요. 이는 잃어버린 진행 상황을 숨기고 다음 응답을 오해하게 만듭니다.

모든 행동에 대해 무슨 일이 일어났는지, 무엇이 바뀌었는지, 다음에 무엇을 할 수 있는지를 나타내는 평문 결과 메시지를 만드세요. 봇의 풍부한 내레이션은 이 결과와 함께 제공될 수 있습니다. 타임아웃이 발생하거나 모순된 응답이 나오더라도, 이 평문 메시지가 있으면 플레이어는 계속 진행할 수 있습니다.

정확한 요약으로 엔딩을 마무리하세요. 리본은 수집한 경우에만 언급하고 엽서는 정원 경로를 택했을 때만 언급해야 합니다. 생성된 문장은 플레이어가 세션 내내 고민하며 선택했던 차이점들을 그대로 보존해야 합니다.

상황 — 필수 동작
모호한 플레이어 요청 — 설명 요청; 상태 유지
이용 불가능한 행동 — 충족되지 않은 조건 설명; 상태 유지
유효하지 않은 AI 행동 제안 — 제안을 거부하고 유효한 행동 제공
행동 커밋 후 내레이션 실패 — 커밋된 상태를 기반으로 사전에 작성된 결과 표시
중복 제출 — 추가 차감 없이 기존 결과 반환
저장된 상태를 불러올 수 없음 — 문제를 알리고 복구 또는 명시적 재시작 제공
섹션 6

규칙을 먼저 플레이테스트한 뒤 봇의 해석 능력을 테스트하세요

먼저 고정된 텍스트로 게임을 테스트하세요. 각 행동, 엔딩, 경계 조건을 두루 다룹니다. 그런 다음 봇을 추가하고 다양한 문구를 사용하여 동일한 테스트를 반복하세요. 이렇게 하면 규칙 오류와 요청 오해 문제를 명확히 분리할 수 있습니다.

대표 플레이어를 초대하여 안내 없이 배달을 완료해 보도록 하세요. 선택하기 전에 무엇을 기대하는지, 선택한 후에 무엇이 바뀌었다고 생각하는지 설명해 달라고 요청하세요. Nielsen Norman Group의 생각 말하기(thinking-aloud) 사용성 테스트 가이드(https://www.nngroup.com/articles/thinking-aloud-the-1-usability-tool/)에서는 참가자가 직접 말을 하도록 하면서 대표 참가자와 대표 과제를 활용할 것을 권장하며, 진행자의 유도 질문이 참가자의 행동에 영향을 미칠 수 있음을 경고합니다.

행동 로그와 함께 관찰을 활용하세요. 시도한 행동, 명확화 요청, 예상치 못한 결과, 내레이션과 커밋된 상태 간의 불일치를 기록하세요. 선택지를 이해했는지 여부와 선택하는 과정이 즐거웠는지 여부를 분리하여 질문하세요.

간략한 플레이테스트 체크리스트. 세계관을 확장하기 전에 규칙과 상태 처리의 오류부터 수정하세요. 플레이어가 선택지를 이해하지만 흥미를 느끼지 못한다면 트레이드오프를 변경하세요. 결정을 내리는 것은 즐기지만 비용을 예측하지 못한다면 정보 제공 방식을 개선하세요. 다양한 표현, 저장된 세션, 실패 경로 전반에 걸쳐 기존 선택지가 일관되게 이해될 때 프로토타입을 확장하세요.

시작: 새로운 플레이어가 목표, 주어진 시간, 마무리 행동을 파악할 수 있는가?
루프: 수락된 모든 행동이 가시적인 결과와 유효한 다음 단계 또는 엔딩을 만들어내는가?
선택: 플레이어가 특정 경로나 장식 옵션을 선택한 이유를 설명할 수 있는가?
경계: 리본 수집 후 정원 배달을 했을 때 남은 시간이 정확히 0이 되면서 성공하는가?
유효성 검사: 모호하거나 중복되거나 불가능한 요청이 올바른 상태를 보존하는가?
기억: 저장 및 다시 불러오기 시 자원, 선택 사항, 이용 가능한 행동이 유지되는가?
실패: 배달이 불가능한 상황에서 명확하게 종료되며 재시작이 제공되는가?
복구: 내레이션 오류가 발생해도 추가 비용 차감 없이 플레이를 계속할 수 있는가?
일관성: 모든 엔딩이 커밋된 경로 및 리본 상태와 일치하는가?
관련 글

이 주제 더 살펴보기