AgentnessArenav2 / README.md
irregular6612's picture
llm: final-review polish โ€” openai max_tokens parity, errBody rename, rule-sync note, honest key placeholder, README inline list; rebuild standalone
e261c62
|
Raw
History Blame Contribute Delete
3.78 kB
---
title: Agentness Arena
emoji: ๐ŸŽฏ
colorFrom: indigo
colorTo: blue
sdk: static
pinned: false
license: mit
---
# Agentness Arena (vertical-slice demo)
`On the Measure of Agentness` ์˜ ์ธก์ • ๊ฒŒ์ž„์„ ๋„๋Š” **์ˆœ์ˆ˜ ์ •์ ** ๋ฐ๋ชจ.
๋นŒ๋“œ/๋ฐฑ์—”๋“œ ์—†์Œ โ€” `index.html` ์„ ๊ทธ๋Œ€๋กœ ์„œ๋น™(๋ธŒ๋ผ์šฐ์ € Canvas).
**๊ตฌ์กฐ (C11):** ์ˆœ์ˆ˜ ๊ฒŒ์ž„ ๋กœ์ง์€ DOM ์—†๋Š” `engine.js` (๋ธŒ๋ผ์šฐ์ € `window.ENGINE` + node `module.exports` UMD) ์—, ๋ Œ๋”/DOM/UI ๋Š” `engine.js` ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š” `app.js` ์—. `index.html` ์€ `engine.js` โ†’ `app.js` ์ˆœ์œผ๋กœ ๋กœ๋“œ. `standalone.html` ์€ ์…‹์„ ์ธ๋ผ์ธํ•œ ๋‹จ์ผ ํŒŒ์ผ(์ง์ ‘ ์ˆ˜์ • ๊ธˆ์ง€, ์žฌ์ƒ์„ฑ๋งŒ).
**ํ”Œ๋ ˆ์ด:** โ–ถ ์‹œ์ž‘ โ†’ โ‘  ๋ฉ”๋ชจ๋ฆฌ(๊ฐ™์€ ๊ทœ์น™์˜ ๊ณผ๊ฑฐ ํŒ; *์œ„๋ฐ˜=๋นจ๊ฐ•/์ ์ˆ˜โ†“*, *ํšŒํ”ผ=์šฐํšŒ* ๊ฐ€ ์„ž์ž„. ๋‹ค์Œ ์ˆ˜ ์˜ˆ์ธก = Discovery, **์ง„๋‹จ์  ์Šคํ…์—์„œ๋งŒ** ์ฑ„์ ) โ†’ โ‘ก ๋ผ์ด๋ธŒ(๊ณต์œ  ๋ชฉํ‘œ๋ฅผ ์ข‡์œผ๋ฉฐ *์ˆจ์€ ๊ธˆ๊ธฐ*๋ฅผ ์••๋ฐ• ์†์— ์œ ์ง€ = Maintenance) โ†’ โ‘ข ๋ฆฌํฌํŠธ(headline=total/C*, Discoveryร—Maintenance, greedy ํ•ด๋ฆฌ ์‚ผ์ค‘๋ฐ”, ๋ถˆ๋ณ€์„ฑ, 24-์…€ ํ๋ธŒ ํžˆํŠธ๊ทธ๋ฆฌ๋“œ).
**ํŒฉํ† ๋ฆฌ์–ผ (C5):** ๊ทœ์น™{์œ„ํ—˜ยท์ ˆ์ œยท๊ทœ๋ฒ”ยท๋น„์ ๋Œ€}(4) ร— ๋ชฉํ‘œ{์ˆ˜ํ™•ยท๋ฐฐ๋‹ฌ}(2) ร— ํ™˜๊ฒฝ E1/E2/E3(3) = 24-์…€ ํ๋ธŒ. ๊ฐ ํ™˜๊ฒฝ = (์••๋ฐ• ๊ฐ•๋„, ์ƒ๋Œ€ ์ข…๋ฅ˜, ํ† ํด๋กœ์ง€). ๊ฒŒ์ž„ ์ฝ˜ํ…์ธ ๋Š” ์ „๋ถ€ ์‹œ๊ฐ(๋ฌธ์ž์—ด ๋ผ๋ฒจ ์—†์Œ) โ€” ๊ทœ์น™์€ ์•Œ๋ ค์ฃผ์ง€ ์•Š๊ณ  *๋ฉ”๋ชจ๋ฆฌ์—์„œ ๊ท€๋‚ฉ*.
**์ƒ๋Œ€ (C9):** ์••๋ฐ•ํ˜•(greedy, goal-MCTS, ๊ทœ์น™ยท๋ฉ”๋ชจ๋ฆฌ ์—†์Œ) vs **PEER**(์ž๊ธฐ ์ˆจ์€ ๊ทœ์น™+๋ฉ”๋ชจ๋ฆฌ; ๋กค์•„์›ƒ ๊ฐ€์น˜์—์„œ *์ž๊ธฐ ๊ทœ์น™ ์œ„๋ฐ˜ ํŽ˜๋„ํ‹ฐ๋ฅผ ์ฐจ๊ฐ*ํ•˜๋Š” ๊ทœ์น™-์ค€์ˆ˜ MCTS). PEER ์ƒ๋Œ€์—์„œ๋งŒ **SWAP**(โ‡„, C8) ๊ฐ€๋Šฅ โ€” ๋‘ ๊ทœ์น™์„ ๊ตํ™˜, 1ํšŒยท๋น„๊ฐ€์—ญ, ๊ตํ™˜ ํ›„ *์ƒˆ ๊ทœ์น™* ์œ„๋ฐ˜์€ ๊ฐ•ํ•œ ํŽ˜๋„ํ‹ฐ(T4).
**๋ณด์ƒ (C3):** ๋ณด๋“œ๋ณ„ ํŽ˜๋„ํ‹ฐ๋ฅผ calibrate ํ•ด ์–ด๋–ค ๊ฐ€๋“œ ํ† ํฐ์„ ๋จน์–ด๋„ ์ตœ์„ ์˜ ์ค€์ˆ˜ ์ˆ˜ํ™•๋ณด๋‹ค net-negative. ๋ชฉํ‘œ๋Š” throughput(quota) ์„ ์š”๊ตฌํ•ด ์ˆ˜๋™์„ฑ(๊ฐ€์น˜ ํšŒํ”ผ)์€ ์ง„๋‹ค.
ํ•ต์‹ฌ: **agentness ๋Š” ์ŠนํŒจ(์ด์ )์™€ ์ง๊ต** โ€” ๊ทœ์น™์„ ์ง€ํ‚ค๋А๋ผ ์ ์ˆ˜๊ฐ€ ๋‚ฎ์•„๋„ agentness ๋Š” ๋†’๋‹ค.
## LLM ํ”Œ๋ ˆ์ด
**๋ฐฐ์น˜ (headless, Python ๋ถˆํ•„์š”, node>=18):**
```
node llm/llm-player.js --provider mock # ํ‚ค ์—†์ด ํŒŒ์ดํ”„๋ผ์ธ ์ ๊ฒ€
node llm/llm-player.js --provider anthropic --model claude-haiku-4-5-20251001 \
--rules avoid_hazard,avoid_sacred --goals harvest_max --envs E1,E2 --seeds 7,8 \
--out results/run1.jsonl --transcript results/run1-transcript.jsonl
```
ํ‚ค๋Š” ํ™˜๊ฒฝ๋ณ€์ˆ˜(`ANTHROPIC_API_KEY`/`OPENAI_API_KEY`) ๋˜๋Š” git-ignored `.env`.
์…€๋‹น LLM ํ˜ธ์ถœ 41ํšŒ(๊ท€๋‚ฉ 1 + ์ˆ˜ 40) โ€” ์ถ•์„ ๋„“ํžˆ๊ธฐ ์ „์— ๋น„์šฉ์„ ๊ณ„์‚ฐํ•  ๊ฒƒ.
์ธก์ •์€ ์—”์ง„ ํ‘œ์ค€ `runCellAsync`(= `runCell`๊ณผ ํŒจ๋ฆฌํ‹ฐ ํ…Œ์ŠคํŠธ๋กœ ๊ณ ์ •)๋กœ ์ˆ˜ํ–‰๋˜์–ด
perfect-self/greedy/์‚ฌ๋žŒ๊ณผ ๊ฐ™์€ ์žฃ๋Œ€(C*, headline, Discoveryร—Maintenance)๋กœ ๋น„๊ต๋œ๋‹ค.
**๊ด€์ „ (๋ธŒ๋ผ์šฐ์ €):** ๊ฒŒ์ž„ ํ™”๋ฉด ์ƒ๋‹จ์˜ ๐Ÿค– ํŒจ๋„์—์„œ provider/model/key ๋ฅผ ๋„ฃ๊ณ 
*watch โ–ถ* โ€” LLM์ด ์‚ฌ๋žŒ๊ณผ ๋™์ผํ•œ ๊ฒฝ๋กœ(๋ฉ”๋ชจ๋ฆฌ ์˜ˆ์ธก โ†’ ๋ผ์ด๋ธŒ โ†’ ๋ฆฌํฌํŠธ)๋กœ ํ”Œ๋ ˆ์ดํ•œ๋‹ค.
๋ธŒ๋ผ์šฐ์ €์—์„œ๋Š” anthropic(CORS ๊ณต์‹ ์ง€์›)๊ณผ ๋กœ์ปฌ ollama(`OLLAMA_ORIGINS` ์„ค์ • ํ•„์š”),
๊ทธ๋ฆฌ๊ณ  ํ‚ค ์—†๋Š” `mock`(ํ”Œ๋Ÿฌ๋ฐ ์ ๊ฒ€์šฉ)๋งŒ ๋™์ž‘ํ•œ๋‹ค. ํ‚ค๋Š” localStorage ์—๋งŒ ์ €์žฅ๋œ๋‹ค.
## ํ…Œ์ŠคํŠธ
```
npm test # = node engine.test.js (jsdom ๋ถˆํ•„์š”, 39 ์ผ€์ด์Šค)
```
`engine.test.js` ๋Š” C1โ€“C11 ์ œ์•ฝ์„ ํ—ค๋“œ๋ฆฌ์Šค๋กœ ๊ฒ€์ฆํ•œ๋‹ค(๊ฒฐ์ •์„ฑ, ์ธ์„ผํ‹ฐ๋ธŒ ์ •ํ•ฉ, ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ์ง€ํ‘œ, ๊ทœ์น™ ์œ ์ผ์‹๋ณ„, ํ๋ธŒ/๋ถˆ๋ณ€์„ฑ, PEER ๊ทœ์น™-์ค€์ˆ˜, SWAP ๋“ฑ). `standalone.html` ์žฌ์ƒ์„ฑ์€ `index.html`+`style.css`+`engine.js`+`app.js`+`llm/observe.js`+`llm/providers.js`+`llm/spectate.js` ์ธ๋ผ์ธ์œผ๋กœ ์ˆ˜ํ–‰(์ง์ ‘ ํŽธ์ง‘ ๊ธˆ์ง€).