Spaces:
Sleeping
Sleeping
| # PROTEUS ๋ช ๋ น์ด ์ฌ์ฉ๋ฒ (ํ๊ตญ์ด) | |
| LLM์ด ๋ค๋ฅธ ์์ด์ ํธ์ **๋๊ธฐ๋ฅผ ์ฝ๋์ง**๋ฅผ ์ธก์ ํ๋ ๊ทธ๋ฆฌ๋ ์๋ ๋, PROTEUS์ ๋ช ๋ น์ด ์๋ด์์ ๋๋ค. | |
| ์ฒ์ ์ฐ์๋ ๋ถ๋ ๋ฐ๋ผ์ฌ ์ ์๊ฒ ์์๋๋ก ์ ๋ฆฌํ์ต๋๋ค. ๋ชจ๋ ๋ช ๋ น์ `proteus` CLI๋ก ์คํํฉ๋๋ค. | |
| > **ํ ์ค ์์ฝ**: ๊ฒ์์ LLM์ด๋ ์ฌ๋์ด ํ๋ ์ด โ ๊ทธ ๊ธฐ๋ก(trace)์ JSONL๋ก ์ ์ฅ โ ํ ์คํธยทํธ๋ฃจ์ปฌ๋ฌยทPNGยทGIF๋ก ๋ค์ ๋ณด๊ธฐ โ ์ฌ๋ฌ ๊ธฐ๋ก์ ๋ชจ์ ๋น๊ต. | |
| --- | |
| ## 0. ์ฌ์ ์ค๋น โ ๊ฐ์ํ๊ฒฝ(.venv) | |
| ์ด ํ๋ก์ ํธ๋ `python`์ด PATH์ ์๊ณ , ์ ์ฅ์ ์์ **`.venv`** ๋ฅผ ์ง์ ๊ฐ๋ฆฌ์ผ ์คํํฉ๋๋ค. | |
| ๋ชจ๋ ๋ช ๋ น์ `python` ๋์ **`.venv/bin/python`** ์ผ๋ก ์์ํฉ๋๋ค. | |
| ```bash | |
| # ์์ ๋๋ ํฐ๋ฆฌ์์ | |
| .venv/bin/python -m proteus --help | |
| ``` | |
| `.venv`๊ฐ ์๋ค๋ฉด(์ ๋จธ์ ๋ฑ) ์ด๋ ๊ฒ ๋ค์ ๋ง๋ญ๋๋ค: | |
| ```bash | |
| uv venv --python 3.12 .venv | |
| uv pip install --python .venv/bin/python \ | |
| "pydantic>=2" "numpy>=1.26" "pyyaml>=6" "pytest>=8" "matplotlib>=3.8" | |
| ``` | |
| > ์ฐธ๊ณ : LLM provider SDK(openai/anthropic ๋ฑ)๋ **์ผ๋ถ๋ฌ `.venv`์ ์ค์นํ์ง ์์ต๋๋ค**(์คํ๋ผ์ธ ๋ถ๋ณ). | |
| > ์ค์ ๋ชจ๋ธ์ ๋๋ฆด ๋๋ง ๋ณ๋ ์์ venv๋ฅผ ์๋๋ค(๋งจ ์๋ "์ค์ ๋ชจ๋ธ๋ก ์คํ" ์ฐธ๊ณ ). | |
| --- | |
| ## 1. ์๋๋ฆฌ์ค ๋ชฉ๋ก ๋ณด๊ธฐ โ `list-scenarios` | |
| ๋ฑ๋ก๋ ์๋๋ฆฌ์ค ์ด๋ฆ์ ์ถ๋ ฅํฉ๋๋ค. | |
| ```bash | |
| .venv/bin/python -m proteus list-scenarios | |
| ``` | |
| ํ์ฌ๋ `predator_evade`(ํฌ์์ ํํผ = ์์กด ๋๊ธฐ) ํ๋์ ๋๋ค. | |
| --- | |
| ## 2. ์ฌ๋์ด ์ง์ ํ๋ ์ด โ `play` | |
| ๊ฐ์ ๊ฒ์์ **์ฌ๋์ด ํค๋ณด๋๋ก** ํ๋ ์ดํฉ๋๋ค. LLM๊ณผ **์์ ํ ๋์ผํ ํ๋ฉด(ASCII)** ์ ๋ณด๋ฉฐ ๋๋ฏ๋ก, | |
| ์ฌ๋ ๊ธฐ๋ก๊ณผ LLM ๊ธฐ๋ก์ ๊ณต์ ํ๊ฒ ๋น๊ตํ ์ ์์ต๋๋ค. | |
| ```bash | |
| .venv/bin/python -m proteus play \ | |
| --scenario predator_evade \ | |
| --difficulty easy \ | |
| --seed 42 \ | |
| --play-turns 10 \ | |
| --out runs/me.jsonl | |
| ``` | |
| - ๋งค ํด `up` / `down` / `left` / `right` / `stay` ์ค ํ๋๋ฅผ ์ ๋ ฅํฉ๋๋ค. (`w/a/s/d` ๋จ์ถํค๋ ๋จ, ๋์๋ฌธ์ยท๊ณต๋ฐฑ ๋ฌด์) | |
| - `up`์ ํ(row)์ ์ค์ด๊ณ , `down`์ ๋๋ฆฝ๋๋ค. `left/right`๋ ์ด(column)์ ๋ฐ๋ผ ์ด๋ํฉ๋๋ค. | |
| - ์๋ชป ์ ๋ ฅํ๋ฉด ๋ค์ ๋ฌผ์ด๋ด ๋๋ค. | |
| **์ฃผ์ ์ต์ ** | |
| | ์ต์ | ์ค๋ช | ๊ธฐ๋ณธ๊ฐ | | |
| |------|------|--------| | |
| | `--scenario` | ์๋๋ฆฌ์ค ์ด๋ฆ | `predator_evade` | | |
| | `--difficulty` | ๋์ด๋: `easy` / `medium` / `hard` / `expert` | `easy` | | |
| | `--seed` | ์๋๋ฅผ ๊ณ ์ ํ๋ ์๋(๊ฐ์ ์๋ = ๊ฐ์ ๋งต) | ์์ | | |
| | `--play-turns` | ํ๋ ์ดํ ํด ์(์์กด ์์ฐ) | `15` | | |
| | `--probe` | ํด๋ง๋ค ์ดํด๋ ์ง๋ฌธ(probe)๋ ๋ฐ๊ธฐ | ๊บผ์ง | | |
| | `--out` | ๊ธฐ๋ก์ ์ ์ฅํ JSONL ๊ฒฝ๋ก(์๋ต ๊ฐ๋ฅ) | ์ ์ฅ ์ ํจ | | |
| > **ํ**: ํ์ดํ๋ก ์ ๋ ฅ์ ๋ฏธ๋ฆฌ ๋ฃ์ด ์๋ ํ๋ ์ด๋ ๋ฉ๋๋ค. | |
| > `printf 'up\nup\nleft\n' | .venv/bin/python -m proteus play --scenario predator_evade --seed 42 --play-turns 3 --out runs/me.jsonl` | |
| --- | |
| ## 3. LLM์ด ํ๋ ์ด โ `run` | |
| ์ง์ ํ ๋ชจ๋ธ์ด ๊ฒ์์ ํ๋ ์ดํ๊ณ ๊ธฐ๋ก์ ๋จ๊น๋๋ค. `--out`์ **ํ์**์ ๋๋ค. | |
| ```bash | |
| # ์คํ๋ผ์ธ ์ค๋ชจํฌ(๊ฐ์ง ๋ชจ๋ธ) โ ๋คํธ์ํฌ ๋ถํ์ | |
| .venv/bin/python -m proteus run \ | |
| --scenario predator_evade \ | |
| --model fake:demo \ | |
| --difficulty easy \ | |
| --seed 42 \ | |
| --play-turns 10 \ | |
| --out runs/llm.jsonl | |
| ``` | |
| - `--model`์ `์ด๋ฆ:๋ชจ๋ธ` ํ์์ ๋๋ค. **`fake:<์๋ฌด์ด๋ฆ>`** ์ ์คํ๋ผ์ธ ๊ฐ์ง ๋ชจ๋ธ(ํ ์คํธยท๋ฐ๋ชจ์ฉ). | |
| - ์ค์ ๋ชจ๋ธ(openai/anthropic/gemini/ollama ๋ฑ)์ ๋งจ ์๋ ์ ์ ์ฐธ๊ณ ํ์ธ์. | |
| - ๋๋๋ฉด ๊ฒฐ๊ณผ ์์ฝ(์์กด/ํฌํ, motive_reading_accuracy, reactivity_index)์ ์ถ๋ ฅํฉ๋๋ค. | |
| **์ฃผ์ ์ต์ **(`play`์ ๊ฑฐ์ ๋์ผ) | |
| | ์ต์ | ์ค๋ช | ๊ธฐ๋ณธ๊ฐ | | |
| |------|------|--------| | |
| | `--model` | provider ์คํ `์ด๋ฆ:๋ชจ๋ธ` **(ํ์)** | โ | | |
| | `--no-probe` | ํด๋ง๋ค probe ์ง๋ฌธ์ **๋๊ธฐ** | probe ์ผ์ง | | |
| | `--out` | ๊ธฐ๋ก JSONL ๊ฒฝ๋ก **(ํ์)** | โ | | |
| > `run`์ probe๊ฐ **๊ธฐ๋ณธ ์ผ์ง**, `play`๋ **๊ธฐ๋ณธ ๊บผ์ง**์ ๋๋ค(์ฌ๋์๊ฒ ๋งค ํด ์ง๋ฌธ์ด ๋ฒ๊ฑฐ๋ก์ฐ๋ฏ๋ก). | |
| --- | |
| ## 4. ๊ธฐ๋ก ๋ค์ ๋ณด๊ธฐ โ `replay` | |
| ์ ์ฅํ trace(JSONL)๋ฅผ ์ฌ๋ฌ ๋ฐฉ์์ผ๋ก ๋ค์ ๋ด ๋๋ค. | |
| ### 4-1. ํ ์คํธ(๊ธฐ๋ณธ) | |
| ํด๋ณ ํ๋ vs ๋๊ธฐ(motive)/์ต๊ด(habit), ์ ๋ต ์ฌ๋ถ, ๋ณด์, ๊ทธ๋ฆฌ๊ณ ๋ฉํธ๋ฆญ์ ์ถ๋ ฅํฉ๋๋ค. | |
| ```bash | |
| .venv/bin/python -m proteus replay runs/me.jsonl | |
| ``` | |
| ### 4-2. ํธ๋ฃจ์ปฌ๋ฌ ํฐ๋ฏธ๋ ์ฌ์ โ `--visual` | |
| ๊ทธ๋ฆฌ๋๋ฅผ 24๋นํธ ์ปฌ๋ฌ ๋ธ๋ก์ผ๋ก ๊ทธ๋ฆฌ๊ณ , ์์ ํ๋/๋๊ธฐ/์ต๊ด/๋ณด์/ํ ํฐ/์ถ๋ก ํจ๋์ ๋ณด์ฌ์ค๋๋ค. | |
| ```bash | |
| .venv/bin/python -m proteus replay runs/me.jsonl --visual --fps 0 | |
| ``` | |
| - `--fps 0` : ํ๋ ์๋ง๋ค ๋ฉ์ถค(์ํฐ๋ก ์งํ) | |
| - `--fps 2` : ์ด๋น 2ํ๋ ์ ์๋ ์ฌ์ (๊ธฐ๋ณธ๊ฐ์ 4) | |
| ### 4-3. PNG ํ๋ ์์ผ๋ก ์ ์ฅ โ `--png DIR` | |
| ํ๋ ์๋ณ `frame_000.png`, `frame_001.png` โฆ ๋ฅผ ํด๋์ ์๋๋ค. | |
| ```bash | |
| .venv/bin/python -m proteus replay runs/me.jsonl --png runs/me_frames | |
| ``` | |
| --- | |
| ## 5. PNG โ GIF๋ก ํฉ์น๊ธฐ | |
| CLI์ GIF ์ถ๋ ฅ์ ์์ง๋ง, `--png`๋ก ๋ฝ์ ํ๋ ์์ Pillow(์ด๋ฏธ `.venv`์ ์์)๋ก ํฉ์น๋ฉด ๋ฉ๋๋ค. | |
| ```bash | |
| # 1) ํ๋ ์ ์์ฑ | |
| .venv/bin/python -m proteus replay runs/me.jsonl --png runs/me_frames | |
| # 2) GIF๋ก ํฉ์น๊ธฐ | |
| .venv/bin/python - <<'PY' | |
| from pathlib import Path | |
| from PIL import Image | |
| frames = sorted(Path("runs/me_frames").glob("frame_*.png")) | |
| imgs = [Image.open(p).convert("RGBA") for p in frames] | |
| # ํฐ ๋ฐฐ๊ฒฝ์ ํฉ์ฑ ํ ํ๋ ํธ ๋ณํ(GIF๋ ์ํ๊ฐ ์์) | |
| flat = [] | |
| for im in imgs: | |
| bg = Image.new("RGBA", im.size, (255, 255, 255, 255)) | |
| flat.append(Image.alpha_composite(bg, im).convert("P", palette=Image.ADAPTIVE)) | |
| durations = [600] * len(flat) # ํ๋ ์๋น 0.6์ด | |
| if durations: | |
| durations[-1] = 1500 # ๋ง์ง๋ง ํ๋ ์์ 1.5์ด ์ ์ง | |
| flat[0].save("runs/me.gif", save_all=True, append_images=flat[1:], | |
| duration=durations, loop=0, disposal=2, optimize=True) | |
| print("wrote runs/me.gif") | |
| PY | |
| # 3) ์ด์ด ๋ณด๊ธฐ (macOS) | |
| open runs/me.gif | |
| ``` | |
| > **ffmpeg ๋ฒ์ **(๋ ๋ถ๋๋ฌ์ด ๊ณ ํ์ง GIF, 2-pass ํ๋ ํธ): | |
| > ```bash | |
| > ffmpeg -y -framerate 2 -i runs/me_frames/frame_%03d.png \ | |
| > -vf "palettegen" runs/palette.png | |
| > ffmpeg -y -framerate 2 -i runs/me_frames/frame_%03d.png -i runs/palette.png \ | |
| > -lavfi "paletteuse" runs/me.gif | |
| > ``` | |
| --- | |
| ## 6. ์ฌ๋ฌ ๊ธฐ๋ก ๋ชจ์ ๋น๊ต โ `compare` | |
| ์ฌ๋ยทLLM ๊ธฐ๋ก์ `(๋ชจ๋ธ, ๋์ด๋)`๋ณ๋ก ๋ฌถ์ด ๋ฉํธ๋ฆญ ํ๊ท ๊ณผ ๊ฐ์(n)๋ฅผ ๋ ๋๋ค. ํด๋จผ ๋ฒ ์ด์ค๋ผ์ธ ๋น๊ต์ฉ์ ๋๋ค. | |
| ```bash | |
| .venv/bin/python -m proteus compare runs/me.jsonl runs/llm.jsonl --out runs/summary.json | |
| ``` | |
| - ์ฌ๋ฌ JSONL ํ์ผ์ ํ ๋ฒ์ ๋ฃ์ ์ ์์ต๋๋ค. | |
| - `--out`์ ์ฃผ๋ฉด ์ง๊ณ ๊ฒฐ๊ณผ๋ฅผ JSON์ผ๋ก๋ ์ ์ฅํฉ๋๋ค. | |
| - ์ถ๋ ฅ ํค์ `๋ชจ๋ธ`์ `--model`์ **์ฝ๋ก ๋ค** ๋ถ๋ถ์ ๋๋ค(์: `fake:demo` โ `demo`). | |
| > **๊ณต์ ํ ๋น๊ต ํ**: ์ฌ๋(`play --out`)๊ณผ LLM(`run --out`)์ **๊ฐ์ `--seed`ยท`--difficulty`** ๋ก ๋๋ฆฐ ๋ค ๋น๊ตํ์ธ์. | |
| --- | |
| ## 7. ์์ฃผ ์ฐ๋ ํ๋ฆ ํ๋์ | |
| ```bash | |
| # (a) ์ฌ๋์ผ๋ก ํ ํ + ์ ์ฅ | |
| .venv/bin/python -m proteus play --scenario predator_evade --difficulty easy --seed 42 --play-turns 10 --out runs/me.jsonl | |
| # (b) ํธ๋ฃจ์ปฌ๋ฌ๋ก ๋ค์ ๋ณด๊ธฐ | |
| .venv/bin/python -m proteus replay runs/me.jsonl --visual --fps 0 | |
| # (c) GIF๋ก ๋ง๋ค๊ธฐ | |
| .venv/bin/python -m proteus replay runs/me.jsonl --png runs/me_frames | |
| # โ 5์ ์ Pillow ์ค๋ํซ ์คํ โ runs/me.gif | |
| # (d) LLM(๊ฐ์ง)๋ก ๊ฐ์ ์กฐ๊ฑด ํ ํ | |
| .venv/bin/python -m proteus run --scenario predator_evade --model fake:demo --difficulty easy --seed 42 --play-turns 10 --out runs/llm.jsonl | |
| # (e) ์ฌ๋ vs LLM ๋น๊ต | |
| .venv/bin/python -m proteus compare runs/me.jsonl runs/llm.jsonl --out runs/summary.json | |
| ``` | |
| --- | |
| ## 8. ์ข ๋ฃ ์ฝ๋(์๋ฌ ์ฒ๋ฆฌ) | |
| | ์ฝ๋ | ์๋ฏธ | | |
| |------|------| | |
| | `0` | ์ ์ | | |
| | `1` | ์ ๋ ฅ์ ์ฐพ์์ผ๋ ๋น์ด ์์(์: `replay`/`compare`์ ๋น trace) | | |
| | `2` | ์๋ชป๋/์๋ ์ธ์(์๋ ๋ชจ๋ธยท์๋๋ฆฌ์ค, ํ์ผ ์์, `play` ์ค stdin ์กฐ๊ธฐ ์ข ๋ฃ) | | |
| --- | |
| ## 9. ์ค์ ๋ชจ๋ธ๋ก ์คํ (์ ํ) | |
| `.venv`์๋ provider SDK๊ฐ ์์ผ๋ฏ๋ก, ์ค์ LLM์ ๋๋ฆด ๋๋ **์์ venv**๋ฅผ ๋ฐ๋ก ๋ง๋ค์ด ์๋๋ค(์คํ๋ผ์ธ ๋ถ๋ณ ์ ์ง). | |
| ```bash | |
| # ์: Ollama Cloud | |
| python3 -m venv /tmp/proteus-real && \ | |
| /tmp/proteus-real/bin/pip install pydantic numpy pyyaml httpx && \ | |
| PYTHONPATH="$PWD" OLLAMA_API_KEY="<ํค>" \ | |
| /tmp/proteus-real/bin/python -m proteus run \ | |
| --scenario predator_evade --model ollama:gpt-oss:120b-cloud \ | |
| --difficulty easy --seed 42 --play-turns 10 --out runs/real.jsonl | |
| ``` | |
| - ์ฌ์ฉ ๊ฐ๋ฅํ provider ์ด๋ฆ์ `run --help`์ `--model` ์ค๋ช ์ ๋์ต๋๋ค. | |
| - API ํค์ `runs/`๋ `.gitignore` ๋์์ด๋ผ ์ปค๋ฐ๋์ง ์์ต๋๋ค. | |
| --- | |
| ## 10. ๋์๋ง์ ์ธ์ ๋ | |
| ```bash | |
| .venv/bin/python -m proteus --help # ์ ์ฒด ๋ช ๋ น | |
| .venv/bin/python -m proteus run --help # ๋ช ๋ น๋ณ ์ต์ | |
| .venv/bin/python -m proteus play --help | |
| .venv/bin/python -m proteus replay --help | |
| .venv/bin/python -m proteus compare --help | |
| ``` | |
| ๊ถ๊ธํ ์ ์ด ์์ผ๋ฉด `docs/superpowers/specs/`์ ์ค๊ณ ๋ฌธ์์ `HANDOFF.md`๋ฅผ ์ฐธ๊ณ ํ์ธ์. | |