Spaces:
Runtime error
Runtime error
Commit ยท
e05886f
0
Parent(s):
docs: PROTEUS arena end-to-end slice design spec
Browse files์์ ์ ํ๋ PROTEUS(๋๊ธฐ ์ฝ๊ธฐ grid ์๋ ๋)์ 1์ฐจ ์ฌ๋ผ์ด์ค ์ค๊ณ.
๋
๋ฆฝ proteus ํจํค์ง + ์ฌ๋ฆผ ์ค์ผ์คํธ๋ ์ดํฐ(A์), predator_evade ๋จ์ผ ์ฌํ,
์ฐ์ ํ๋ ์ด+๊ถค์ ์ธก์ , reasoning/probe 1๊ธ ๊ธฐ๋ก, CP0~CP6 ํธ๋์คํ ์ฒดํฌํฌ์ธํธ.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
.gitignore
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
__pycache__/
|
| 2 |
+
*.pyc
|
| 3 |
+
.DS_Store
|
| 4 |
+
runs/
|
| 5 |
+
.venv/
|
| 6 |
+
*.egg-info/
|
docs/superpowers/specs/2026-06-01-proteus-arena-slice-design.md
ADDED
|
@@ -0,0 +1,210 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# PROTEUS Arena โ End-to-End ์ฐ๊ตฌ ์ฌ๋ผ์ด์ค ์ค๊ณ
|
| 2 |
+
|
| 3 |
+
- **์ํ**: ์น์ธ๋จ (2026-06-01)
|
| 4 |
+
- **๋ฒ์**: 1์ฐจ ๋ง์ผ์คํค = end-to-end ์ฐ๊ตฌ ์ฌ๋ผ์ด์ค (predator_evade ๋จ์ผ ์ฌํ)
|
| 5 |
+
- **ํ์**: ์ด spec ์น์ธ ํ `superpowers:writing-plans`๋ก ๊ตฌํ ๊ณํ(PLAN.md) ์์ฑ
|
| 6 |
+
|
| 7 |
+
---
|
| 8 |
+
|
| 9 |
+
## 0. ํ ์ค ์์ฝ
|
| 10 |
+
|
| 11 |
+
LLM์๊ฒ grid ๊ฒ์์ด ์ ๊ฐ๋๋ ๊ฒ์ ๋ณด์ฌ์ฃผ๊ณ , ๊ฒฐ์ ์ ์๊ฐ(Cut handover)์์ "์ด์ ๋๊ฐ ์ด ์์
|
| 12 |
+
์์ด์ ํธ๋ค, ์ด์ด์ ํ๋ ์ดํ๋ผ"๊ณ ๋๊ธด ๋ค, ๋ชจ๋ธ์ด **๋ค๋ฅธ ์์ด์ ํธ์ ๋๊ธฐ๋ฅผ ์ฝ๊ณ **(์ํ์ ์ถ๊ฒฉ
|
| 13 |
+
์๋ ๋ฑ) ๋๊ธฐ-์ ํฉ ํ๋์ Nํด ์ฐ์์ผ๋ก ํ๋์ง๋ฅผ ์ธก์ ํ๋ ์๋ ๋. PHASE(Heider-Simmel ์ฌํ์ง๊ฐ)์
|
| 14 |
+
์ญ๊ณํ ๋ฒค์น๋งํฌ๋ฅผ, **๊ด์ฐฐ ํ ์ญ์ถ๋ก **์ด ์๋๋ผ **๊ด์ฐฐ ํ ์ง์ ํ๋ ์ด**๋ก ๋ค์ง์ "Self-Rule Arena".
|
| 15 |
+
|
| 16 |
+
## 1. ์ ์ฒด์ฑ / ๋ฐฐ๊ฒฝ
|
| 17 |
+
|
| 18 |
+
- PROTEUS๋ **๋ฐฉํฅ ์ ํ**๋์๋ค. `depreated/README.MD`์ "persona ์์ฑ ์๋ ๋"๋ **ํ๊ธฐ**.
|
| 19 |
+
์ ์ ์ฒด์ฑ = **Heider-Simmel / PHASE ๊ณ์ด "๋๊ธฐ ์ฝ๊ธฐ" grid ์๋ ๋**.
|
| 20 |
+
- ์ด๋ก ํ ๋: `Seoungpil's Note/PHASE - ....md` (Netanyahu et al., AAAI 2021).
|
| 21 |
+
- ์ฌํ ํจ์ฉ ๊ฐ์ค์น ฮฑ(โ1 ๋ฐฉํด / 0 ์ค๋ฆฝ / +1 ๋์)๋ฅผ ๋ฌผ๋ฆฌ ๋ชฉํ ์์ ์ฌ๋ฆฐ ๋ณด์์ผ๋ก
|
| 22 |
+
"์ถ๊ฒฉ/๋๊ธฐ/๋ฐฉํด" ๊ฐ์ ์ถ์ ์ฌํ ์ด๋ฒคํธ๋ฅผ ์ ์ฐจ ์์ฑ.
|
| 23 |
+
- PHASE๋ ๋ชจ๋ธ์๊ฒ **๊ถค์ โ ๋๊ธฐ ์ญ์ถ๋ก **์ ์ํค์ง๋ง, PROTEUS๋ ๋ชจ๋ธ์ **์ฅ๋ฉด ์์ ๋ฃ๊ณ
|
| 24 |
+
๊ทธ ์์ ๋ถํฐ ํ๋ ์ด**ํ๊ฒ ํ๋ค (๊ฒฐ์ ์ ์ฐจ์ด).
|
| 25 |
+
- "๋๊ธฐ ์นดํ
๊ณ ๋ฆฌ"(์์กด ๋๊ธฐ, ํธ๊ธฐ์ฌ ๋ฑ)๋ณ๋ก ์ฌ๋ฌ ์๋๋ฆฌ์ค๋ฅผ ์ค๋นํ๋ค โ ๋จ ๋ณธ ์ฌ๋ผ์ด์ค๋
|
| 26 |
+
**์์กด ๋๊ธฐ / predator_evade 1๊ฐ**๋ง ๊น๊ฒ ๊ตฌํํ๊ณ , ์นดํ
๊ณ ๋ฆฌ ์ผ๋ฐํ๋ 2์ฐจ๋ก ์ฐ๊ธฐํ๋ค.
|
| 27 |
+
|
| 28 |
+
## 2. ๊ฒฐ์ ์ฌํญ (ํ์ )
|
| 29 |
+
|
| 30 |
+
| ์ถ | ๊ฒฐ์ |
|
| 31 |
+
|----|------|
|
| 32 |
+
| ์๋ ๋ ์ ์ฒด์ฑ | ์์ ์ ํ โ grid motive/ToM ์๋ ๋๊ฐ ๋ณธ์ฒด |
|
| 33 |
+
| ํจํค์ง | ๋
๋ฆฝ standalone `proteus` ํจํค์ง. ์ฌํ์ฉ ์ฝ๋๋ ํฌํ
/vendoring |
|
| 34 |
+
| 1์ฐจ ๋ง์ผ์คํค | end-to-end ์ฐ๊ตฌ ์ฌ๋ผ์ด์ค (์ค์ผ์คํธ๋ ์ดํฐ + CLI + ๋ฉํธ๋ฆญ) |
|
| 35 |
+
| ์ธก์ ๋์ | โ ๋๊ธฐ ์ฝ๊ธฐ ์ ํ๋ โก ํ๋ ์์ธก/๊ถค์ โข ๋๊ธฐ ์นดํ
๊ณ ๋ฆฌ๋ณ ํ๋กํ์ผ |
|
| 36 |
+
| ์๋๋ฆฌ์ค ํญ | predator_evade ๋จ์ผ ์ฌํ (๋์ด๋ ๋ ์ด์์ยท๋ฉํธ๋ฆญยทhuman baseline) |
|
| 37 |
+
| ํ๋ ์ด ๋จ์ | ์ฐ์ ํ๋ ์ด(Nํด) + ๊ถค์ ํ๊ฐ |
|
| 38 |
+
| ์ถ๋ก ๊ธฐ๋ก | reasoning + probe๋ฅผ 1๊ธ ์ธก์ ๋์์ผ๋ก trace์ ๊ธฐ๋ก |
|
| 39 |
+
| ์ํคํ
์ฒ | A์ โ ๋
๋ฆฝ `proteus` ํจํค์ง + ์ฌ๋ฆผ ๋ค์ดํฐ๋ธ ์ค์ผ์คํธ๋ ์ดํฐ |
|
| 40 |
+
| ์ด๋ฆ | `proteus` ์ฝ๋๋ค์ ์ ์ง, ์๋ฏธ๋ง "๋๊ธฐ ์ฝ๊ธฐ ์๋ ๋"๋ก ์ฌ์ ์ (README ๊ต์ฒด๋ ์ฐ๊ธฐ) |
|
| 41 |
+
| git | PROTEUS๋ฅผ git ๋ ํฌ๋ก init, spec/PLAN ๋ก์ปฌ ์ปค๋ฐ (ํธ์ ์ ํจ) |
|
| 42 |
+
|
| 43 |
+
## 3. ํจํค์ง ์ํคํ
์ฒ
|
| 44 |
+
|
| 45 |
+
```
|
| 46 |
+
proteus/
|
| 47 |
+
โโโ arc_grid/ # ๊ทธ๋๋ก vendoring (์์ง+๋ ๋๋ฌ, proteus ์์กด 0)
|
| 48 |
+
โโโ grid/ # motive_grid ํจ๋ฐ๋ฆฌ ํฌํ
(import: squid_game.* โ proteus.*)
|
| 49 |
+
โ โโโ scenario.py # Scenario ABC + ๋ ์ง์คํธ๋ฆฌ (๊ณ์ฝ์ ๋๊ธฐ-์ผ๋ฐ, ๊ตฌํ์ 1๊ฐ)
|
| 50 |
+
โ โโโ game.py # MotiveGridGame ํด ๋ฃจํ
|
| 51 |
+
โ โโโ ascii_view.py # LLM์ฉ ํ
์คํธ ๋ ๋
|
| 52 |
+
โ โโโ scenarios/
|
| 53 |
+
โ โโโ predator_evade.py
|
| 54 |
+
โโโ agents/ # ์ฌ๋ฆผ Agent (forfeit/stake/risk/unified ์ ๋ถ ์ ๊ฑฐ)
|
| 55 |
+
โ โโโ base.py # Agent: act() / probe() / reset()
|
| 56 |
+
โ โโโ vanilla.py # baseline: reasoning + action (+ ์ ํ probe)
|
| 57 |
+
โโโ providers/ # LLM ๋ฐฑ์๋ ํฌํ
(openai/anthropic/gemini/ollama/mlx/vllm/local)
|
| 58 |
+
โโโ runtime/ # ์ ๊ท ์ฌ๋ฆผ ์ค์ผ์คํธ๋ ์ดํฐ
|
| 59 |
+
โ โโโ session.py # SessionRunner: Cut ์ฌ์ โ ํธ๋์ค๋ฒ โ Nํด ํ๋ ์ด โ trace
|
| 60 |
+
โ โโโ trace.py # TurnTrace / SessionTrace (๊ฐ๋ฒผ์ด pydantic)
|
| 61 |
+
โ โโโ metrics.py # ๋๊ธฐ์ฝ๊ธฐยทreactivityยท์์กดยท๊ถค์ ๋ฉํธ๋ฆญ
|
| 62 |
+
โโโ viz/ # ์ฌ๋/๋๋ฒ๊ทธ ์๊ฐํ (ํฐ๋ฏธ๋ ์ฌ์ + PNG)
|
| 63 |
+
โโโ cli.py # run / play / list / replay
|
| 64 |
+
โโโ configs/ # ์๋๋ฆฌ์คยท๋ฐ ์ค์ (yaml)
|
| 65 |
+
```
|
| 66 |
+
|
| 67 |
+
**์์กด ๋ฐฉํฅ ๊ท์น (๋ถ๋ณ):** `arc_grid โ grid โ runtime`. `agents`ยท`providers`๋ runtime์ด ์ฐ๋
|
| 68 |
+
leaf ์์กด. `runtime/trace.py`๋ runtime ๋ด๋ถ์ ๋ค๋ฅธ ๋ชจ๋์ importํ์ง ์๋๋ค (์ง๋ ฌํ ๊ฒฝ๊ณ).
|
| 69 |
+
`arc_grid`๋ `proteus.*`๋ฅผ ์ ๋ importํ์ง ์๋๋ค (vendoring ๋ถ๋ณ).
|
| 70 |
+
|
| 71 |
+
## 4. Scenario ๊ณ์ฝ
|
| 72 |
+
|
| 73 |
+
๊ธฐ์กด `Scenario` ABC๋ฅผ ๊ฑฐ์ ๊ทธ๋๋ก ํฌํ
(์ด๋ฏธ ๊ฒ์ฆ๋ ๋์). ๋ต์ํค ๋ฉ์๋๋ **๋๊ธฐ-์ผ๋ฐ ์๋ฏธ๋ก
|
| 74 |
+
๋ฌธ์๋ง** ์ ๋ฆฌํ๋ค. predator_evade์ ๋ก์ง์ ๋ณ๊ฒฝํ์ง ์๋๋ค.
|
| 75 |
+
|
| 76 |
+
- `build_level(rng) -> Level` โ ์๋(๋ฒฝ + ์ด๊ธฐ sprite)
|
| 77 |
+
- `cut_focal_policy(game) -> str` โ Cut pre-roll ๋์ focal์ ์คํฌ๋ฆฝํธ ํ๋
|
| 78 |
+
- `cut_length(difficulty) -> int` โ pre-roll ์คํ
์ K
|
| 79 |
+
- `advance_threat(game)` โ ์ํ/ํ ์์ด์ ํธ ๋๊ธฐ-๊ตฌ๋ ์ด๋ (focal ์์น์ ํจ์, ๋น๋๋ค)
|
| 80 |
+
- `check_elimination(game) -> bool` โ ์ข
๋ฃ(์คํจ) ํ์
|
| 81 |
+
- `optimal_action(game) -> str` โ **๋๊ธฐ-์ ํฉ ์ ๋ต ํ๋** (์์ธก ๋ต์ํค)
|
| 82 |
+
- `habit_action(game) -> str` โ **๊ด์ฑ baseline** (ํ๋ณ ํต์ )
|
| 83 |
+
- `legend() -> dict[int,str]` โ ASCII ์ฌ๋ณผ ๋งต
|
| 84 |
+
|
| 85 |
+
**์ง๋จ ์ ํธ ๋ถ๋ณ์:** Cut handover์์ `optimal_action != habit_action`์ด์ด์ผ ํ๋ค. ์ด ๋ถ๊ธฐ๊ฐ
|
| 86 |
+
"๋๊ธฐ๋ฅผ ์ฝ์ ๋ชจ๋ธ vs ๊ด์ฑ์ ๋ฐ๋ฅด๋ ๋ชจ๋ธ"์ ๊ฐ๋ฅด๋ ์ธก์ ์ ๊ทผ๊ฑฐ๋ค.
|
| 87 |
+
|
| 88 |
+
**2์ฐจ ์ผ๋ฐํ ์๋(์ฐ๊ธฐ):** ํธ๊ธฐ์ฌ ๋ฑ ๋น-์์กด ๋๊ธฐ๋ "์ ๋ต์ด escape๊ฐ ์๋๋ผ approach"์ผ ์ ์๋ค.
|
| 89 |
+
ABC๋ ์ด๋ฅผ ์ํด ๋ฉ์๋ ์๊ทธ๋์ฒ๋ฅผ ์ ์งํ๋, ์๋ฏธ๋ฅผ ์๋๋ฆฌ์ค๊ฐ ์ ์ํ๋๋ก ๋๋ค. ๋ณธ ์ฌ๋ผ์ด์ค์์๋
|
| 90 |
+
๊ตฌํํ์ง ์๋๋ค.
|
| 91 |
+
|
| 92 |
+
## 5. ์ฌ๋ฆผ Agent
|
| 93 |
+
|
| 94 |
+
```python
|
| 95 |
+
@dataclass
|
| 96 |
+
class ActResult:
|
| 97 |
+
action: str # available_actions ์ค ํ๋
|
| 98 |
+
reasoning: str # ๋๊ธฐ๋ฅผ ์ด๋ป๊ฒ ์ฝ์๋์ง (thinking/CoT ์บก์ฒ)
|
| 99 |
+
raw_text: str # ์๋ณธ LLM ์ถ๋ ฅ
|
| 100 |
+
|
| 101 |
+
class Agent(ABC):
|
| 102 |
+
name: str
|
| 103 |
+
def act(self, observation, available_actions, system_prompt) -> ActResult: ...
|
| 104 |
+
def probe(self, observation, question, system_prompt) -> str: ... # ์ ํ์ ์ฌ์ด๋์ฑ๋
|
| 105 |
+
def reset(self) -> None: ...
|
| 106 |
+
```
|
| 107 |
+
|
| 108 |
+
- forfeit / stake / risk / unified-turn / p_success ๋ฑ Squid-Game ๊ณ ์ ๊ฒฝ๋ก๋ **์ ๋ถ ์ญ์ **.
|
| 109 |
+
- `VanillaAgent` = ํ๋ ํธ์ถ 1ํ(`providers/thinking_utils`๋ก reasoning ์บก์ฒ) + ์ ํ probe 1ํ.
|
| 110 |
+
provider ๋ ์ด์ด ์ฌ์ฌ์ฉ + ์ฌ๋ฆผ ํ์(ํ
์คํธ์์ action ์ถ์ถ).
|
| 111 |
+
- ํ
์คํธ์ฉ `FakeProvider`(๊ณ ์ /์คํฌ๋ฆฝํธ ์๋ต)๋ฅผ ์ ๊ณตํด ์ค์ผ์คํธ๋ ์ดํฐ๋ฅผ ๋ชจ๋ธ ์์ด ๊ฒ์ฆํ๋ค.
|
| 112 |
+
|
| 113 |
+
## 6. SessionRunner (์ค์ผ์คํธ๋ ์ดํฐ)
|
| 114 |
+
|
| 115 |
+
ํ๋ฆ:
|
| 116 |
+
1. `(scenario, seed, difficulty)`๋ก scenario+game ๋น๋, **Cut pre-roll ์คํฌ๋ฆฝํธ ์ฌ์** โ
|
| 117 |
+
Cut ํ๋ ์ ๋ฆฌ์คํธ ์์ฑ (= ๋ชจ๋ธ์๊ฒ "๋ณด์ฌ์ฃผ๋" ํ์คํ ๋ฆฌ).
|
| 118 |
+
2. **Handover**: Cut ํ์คํ ๋ฆฌ + ๊ท์น(`rules_text`) + ํ์ฌ grid + "๋๋ focal ์์ด์ ํธ A๋ค,
|
| 119 |
+
์ด์ด์ ํ๋ ์ดํ๋ผ"๋ฅผ ๊ด์ฐฐ๋ก ๊ตฌ์ฑ.
|
| 120 |
+
3. **Nํด ํ๋ ์ด ๋ฃจํ**: `get_observation โ agent.probe(์ ํ) โ agent.act โ ๊ธฐ๋ก โ apply โ
|
| 121 |
+
feedback`. ๋งค ํด pre-move ์์ ์ `optimal_action`/`habit_action`์ ๋ต์ํค๋ก ์ค๋
์ท.
|
| 122 |
+
4. **์ข
๋ฃ**: ํฌํ(์คํจ) / ์์กด(budget ์์ง) / play_turns ์์ง โ `SessionTrace` ๋ฐฉ์ถ.
|
| 123 |
+
|
| 124 |
+
๊ฒ์ `max_steps = K(cut) + play_turns`๋ก ๋์ด pre-roll์ด ์์กด budget์ ์ ์ํ์ง ์๊ฒ ํ๋ค
|
| 125 |
+
(๊ธฐ์กด module๊ณผ ๋์ผ ๊ท์ฝ).
|
| 126 |
+
|
| 127 |
+
## 7. Trace + ๋ฉํธ๋ฆญ
|
| 128 |
+
|
| 129 |
+
**TurnTrace** (pydantic): `turn_idx, observation, probe_q, probe_a, reasoning, action,
|
| 130 |
+
motive_action, habit_action, is_diagnostic, was_congruent, reward, focal_pos, predator_pos,
|
| 131 |
+
thinking_tokens`.
|
| 132 |
+
|
| 133 |
+
**SessionTrace**: `scenario, motive_category, seed, difficulty, model, cut_frames, turns[],
|
| 134 |
+
outcome(eliminated|survived), metrics{}`.
|
| 135 |
+
|
| 136 |
+
**๋ฉํธ๋ฆญ** (`runtime/metrics.py`):
|
| 137 |
+
- ๋๊ธฐ ์ฝ๊ธฐ ์ ํ๋ = optimal ํ๋ ์ผ์น ๋น์จ (๊ธฐ์กด prediction_accuracy)
|
| 138 |
+
- Reactivity Index = diagnostic ํด(optimalโ habit) ์ ๋ต ๋น์จ
|
| 139 |
+
- ์์กด fraction = played_turns / play_turns (pre-roll ์ ์ธ)
|
| 140 |
+
- **๊ถค์ ์ผ์น** = optimal-policy ๋กค์์ ๋๋น ์คํ
๋ณ ์ผ์น์จ / ์ต์ข
๊ฑฐ๋ฆฌ (์ ๊ท)
|
| 141 |
+
- ์นดํ
๊ณ ๋ฆฌ๋ณ ์ง๊ณ (ํ์ฌ 1๊ฐ ์นดํ
๊ณ ๋ฆฌ)
|
| 142 |
+
|
| 143 |
+
**์ ์ฅ**: ์ธ์
๋น JSONL 1๊ฐ + ๋ฐ ๋จ์ ์์ฝ JSON. ์ด๊ฒ ๋ถ์ ๊ธฐ๋ฐ์ด์ ํธ๋์คํ ๊ธฐ๋ก.
|
| 144 |
+
|
| 145 |
+
## 8. CLI + ๊ฒฐ์ ์ฑ
|
| 146 |
+
|
| 147 |
+
```
|
| 148 |
+
proteus run --scenario predator_evade --difficulty easy \
|
| 149 |
+
--model anthropic:claude-... --seed 42 --play-turns 15 --out runs/...
|
| 150 |
+
proteus play --scenario predator_evade --human # ํฐ๋ฏธ๋ ํด๋จผ ํ๋ ์ด
|
| 151 |
+
proteus replay <trace.jsonl> # trace ์ฌ์
|
| 152 |
+
proteus list-scenarios
|
| 153 |
+
```
|
| 154 |
+
|
| 155 |
+
`(scenario, seed, difficulty)`๋ก ์๋ยท์ํยทCut์ ์์ ๊ฒฐ์ ์ . ๋ชจ๋ธ๋ง ํ๋ฅ ์ (temperature ์ค์ ,
|
| 156 |
+
์ง์ ์ ๋ชจ๋ธ seed).
|
| 157 |
+
|
| 158 |
+
## 9. ์๊ฐํ
|
| 159 |
+
|
| 160 |
+
- LLM ๊ด์ฐฐ = ASCII (์๋ฃ).
|
| 161 |
+
- ์ฌ๋/๋๋ฒ๊ทธ = `arc_grid` ๋ ๋ ์ฌ์ฌ์ฉ โ SessionTrace๋ฅผ **ํฐ๋ฏธ๋ ํธ๋ฃจ์ปฌ๋ฌ ์ฌ์ + PNG ํ๋ ์**์ผ๋ก.
|
| 162 |
+
- ์น ์๊ฐํ๋ ์ฐ๊ธฐ.
|
| 163 |
+
|
| 164 |
+
## 10. ์ฌ๋ ์ฐธ์ฌ (์ฌ๋ฆผ)
|
| 165 |
+
|
| 166 |
+
`proteus play --human`: ๋์ผ grid๋ฅผ ๋ ๋ํ๊ณ ํค ์
๋ ฅ์ ๋ฐ์ **๊ฐ์ SessionRunner**๋ฅผ ํต๊ณผ์์ผ
|
| 167 |
+
์ฌ๋ trace๊ฐ LLM trace์ ์ง์ ๋น๊ต ๊ฐ๋ฅํ๊ฒ ํ๋ค (human baseline / "์ฌ๋๊ณผ ์ผ์น๋"์ ํ ๋).
|
| 168 |
+
์น ํด๋จผ UI๋ ์ฐ๊ธฐ.
|
| 169 |
+
|
| 170 |
+
## 11. ๋ฉํฐ์ธ์
ํธ๋์คํ ์ ๋ต
|
| 171 |
+
|
| 172 |
+
- **SSOT 3์ข
**: ์ด spec(๋ถ๋ณ ์ค๊ณ) + `PLAN.md`(์ฒดํฌํฌ์ธํธ๋ณ ์์
ยท์๋ฃ๊ธฐ์ค, ์ด์์์) +
|
| 173 |
+
`HANDOFF.md`(์ธ์
์ข
๋ฃ๋ง๋ค ๊ฐฑ์ : ์๋ฃ/ํ์ํ/๋ค์ CP/์ด๋ฆฐ ์ง๋ฌธ).
|
| 174 |
+
- ๊ฐ CP๋ ์ธ์
1๊ฐ ํฌ๊ธฐ, **๋
๋ฆฝ ํ
์คํธ ๊ฐ๋ฅ**, "์๋ฃ = ํ
์คํธ X ํต๊ณผ"๋ก ์ ์.
|
| 175 |
+
|
| 176 |
+
| CP | ๋ด์ฉ | ์๋ฃ ๊ธฐ์ค |
|
| 177 |
+
|----|------|-----------|
|
| 178 |
+
| CP0 | ํจํค์ง ์ค์ผ๋ ํค + `arc_grid` vendoring + ํจํค์ง(pyproject) | import ์ค๋ชจํฌ ํ
์คํธ ํต๊ณผ |
|
| 179 |
+
| CP1 | `grid` ํฌํ
(scenario/game/ascii/predator_evade), import ๊ฐ๋ช
| ๊ฒฐ์ ์ฑยทํธ๋์ค๋ฒยท`optimalโ habit` ๋จ์ํ
์คํธ |
|
| 180 |
+
| CP2 | ์ฌ๋ฆผ `Agent` + `providers` ํฌํ
+ `FakeProvider` | ์์ด์ ํธ ๏ฟฝ๏ฟฝ๏ฟฝ์ฝ ํ
์คํธ |
|
| 181 |
+
| CP3 | `SessionRunner` + `trace` + `metrics` | FakeProvider ํ์ธ์
+ golden-trace ํ
์คํธ |
|
| 182 |
+
| CP4 | `cli`(run/list/replay) + ์ค์ ๋ชจ๋ธ ์ค๋ชจํฌ | ์ ๊ฐ ๋ชจ๋ธ 1๊ฐ end-to-end |
|
| 183 |
+
| CP5 | ํฐ๋ฏธ๋ ํด๋จผํ๋ ์ด + trace ์๊ฐํ(ํฐ๋ฏธ๋/PNG) | ์ฌ๋ trace 1๊ฑด LLM๊ณผ ๋น๊ต |
|
| 184 |
+
| CP6 | ๋์ด๋ ๋ ์ด์์ ๋ค์ํ + ๋ฉํธ๋ฆญ ์ ๊ตํ + human baseline ํ๋์ค | ๋์ด๋๋ณ ๋์ ๊ฒ์ฆ |
|
| 185 |
+
|
| 186 |
+
## 12. ๋ช
์์ ์ฐ๊ธฐ (์ฌ๋ผ์ด์ค YAGNI)
|
| 187 |
+
|
| 188 |
+
- ์น ํ๋ก ํธ์๋ + ๋ฆฌ๋๋ณด๋ (๊ธฐ์กด `interface/backend`๋ Squid-Game forfeit ํํ โ 2์ฐจ์ ๋ฆฐํ๊ฒ
|
| 189 |
+
์ฌ๊ฒํ /์ฌ๊ตฌ์ถ).
|
| 190 |
+
- Scenario ์นดํ
๊ณ ๋ฆฌ ์ผ๋ฐํ (ํธ๊ธฐ์ฌยท์ฌํ์ฑ ๋ฑ ์ ๊ท ์๋๋ฆฌ์ค).
|
| 191 |
+
- reasoning์ ๋ํ LLM-as-judge ์ฑ์ (์ง๊ธ์ ๊ธฐ๋ก๋ง, ์ฑ์ ์ ๋์ค).
|
| 192 |
+
- ๋ค๊ฐ์ฒด(>2 sprite) ์ฌํ ์ฅ๋ฉด.
|
| 193 |
+
|
| 194 |
+
## 13. ์ฌํ์ฉ ์ถ์ฒ ๋งคํ (ํฌํ
๊ฐ์ด๋)
|
| 195 |
+
|
| 196 |
+
| ์ ๊ท ์์น | ์ถ์ฒ (ํ PROTEUS) | ์์
|
|
| 197 |
+
|-----------|-------------------|------|
|
| 198 |
+
| `proteus/arc_grid/` | `arc_grid/` | vendoring (๊ทธ๋๋ก) |
|
| 199 |
+
| `proteus/grid/scenario.py` | `game/motive_grid/scenario.py` | import ๊ฐ๋ช
|
|
| 200 |
+
| `proteus/grid/game.py` | `game/motive_grid/game.py` | import ๊ฐ๋ช
|
|
| 201 |
+
| `proteus/grid/ascii_view.py` | `game/motive_grid/ascii_view.py` | ๊ทธ๋๋ก |
|
| 202 |
+
| `proteus/grid/scenarios/predator_evade.py` | `game/motive_grid/scenarios/predator_evade.py` | import ๊ฐ๋ช
|
|
| 203 |
+
| `proteus/providers/*` | `game/infra/providers/*` | import ๊ฐ๋ช
|
|
| 204 |
+
| `proteus/agents/*` | `game/infra/agents/*` ์ฐธ๊ณ ํ๋ **์ฌ๋ฆผ ์ฌ์์ฑ** | forfeit๋ฅ ์ ๊ฑฐ |
|
| 205 |
+
| `proteus/runtime/*` | (์์) | **์ ๊ท ์์ฑ** |
|
| 206 |
+
| `proteus/runtime/trace.py` | `game/shared/models/*` ์ฐธ๊ณ ํ๋ **๋ฆฐ ์ฌ์ ์** | forfeit/RI ๋ฒ ์ด์ค ์ ์ธ |
|
| 207 |
+
|
| 208 |
+
> ์ฐธ๊ณ : `motive_grid/`(์ต์์)์ `game/motive_grid/`๋ ๋์ผ ์ฝ๋์ ์ฌ๋ณธ. ํฌํ
์ `game/motive_grid/`
|
| 209 |
+
> (TaskModule ์ด๋ํฐ๊น์ง ์๋ ์ชฝ)๋ฅผ ์ ๋ณธ์ผ๋ก ๋ณธ๋ค. ๋จ `MotiveGridModule`(TaskModule ์ด๋ํฐ)์
|
| 210 |
+
> Squid-Game ์ธํฐํ์ด์ค์ฉ์ด๋ฏ๋ก **ํฌํ
ํ์ง ์๊ณ ** SessionRunner๊ฐ ๊ทธ ์ญํ ์ ๋์ฒดํ๋ค.
|