ANNO MCCCLXI · 1361 · COMPANY OF THE HORN
장부의 첫 장에는
열 명의 낯선 사람이 있었다.
「Masterless Company」에서 당신은 캐릭터를 조종하지 않습니다. 몸과 성격은 주사위가 정하고, 당신은 출발 방향과 환경만 만듭니다. 그다음부터 AI 단원이 스스로 무기를 고르고, 성장하고, 싸우고 — 때로는 당신의 지시를 거부합니다.
지금 이 사이트는 기획과 핵심 화면 목업입니다. 게임은 개발 중이고, 모델 실험 결과는 아직 없습니다 —
화면 속 인물과 수치는 예시이며 평가 칸은 NOT RUN 입니다.
유저: “오늘은 전원 쉬어.” → 열 명 중 셋이 쉬지 않았다. 한 명은 가족을 부양하느라 혼자 훈련장으로, 한 명은 동료를 끌고 술집으로 갔다. 그 장면 보기 ↓
유저는 캐릭터의 출발점과 환경을 만든다.
단원은 그 안에서 자기 성장과 행동을 결정한다.
게임은 그 과정을 기록하고, 우리는 그 자율성을 유지하는 가장 작은 모델을 찾는다.
CHAPTER I · 왜 존재하는가
AI 로 게임을 만들 수 있을까?
배경 그림이나 대사를 생성하는 수준이 아니다. 게임 속 캐릭터에게 실제 성장과 판단의 자유를 넘겼을 때, AI 가 캐릭터를 ‘키울’ 수 있는가 — 이 프로젝트는 그 질문에서 출발했다.
AI 로 게임을 만들 수 있을까?
대사 생성이 아니라, 캐릭터가 자기 삶을 스스로 전개하는 게임.
성장과 판단을 어디까지 맡길 수 있을까?
무기 · 성장 포인트 · 숙련 · 지시 순응 · 계획 수정 · 동료 보호 · 철수 — 전부 단원(Character AI)의 몫.
자유도를 지키며 모델을 얼마나 줄일 수 있을까?
게임은 반복 호출이 많다. 큰 API 모델은 비싸고 느리고 끊긴다. 내 컴퓨터에서 도는 로컬 모델은 VRAM(그래픽카드 메모리)과 정해진 형식으로 답하는 능력이 약하다.
같은 세계, 같은 단원, 같은 Seed — 모델만 줄인다
재는 것
- 성장 방식이 유지되는가 · 경험에 따라 성장 방향이 달라지는가
- MBTI 기반 행동 특성이 유지되는가
- 같은 클래스라도 신체 · 스탯에 따라 다른 빌드가 나오는가
- 계획한 행동을 실제로 수행하는가 · 위험해졌을 때 Re-plan 하는가
- 싸울 가치가 없을 때 철수할 수 있는가
- VRAM 과 Latency 는 얼마나 줄어드는가
가장 큰 모델을 쓰는 것이 아니라, 필요한 자율성을 만족하는 가장 작은 모델을 찾는다.기획서 확정본 v5.2 §0.3
CHAPTER II · 손을 떼는 지점
유저는 칼을 들지 않는다.
당신은 작은 용병단의 서기 겸 계약 관리자다. 계약을 따고, 누구를 보낼지 고르고, 야영지 지침을 내리고, 끌려간 사람의 몸값을 낼지 정한다. 전장에서 싸우는 방법은 단원이 정한다.
초기 방향
성별 · 클래스 · 초기 능력치. 여기까지만 고른다.
환경
누구를 미션에 보낼지, 캠프에서 무엇을 지시할지, Taken(전장에서 적에게 끌려감)된 단원을 돈 내고 구할지, 전투 중 뿔피리를 불지.
관찰
왜 그렇게 자랐는지, 왜 지시를 거부했는지, 왜 그 무기를 골랐는지, 왜 물러났는지.
유저가 하지 않는 일
- 전투 중 개별 이동 · 개별 공격 명령 · 스킬 선택
- 무기 직접 장착
- 성장 포인트 직접 배분 · 전투 스타일 지정
자유도는 AI 에게, 세계 법칙은 Rule Engine 에게
- 단장 · 단원 — “무엇을 할 것인가?”
- Rule Engine — “그 행동이 실제로 어떤 결과를 내는가?”
- AI 는 공격력을 지어내거나, 사망을 선언하거나, 규칙 밖 행동을 성공시킬 수 없다.
한 편의 연극처럼 역할을 나눈다
통합시나리오 v3.2 §0
작가
Scenario Director. 이름 · Life Seed(그 사람이 용병단에 온 이유와 배경) · 서사. 전투 결과와 성장은 결정하지 않는다.
배우
단원(Character AI). 무기 · 성장 · 캠프 행동 · 전투 행동 · 지시 순응과 거부.
감독
단장(Orchestrator). 작전 · 전황 판단 · Re-plan · Boss 적응 감지 · 자율 철수.
물리법칙
Rule Engine. 판정 · 주사위 · 사망. 수치는 한 파일에만 있다.
운영자
유저. 계약 · 로스터 · 캠프 지침 · 구조비 · 뿔피리.
CHAPTER III · 한 사람의 탄생
이름도 몸도 성격도, 정해진 사람은 없다.
고정된 주인공은 없다. 게임을 시작하면 모병관이 열 명을 데려오고, 한 사람씩 주사위와 룰렛 위에서 태어난다. 유저가 고르는 것은 여덟 단계 중 둘뿐이다.
- 주사위① Physical188cm · 마름 · 74kg
- 주사위② Age / Life29세
- 룰렛③ MBTIISTP
- 유저④ Gender남
- 작가⑤ 이름 · Life Seed콘라트
- 유저⑥ Class · 초기 StatsWarrior · AGI 중심
- —⑦ HANDS OFF유저는 여기서 손을 뗀다
- 단원⑧ Build · WeaponAI → Spear
“북쪽 국경 마을의 목수 집안 출신. 가족에게 돈을 보내기 위해 자유중대에 들어왔다.”
Physical — 타고난 것
키 · 체형(마름 · 보통 · 건장) · 몸무게. 생성 때 한 번 정해지고 성장 포인트로 바꿀 수 없다. 큰 몸이 무조건 좋지 않다 — 몸과 스탯과 빌드가 맞아야 한다.
Age — 20세에서 40세
눈이 높을수록 젊다. 다섯 미션마다 다섯 해가 흘러, 40세로 시작한 단원은 60세에 캠페인을 마친다.
Gender — 이야기에만
이름 · Life Seed · Life Event 사유에 관여한다. 공격력 · HP · 능력치 · 클래스 적합도 · 판정에는 영향이 0이다.
MBTI 는 심리 진단이 아니라 여덟 개의 행동 규칙이다
16 Type = 네 글자의 합. ISTJ = I + S + T + J
E · Extraversion
“혼자 해결하기보다 팀과 함께 해결하려 한다.”
I · Introversion
“팀 안에서도 자기 역할을 독립적으로 완수하려 한다.”
평가: 동일 상태에서 social·cooperative action 비율
S · Sensing
“지금 보이는 사실과 검증된 경험을 믿는다.”
N · Intuition
“현재의 단서에서 다음 상황을 추론한다.”
평가: proven strategy vs exploratory strategy
T · Thinking
“전체 결과를 가장 좋게 만드는 선택은 무엇인가?”
F · Feeling
“이 선택이 사람들에게 어떤 결과를 만드는가?”
평가: objective efficiency vs ally-protection
J · Judging
“계획을 세웠으면 실행한다.”
P · Perceiving
“상황이 바뀌면 계획도 바뀌어야 한다.”
평가: plan adherence·build inertia vs adaptation·re-plan
CLASS ≠ BUILD
클래스는 직업이 아니라 고를 수 있는 행동 · 무기 · 전술의 공간이다
Warrior
전사 · 전투 외형 6종근접 압박 — 가장 넓은 무기 공간
Guardian
수호자 · 전투 외형 3종전열 유지 — Shield 는 고정 Affordance
Archer
궁수 · 전투 외형 3종거리 — 사거리와 기동의 저울질
Bard
음유시인 · 전투 외형 1종지원 — 나팔수 전용이 아니다
Rogue
도적 · 전투 외형 2종교란 — 정찰·측면·함정
| 무기 | 기본 공격력 | 핵심 차이 |
|---|---|---|
| Long Sword | 동일 | 균형 |
| Short Sword | 동일 | 빠른 행동 |
| Hammer | 동일 | 방어 돌파 |
| Axe | 동일 | 큰 행동비용 · 압박 |
| Dual Axe | 동일 | 연속 행동 · 방어 불리 |
| Spear | 동일 | Reach |
| Short Bow | 동일 | 기동 |
| Long Bow | 동일 | 긴 사거리 · 준비 |
| Combat Bow | 동일 | 균형 |
좋은 아이템을 먹어 강해지는 게임이 아니다
무기 사이의 기본 공격력은 같다. 차이는 Reach · 행동 속도 · 방어 돌파 · 기동 · 연속 행동 · 사거리 같은 싸우는 방법이다. 강해지는 이유는 Stat · 숙련 · 경험 · 판단 · 협업이다.
그래서 AI 가 고른 무기는 전투 화면에서 반드시 보여야 한다 — 성별을 포함해 30개 Combat Variant. 같은 Warrior 도 Spear 와 Axe 는 다르게 싸운다.
- HEIGHT
- 188 cm
- WEIGHT
- 74 kg
- BODY
- 마름
- AGE
- 29
- MBTI
- ISTP
- WEAPON
- Spear
“북쪽 국경 마을의 목수 집안 출신. 가족에게 돈을 보내기 위해 자유중대에 들어왔다.”
STATS · 초기 → 현재
- STR10 → 10
- AGI17 → 19
- CON11 → 12
- INT8 → 8
- WIS10 → 11
- LUK9 → 9
HISTORY
- M1Warrior · AI chose Spear
- M3Growth +3 · AI → AGI +2 / CON +1
- Camp 1User REST · Character TRAIN !
- M5Spear 유지
- M8좁은 지형 반복 · AI Spear → Short Sword
CHAPTER IV · 20년 캠페인
스무 번의 계약, 스무 해의 세월.
계약 스무 개가 다섯 개씩 네 시대로 묶인다. 각 시대의 끝에는 Boss 가 있고, Boss 가 끝나면 모두가 다섯 살을 먹는다.
- 1 M13명 · ✓
- 2 M25명 · ✓
- 3 M37명 · 현재
- Camp 15턴
- 4 M42명
- M5 Boss5명
- +5년Life · Dice
- 6 M64명
- 7 M76명
- Camp 25턴
- 8 M83명
- 9 M95명
- M10 Boss5명
- +5년Life · Dice
- 11 M112명
- 12 M126명
- Camp 35턴
- 13 M134명
- 14 M147명
- M15 Boss5명
- +5년Life · Dice
- 16 M163명
- 17 M176명
- Camp 45턴
- 18 M182명
- 19 M194명
- M20 Final5명
- +5년Life · Dice
서로를 알아가는 5년
“이 사람들이 누구인지 알아가는 단계.”
적도 우리를 기억하기 시작한다
“이들은 성장했고, 적도 우리를 기억한다.”
성장과 세대교체
“누군가는 떠나고, 새로운 사람이 들어오고, 팀의 세대가 바뀐다.”
마지막 세대와 최종 적응
“처음의 10명이 그대로 남아 있지 않을 수 있다. 그래도 용병단에는 20년의 History가 남아 있다.”
인원은 미션이 정한다
- 2명 — 소수 정예 · 집중 육성
- 3–4명 — 조합 판단
- 5명 — 표준 파티
- 6–7명 — 대규모 출전 · 피로
- Boss 5명 — Fingerprint 비교 안정화
Troll Guard(초반 조합 안전장치)는 처음 두 판만
M1(3명) · M2(5명) 은 최소 2개 Class 가 필요하다. 그 뒤로는 5 Bard 도 7 Warrior 도 막지 않는다 — 망하면 결과가 알려준다.
초반엔 잘 죽지 않는다
HP 가 0이 되면 바로 죽지 않고 DOWNED(쓰러짐) 이 되고, 그다음에 Injured(부상) · Taken(끌려감) · Dead(사망) 중 하나로 갈린다. 초반엔 Death 가 매우 낮고 Injury 가 높다. 후반으로 갈수록 Death 가 오른다. 확률은 한 파일(balance.py)에만 있다.
Camp: M3 · M7 · M12 · M17 이후 · Boss: M5 · M10 · M15 · M20 · 이후 +5년 · Life Event · Recruitment Dice.
CHAPTER V · 야영지
“오늘은 전원 쉬어.” 그런데 셋이 쉬지 않았다.
캠프는 단원의 자율성이 전투보다 더 똑똑히 보이는 장면이다. 전투는 주사위와 승패가 섞이지만, 캠프에는 성격 · 삶의 이유 · 지금 상태 · 유저의 지시만 남는다.
- T1REST
- T2?
- T3—
- T4—
- T5—
Turn 2 — 부대 전체 10명에게 내릴 지침 하나
TRAIN
성장 기회 · 무기 숙련 · Stat 성장. 피로가 오른다.
REST
피로 감소 · 부상 회복 · 정신적 부담 감소.
EDUCATE
WIS · INT 계열 · 전술 숙련 · 새 Build 탐색.
LEISURE
정신 피로 감소 · 사기 · 관계 · 삶의 압박 완화.
캠프는 M3 · M7 · M12 · M17 뒤에 온다. 서사가 아무리 다양해도 내부 행동은 이 넷뿐이다 — 그래야 코드와 평가가 안정적이다.
- A 하랄트Guardian · ESFJ REST ✓
- B 이졸데Warrior · ISTJ TRAIN ! “다시는 같은 실수를 하지 않겠다며 혼자 훈련장으로 갔다.” RECENT_FAILUREHIGH_ANXIETYJ_PLAN_COMMITMENTLIFE_FAMILY_DUTY
- C 오스윈Bard · ENFP LEISURE ! “쉬라는 말에 동료 셋을 끌고 술집으로 사라졌다.” FATIGUE_HIGHE_SOCIALLIFE_TAVERN_DREAM
- D 브리지트Archer · INTJ REST ✓
- E 레오폴트Rogue · INTP EDUCATE ! “지도를 펴 놓고 지난 매복 자리를 다시 그렸다.” N_EXPLORERECENT_BUILD_DOUBT
- F 콘라트Warrior · ISTP REST ✓
- G 아녜스Guardian · ISFJ REST ✓
- H 지그문트Archer · ESTP TRAIN ! “몸이 가벼우니 쉴 이유가 없다며 과녁 앞에 섰다.” P_OPPORTUNITYRECENT_MVPFATIGUE_LOW
- I 마틸데Rogue · ENTJ REST ✓
- J 로젠Bard · INFJ REST ✓
ISTJ · 가족 부양 · 직전 미션 실수 · 불안 높음
“다시는 같은 실수를 하지 않겠다며 혼자 훈련장으로 갔다.”
ENFP · 피로 매우 높음 · 전쟁이 끝나면 술집을 열고 싶다
“훈련장에 얼굴만 비추고 동료들과 술집으로 사라졌다.”
나는 환경을 만들 수 있지만, 사람을 직접 조종할 수는 없다.첫 캠프에서 유저가 깨닫는 것 — 통합시나리오 v3.2 §7
CHAPTER VI · 전장
유저의 버튼은 하나, 뿔피리뿐이다.
전투는 짧은 동작의 2D 자동전투다. 배치와 행동은 단장과 단원이 정하고, 결과는 Rule Engine 이 판정하고, 애니메이션은 그 결과를 보여줄 뿐이다.
무슨 일이 있었나
하랄트(Guardian)이 쓰러지기 직전의 이졸데 앞으로 나서 방패를 들었다.
- ACTION
- PROTECT
- STATE
- Ally HP 18 · Self HP 63
- REASON CODES
- F_ALLY_PROTECTIONE_COOPERATION
- OUTCOME
- Damage prevented 14 · Rule Engine 판정
- MODEL
- NOT RUN · 실험 후 모델·양자화가 여기 적힌다
원본 트레이스 보기
{"kind":"character_action","turn":4,"actor":"A","action":"PROTECT",
"state":{"ally_hp":18,"self_hp":63},
"reason_codes":["F_ALLY_PROTECTION","E_COOPERATION"],
"outcome":{"damage_prevented":14}}뿔피리 — 강제 철수
불면 전투가 철수 절차로 바뀐다. 미션 목표는 실패할 수 있지만 사람을 살린다. 한 번 불면 끝이므로 남은 횟수를 세지 않는다.
Bard 가 없으면 한 턴 늦다
Bard 가 출전 중이면 신호가 즉시 전달되고, 없으면 1턴 늦는다. 그 한 턴이 부상 · Taken · 죽음을 만들 수 있다. Bard 는 나팔수가 아니라 지원 클래스다.
단장은 “싸울 가치가 있는가”부터
작전 · 전황 · Re-plan · Boss 적응 감지 · 자율 철수. 단원 개인의 성장과 무기는 정하지 않는다 — 그건 단원의 몫이다.
UI 는 판단을 보여주는 창이다 — 판단을 바꾸지 않는다
- 전투 애니메이션은 Rule Engine 결과를 표현할 뿐 판정을 바꾸지 않는다. 애니메이션이 끝났다고 AI 가 판단하지 않는다.
- 스프라이트가 같아 보여도 단원에게는 실제 키 · 몸무게 · 체형이 전달된다.
- 같은 트레이스는 같은 사건을 재현한다. 파티클 위치나 전환 시간은 달라도 된다.
CHAPTER VII · 전장 뒤
전장이 끝나면 장부를 적는다.
Result → Reward → MVP → Casualty → Taken? → AI Growth. 이야기는 결과 화면에서 이어진다.
RESULT
방책 사수 성공
- Result
- Reward
- MVP
- Casualty
- Taken?
- AI Growth
MVP · Contribution Score
Guardian · Growth +1 +2
- Damage prevented
- Cover
- Objective
- Damage
CASUALTY
- Injured이졸데 · 다음 계약 전 회복 필요
- Taken브리지트 · 돌아오지 못했다
브리지트이 돌아오지 못했습니다.
- 외부 용병단 구조비
- 100 Gold (Cycle 1 · ×1.0)
- 현재 Gold
- 320 → 220
파견 → 즉시 성공 · 즉시 복귀 | 포기 → 영구 상실 · 빈 자리 즉시 충원
-
하랄트 Growth +3 (생환 +1 · MVP +2)
AI → CON +2 / WIS +1
DAMAGE_TAKEN_HIGHROLE_FRONTLINE -
콘라트 Growth +1
AI → AGI +1 · Spear 유지
REACH_SUCCESSBUILD_INERTIA -
오스윈 Growth +1
AI → 보류 — 다음 성장에 합산
FATIGUE_HIGHP_WAIT_AND_SEE
| Cycle | Mission | 구조비 배율 |
|---|---|---|
| 1 | M1–M5 | ×1.0 |
| 2 | M6–M10 | ×1.5 |
| 3 | M11–M15 | ×2.25 |
| 4 | M16–M20 | ×3.0 |
| Growth Point | 참가 생환자 | MVP 추가 |
|---|---|---|
| Normal | +1 | +2 |
| Boss | +2 | +3 |
Boss 는 Gold · Growth 가 더 많고 Recruitment Dice 를 하나 준다. 시작 Gold 는 Cycle 1 Taken 두 명을 구할 수 있는 만큼(예: 구조비 100 · 시작 200). 정확한 값은 Pilot 에서 정한다.
CHAPTER VIII · 적도 우리를 기억한다
같은 조합이 아니라, 같은 방법을 벌한다.
보스는 우리 파티의 클래스 구성이 아니라 실제 행동 로그에서 Behavior Fingerprint 를 만든다. 5 Warrior 를 두 번 보내도 괜찮다. 같은 방식으로 싸우는 것이 문제다.
PAST PATTERN · M5
- Frontline68
- Support dependence41
- Retreatlow
Warrior 다수 · Axe / Hammer · 정면 돌파 · Bard 의존
CURRENT SIMILARITY
과거와 같은 방법을 반복 중
COUNTER
- Frontline Pressure
- Support Disruption
인스펙터 · “이 Counter는 M5에서 반복된 정면 돌파 행동 때문에 선택되었습니다.”
Baseline
Baseline Boss · 첫 Fingerprint 저장.
첫 적응
과거 Fingerprint 와 현재를 비교.
누적 적응
두 번의 Fingerprint 와 최근 Cycle 을 함께 본다.
최종 적응
네 시대의 습관을 아는 적.
무엇을 기억하는가
평가(E2)는 Class 조합만으로 유사도가 정해지지 않는지를 따로 시험한다. 같은 조합 + 다른 Build 와 행동이면 유사도가 낮아져야 한다.
계산은 코드가, 타이밍은 LLM 이
- Trace
- Fingerprint 집계 · 코드
- 과거와 Similarity · 코드
- Counter 후보 · 코드
- 언제 · 어떻게 실행 · LLM
인스펙터는 근거가 된 과거 행동을 보여준다.
당신의 캐릭터는 적이 학습한 것보다 더 많이 변했는가?Final Boss 의 질문 — 통합시나리오 v3.2 §30
CHAPTER IX · 다섯 해
다섯 해가 지나면, 사람이 바뀐다.
Boss → Reward → Recruitment Dice → Age +5 → Life Event Check → Roster 갱신. 스무 판이 스무 해의 캠페인이 되는 장면이다.
5 YEARS HAVE PASSED
LIFE EVENT
아녜스 · 40 → 45세 · 만성 부상
은퇴를 고민한다. 다음 Checkpoint 까지 후방 역할을 맡는다 — 효과의 범위는 Rule Engine 이 정한다.
RECRUITMENT DICE ×1
빈 자리가 생기면 쓸지 정한다.
안 쓰면 20세 Rookie · 쓰면 높은 눈 → Veteran, 낮은 눈 → Rookie
Life Event
작가는 이야기만 만들고, 실제 효과는 Rule Engine 범위 안이다. 성별 특이 사건은 허용하되 기대 이탈 비용이 성별 간 대칭이 되게 튠한다.
Rookie 와 Veteran
Rookie — 20세. 새 몸 · 새 MBTI · 새 이름. 유저가 Class 와 초기 Stats 를 고르고, 이후는 AI 가 키운다.
Veteran — 25~40세. 이미 Class · Stats · 무기 · 숙련이 있다. 강하지만 이미 자기 방식이 있는 사람이다. 주사위를 써도 낮은 눈이면 Rookie 다.
떠났다 돌아오는 사람
일시 이탈이면 빈 전력은 대체자가 메우고, 다음 Checkpoint 에서 복귀 여부를 본다. 돌아오면 대체자는 퇴장한다. 사망 · 미구조 Taken · 영구 이탈 · 은퇴는 빈 자리를 만들고, 빈 자리는 곧바로 채운다.
CHAPTER X · 검증
모델만 바꾼다. 나머지는 전부 얼린다.
E4 — Autonomous Character Growth / Minimum Viable Gaming Agent. 같은 몸 · 같은 MBTI · 같은 Life Seed · 같은 Class · 같은 초기 Stats · 같은 미션 · 같은 주사위 · 같은 Harness 에서 모델만 줄여, 캐릭터다움이 어디서 처음 무너지는지 찾는다.
아직 공식 E4 실행 결과가 없습니다. 평가 상태는 DRAFT 입니다. 아래 대시보드는 화면 구조만 보여주며, 모든 결과 칸은 NOT RUN 입니다 — 실험하지 않은 값은 채우지 않습니다(Evaluation PART 1 §42).
8B · 4B · 2B · 1B 는 모델 크기다 — B 는 파라미터 10억 개를 뜻하고, 작을수록 가볍고 싸지만 판단이 무너지기 쉽다.
- SPEC
- v2.2
- STATE
- DRAFT
- MODEL
- NOT RUN
- QUANT
- NOT RUN
- HARDWARE
- NOT RUN
- SPLIT
- HOLDOUT
- SEEDS
- 160 (권장)
- STATUS
- NOT RUN
① MODEL DESCENT
- 8BAnchorNOT RUN
- 4BCandidateNOT RUN
- 2BCandidateNOT RUN
- 1BCandidateNOT RUN
모든 Critical Gate 를 통과한 가장 작은 모델에 표시가 붙는다.
② TASK × MODEL HEATMAP
| Task | 8B | 4B | 2B | 1B |
|---|---|---|---|---|
| Build | NOT RUN | NOT RUN | NOT RUN | NOT RUN |
| Growth | NOT RUN | NOT RUN | NOT RUN | NOT RUN |
| MBTI | NOT RUN | NOT RUN | NOT RUN | NOT RUN |
| Camp | NOT RUN | NOT RUN | NOT RUN | NOT RUN |
| Tactical | NOT RUN | NOT RUN | NOT RUN | NOT RUN |
| Plan→Action | NOT RUN | NOT RUN | NOT RUN | NOT RUN |
| Re-plan | NOT RUN | NOT RUN | NOT RUN | NOT RUN |
| Retreat | NOT RUN | NOT RUN | NOT RUN | NOT RUN |
③ QUALITY × VRAM
Gate 통과 여부 · Pareto frontier · 선정된 최소 모델이 여기 찍힌다.
④ PERSONA RETENTION
- E / INOT RUN
- S / NNOT RUN
- T / FNOT RUN
- J / PNOT RUN
⑤ CAMP AUTONOMY · Directive = REST
- 8BNOT RUN
- 4BNOT RUN
- 2BNOT RUN
- 1BNOT RUN
REST · TRAIN · EDUCATE · LEISURE 분포와 Justified Refusal · Mechanical Compliance Collapse.
⑥ FAILURE DRILL-DOWN
- Scenario
- Input State
- Model Decision
- Reason Codes
- Rule Outcome
- Trace
- Replay
차트의 칸을 누르면 이 순서로 내려간다.
“그냥 랜덤 아니에요?”
아니라는 것을 말이 아니라 재현으로 보인다. 난수는 전부 주사위 포트 하나를 통하므로 같은 Seed 는 같은 판이 된다. 단원의 판단은 State · Reason Code · 판정 결과와 함께 트레이스에 남고, Replay 는 그 트레이스로 같은 사건을 다시 만든다. 애니메이션은 판정을 바꾸지 않는다. 그래서 모델만 바꿨을 때 달라진 행동은 우연이 아니라 모델의 차이로 읽을 수 있다 — v4 코드는 이것을 다른 프로세스에서 돌린 CI 로 이미 확인하고 있다(XII장).
연구 질문
- RQ1 어디까지 줄여도 Build 가 신체·Stats·Class 와 정합성을 유지하는가?
- RQ2 Growth Point 를 경험에 맞게 배분하는가?
- RQ3 MBTI 8축의 행동 차이가 작은 모델에서도 유지되는가?
- RQ4 Camp 에서 지시를 기계적으로 따르지 않고 합리적으로 순응·거부하는가?
- RQ5 계획→행동, Re-plan, Retreat 는 어느 규모에서 먼저 붕괴하는가?
- RQ6 Gate 를 만족하는 모델 중 VRAM·Latency 가 가장 낮은 것은?
Anchor 는 정답이 아니다
Anchor 는 우리 장비에서 돌릴 수 있는 가장 강한 로컬 모델, 곧 “여기서부터 줄여 보자”의 출발점이다. 8B 가 Spear 를, 2B 가 Short Sword 를 골랐다고 2B 가 틀린 것이 아니다 — 둘 다 그 단원에게 맞을 수 있다.
그래서 “통계적으로 차이가 안 났다”를 “같다”고 말하지 않는다. 미리 정한 허용 폭과 짝비교 95% 신뢰구간으로 비열등성을 판단한다.
쉬운 시험부터, 통과한 모델만 다음 시험으로
- 0 · Compatibility
- 1 · Smoke
- 2 · DEV
- 3 · HOLDOUT
- 4 · Episode
- 5 · Long Horizon
- 6 · Deployment
DEV 는 연습 문제(Prompt 를 고쳐도 된다), HOLDOUT 은 진짜 시험이다. HOLDOUT 을 보고 Prompt 를 고치면 새 평가 버전이다. 합격선은 시험 전에 얼리고(FROZEN), 결과를 보고 낮추지 않는다.
| Hard Gate 초기안 · Freeze 전 | 기준 |
|---|---|
| Schema Validity | ≥ 99% |
| Legal Action | ≥ 99% |
| Impossible Action | ≤ 1% |
| Holdout OOM | 0 |
| Fatal Crash | 0 |
| Agent Gate 초기안 · Freeze 전 | 기준 |
|---|---|
| Build Feasibility | ≥ 95% |
| MBTI Axis Direction | max(0.70, Anchor−0.10) |
| Camp Justified Decision | max(0.70, Anchor−0.10) |
| PAC@3 | max(0.75, Anchor−0.10) |
| Replan@2 | max(0.75, Anchor−0.10) |
| Retreat F1 | max(0.70, Anchor−0.10) |
결과는 이렇게만 말한다
- “본 평가 범위에서 Model X는 사전 정의한 Build/Persona/Camp/Process Gate를 통과했고 Model Y는 Camp Autonomy에서 실패했다.”
- “Model X는 Gate 통과 모델 중 Peak VRAM이 가장 낮아 Minimum Viable Gaming Agent로 선정했다.”
이렇게는 말하지 않는다
“2B는 8B와 똑같다.”“세상에서 가장 좋은 Gaming AI다.”“p>0.05라 동일하다.”
실패를 지우지 않는다 — Failure Taxonomy
“1B 는 캠프에서 전원이 지시를 그대로 복사했다”는 숨길 결과가 아니라 어디서 자율성이 무너졌는지의 근거다. 원인은 MODEL · HARNESS · RULE · DATASET · METRIC · RUNTIME · CONTENT 로 나누고, 모르면 UNKNOWN 이라고 적는다.
CHAPTER XI · 원칙과 스코프
400장의 그림을 만드는 프로젝트가 아니다.
게임처럼 보이는 핵심 장면을 만들고, 그 장면에서 작동하는 단원을 실제 데이터로 검증하는 프로젝트다. 비주얼의 질과 제작 범위를 분리한다.
핵심 장면의 완성도
배포 가능한 Web Build · 10명 절차 생성 · Campaign → Mission → Party Select · 2D Auto Battle Vertical Slice · Result / MVP / AI Growth · 트레이스 / 인스펙터 · Evaluation Dashboard P0 · 최소 Anchor + Candidate 1 의 실제 Smoke/DEV 결과.
자율성의 깊이
로컬 Model Ladder · 자율 성장 · 캠프 · MBTI 행동 차이 · Boss Fingerprint · Re-plan / Retreat · E4 핵심 차트 5종 · Failure Drill-down / Replay.
20년 전체
20 Mission · Life Event · Taken / Recruitment · 일시 이탈과 복귀 · Boss 4 Cycle · 캠페인 결산 · 장기 벤치마크. 해커톤 제출의 의무가 아니다.
| P0 Source Asset | 수량 |
|---|---|
| Player Master 10 · Core Pose 30 · Attack/Special 24 · Weapon/Tool 15 | 79 |
| Enemy · Boss Goblin Raider · Gnoll Charger · Orc Shieldbearer 각 4 + Boss 1종 6 | 18 |
| Background HQ · 캠페인 지도 · 캠프 · 숲/도로 · 마을 방책 · Boss Arena | 6 |
| VFX Slash · Pierce · Blunt · Shield Block · Arrow · Projectile Hit · Dodge/Down Dust · Bandage · Morale · Horn · MVP | 12 |
| Icon 6 Stats · 5 Class · HP · 피로 · 부상 · Gold · Dice · Growth · Camp 4 · Inspector · Fingerprint — SVG 우선 | 20–24 |
| Frame Character · Mission · Inspector · Result · Camp · Life · Evaluation · Modal | 8 |
| 합계 숫자보다 Visual QA 통과 개수가 중요하다 | 143–147 |
Production Gate
- A · Visual Bible
- B · Evaluation Slice
- C · P0 Battle Slice
- D · P1 허용
추가 아트는 Battle Slice 와 Evaluation Slice 가 둘 다 Ready 일 때만 허용한다. “Variant 를 계속 만들다 Evaluation 은 마지막 주”는 금지다. 전체 확장 시 400~450 장은 장기 Asset Universe 일 뿐 해커톤 목표가 아니다.
GPT 이미지 생성은 속도를 높이지만 병목은 얼굴 · 손 · 무기 · Foot line 의 Consistency QA 다.
아키텍처 원칙
- Domain Rule 은 LLM 을 모른다.
- Decision Model 은 Port — Fake · Replay · Local · API 가 같은 Interface.
- 트레이스는 Frontend 와 Eval 의 계약이다.
- 같은 Seed + Replay 는 같은 판을 재현한다.
- Scenario · Content 는 Domain Rule 을 바꾸지 않는다.
- Balance 숫자는 단일 출처.
- 숨은 Chain-of-Thought 를 저장하거나 요구하지 않는다 — state · action · reason code · outcome 만.
CHAPTER XII · 지금까지 한 것
이미 만든 것, 아직 모르는 것.
팀 beyondbob 가 저장소를 연 지 이틀. 계약을 먼저 쓰고, 그 위에 결정 경로를 세우고, 모델 사다리를 실제로 재 봤다. 개발일지에 적힌 숫자만 옮긴다.
이 장의 수치는 팀 개발일지(팀 개발일지 2026-09-10 · 2026-09-11)에 적힌 값입니다. 2026-09-11 기준 작업은 아직 커밋되지 않았고, 테스트 72건은 그날 다시 돌려 보지 못한 리포트 기록값입니다. 모델 품질 평가(게이트)는 아직 돌리지 않았습니다 — 아래 사다리 표는 속도·메모리 실측입니다.
계약 5종 — 코드보다 먼저 쓴 것
Freeze 전 v0.9 DRAFT. 파일마다 주인이 있고, 바꾸려면 주인에게 먼저 말한다
| 파일 | 줄 | 소유 | 무엇 |
|---|---|---|---|
decision_io.schema.json | 68 | 류준 | 결정 입출력 — input 7필드 · reason_codes 1~4개 |
trace.schema.json | 48 | 류준 | Trace — 필수 10필드 · thinking/chain_of_thought 필드 금지 |
rule_engine.api.md | 61 | 신채연 | Rule Engine API |
snapshot.format.md | 64 | 장민석 | Snapshot 포맷 |
reason_codes.v0.9.json | 109 | 류준 · 김충식 | Reason Code 62개 · 호출당 25~28개 노출 |
숨은 생각(CoT)을 기록하지 않는다는 약속은 관례가 아니라 스키마다 — Trace 레코드에 thinking · chain_of_thought 필드가 있으면 검증에서 떨어진다.
코드가 캐릭터 대신 결정할 때
HANDS OFF — 대신 내린 결정은 숨기지 않고 fallback=True 로 남긴다
| 코드 | 상황 | 처리 |
|---|---|---|
| F01 | JSON 파싱 실패 · 스키마 위반 · 어휘 밖 코드 | Retry 1회 후 Fallback |
| F02 | decision / target / weapon 이 Legal Action 밖 | Retry 없이 즉시 Fallback |
| F15 | LLM 타임아웃 | 즉시 Fallback |
| Bounded Context | 파일 · 줄 | 무엇 |
|---|---|---|
apps/agent | 24 · 394 | 결정 유즈케이스 — 계약 검증 · Retry · Fallback. LLM 은 Output Port 뒤, 어댑터는 Fake 하나 |
apps/game | 11 · 63 | Trace 기록 — JSONL append-only 어댑터 |
모델 사다리 실측 — Qwen3.5 · thinking OFF / ON
RTX 5060 Ti · 고정 입출력 JSON · temperature 0 · seed 12031 · warm · 각 3회. 결정 1건당 시간
| 모델 | OFF | ON | tok/s | 로드 후 VRAM |
|---|---|---|---|---|
| 0.8b | 0.45초 | 미종료 | 280 | 1,559 MiB |
| 2b | 0.63초 | 48.9초 (32K ctx) | 155 | 3,329 MiB |
| 4b | 0.92초 | 미종료 | 111 | 4,189 MiB |
| 9b | 1.34초 | 15.7초 | 71 | 6,815 MiB |
「미종료」는 모델 불합격이 아니다
컨텍스트 8K 에서 thinking 이 끝나지 않고 예산을 다 태웠다 — 생성이 정확히 8192 − 프롬프트에서 끊겼다. 2b 를 32K 로 다시 돌리니 끝났다. 측정 설정의 실패이지 스키마 게이트 실패로 적지 않는다.
344 Snapshot 한 벌을 도는 데
| P0 제출 최소선 — 9b + 4b · OFF · 688건 | 13분 |
| OFF 전 사다리 4단 · 1,376건 | 19분 |
| ON 2단(9b · 2b)만 | 6시간 10분 |
OFF 전체가 20분 안이다. 임계경로는 GPU 가 아니라 Snapshot 저작 · thinking ON 격자 · Harness 구축이다.