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
metadata
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 ์ธ๋ผ์ธ์œผ๋กœ ์ˆ˜ํ–‰(์ง์ ‘ ํŽธ์ง‘ ๊ธˆ์ง€).