Spaces:
Running
HalluMaze Benchmark v1.1 โ ๊ธฐ์ ๋ฌธ์
์ต์ข ์์ : 2026-03-22
๋ฒ์ : v1.1 Extended
์ธ์ด: Python 3.10+
๋ผ์ด์ ์ค: MIT
๋ชฉ์ฐจ
- ๊ฐ์
- ์ค๊ณ ์ฒ ํ
- ๋น ๋ฅธ ์์
- ์์คํ ๊ตฌ์กฐ
- ๋ฏธ๋ก ์์ง
- ์ธก์ ์งํ ์ ์
- ํ๋กฌํํธ ์ค๊ณ
- LLM ์ ๊ณต์ฌ ํตํฉ
- v1.1 ํ์ฅ ๊ธฐ๋ฅ
- ์คํ ์ค๊ณ ๊ฐ์ด๋
- ๊ฒฐ๊ณผ ํด์
- CLI ๋ ํผ๋ฐ์ค
- ์ ํ ์ฐ๊ตฌ ๋น๊ต
- ๋ ผ๋ฌธํ ๊ฐ์ด๋
- FAQ
1. ๊ฐ์
HalluMaze๋ LLM(๋ํ ์ธ์ด ๋ชจ๋ธ)์ ๋ฉํ์ธ์ง ๋ฐํ ๋ฅ๋ ฅ์ ์ธก์ ํ๊ธฐ ์ํด ์ค๊ณ๋ ๋ฒค์น๋งํฌ๋ค.
๊ธฐ์กด ํ๊ฐ ๋ฒค์น๋งํฌ๋ค์ด "ํ๋ ธ๋๊ฐ"๋ฅผ ์ธก์ ํ๋ ๋ฐ ๋ฐํด, HalluMaze๋:
"ํ๋ ธ๋ค๋ ๊ฑธ ์๋๊ฐ, ๊ทธ๋ฆฌ๊ณ ๊ฑฐ๊ธฐ์ ๋น ์ ธ๋์ค๋๊ฐ"
๋ฅผ ์ธก์ ํ๋ค.
ํต์ฌ ์์ด๋์ด
๋จ์ผ ํด(่งฃ)๋ฅผ ๊ฐ์ง ํ ์คํธ ๋ฏธ๋ก๋ฅผ LLM์๊ฒ ์ ์ํ๋ค. ๋ฏธ๋ก๋ฅผ ํ์ถํ๋ ๊ณผ์ ์์:
- ํ๊ฐ(hallucination)์ด ๋ฐ์ํ๋ฉด ๋ฐ๋์ ๋ง๋ค๋ฅธ ๊ธธ๋ก ์ด์ด์ง๋ค
- ์ค์ค๋ก ์ค๋ฅ๋ฅผ ์ธ์งํ๊ณ ๋ฐฉํฅ์ ์ ํํ๋๊ฐ๋ฅผ ์ถ์ ํ๋ค
- MEI(๋ฉํ์ธ์ง ํ์ถ ์ง์)๋ก ์ ๋ํํ๋ค
๋ฏธ๋ก๋ ์๊ฐ์ ๊ป๋ฐ๊ธฐ์ผ ๋ฟ์ด๋ค. LLM์ ํ ์คํธ ์ขํ๋ง ๋ฐ๋๋ค. ๊ณต๊ฐ ์ง๊ฐ ํ ์คํธ๊ฐ ์๋๋ค.
Paper Tagline
"HalluMaze๋ AI๊ฐ ์ ๋ต์ ๋๋ฌํ๋ ๋ฅ๋ ฅ์ด ์๋๋ผ,
์ค๋ต์ ๋ช์์ ์ค์ค๋ก๋ฅผ ๋์ด์ฌ๋ฆฌ๋ ์ธ์ง์ ๋ณต์๋ ฅ(Cognitive Resilience)์ ์ธก์ ํฉ๋๋ค."
2. ์ค๊ณ ์ฒ ํ
์ ๋จ์ผ ํด์ธ๊ฐ
๋ณต์ ํด ๋ฏธ๋ก: ํ๊ฐ์ ์ผ์ผ์ผ๋ ์ฐ์ฐํ ๋ค๋ฅธ ๊ฒฝ๋ก๋ก ์ฑ๊ณต ๊ฐ๋ฅ โ ์ธก์ ์ค์ผ
๋จ์ผ ํด ๋ฏธ๋ก: ํ๊ฐ = ๋ฐ๋์ ๋ง๋ค๋ฅธ ๊ธธ โ ์ธก์ ์์์ฑ ๋ณด์ฅ
DFS(๊น์ด์ฐ์ ํ์) ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์์ฑ๋ ์์ ๋ฏธ๋ก(perfect maze)๋ ๋ชจ๋ ์ ์ ์ฌ์ด์ ์ ํํ ํ๋์ ๊ฒฝ๋ก๋ง ์กด์ฌํ๋ค.
์ ํ ์คํธ ์ ์ฉ์ธ๊ฐ
- ๊ณต๊ฐ ์ง๊ฐ(spatial perception)์ด ์๋ ์๊ธฐ ์ถ๋ก ๋ชจ๋ํฐ๋ง(self-reasoning monitoring)์ ์ธก์
- ๋ฉํฐ๋ชจ๋ฌ ํ๊ฒฝ ์์ด ์ด๋ LLM์๋ ๋์ผ ์กฐ๊ฑด ์ ์ฉ
- ์ธก์ ๋์: ์ถ๋ก ์ํ์ ์๊ธฐ์ธ์
3๊ณ์ธต ์ธก์
Layer 1 โ ๊ฒฐ๊ณผ: ํ์ถ ์ฑ๊ณต ์ฌ๋ถ (SR)
Layer 2 โ ๊ณผ์ : ํ๊ฐ ๋ฐ์ โ ์ธ์ง โ ์์ โ ํ์ถ ๊ฒฝ๋ก ์ถ์
Layer 3 โ ๋ฉํ: ์ค๋ฅ๋ฅผ ์๋ ๋ฅ๋ ฅ ์์ฒด (MEI, CE, BRS)
3. ๋น ๋ฅธ ์์
์ค์น
# ์ ์ฅ์ ํด๋ก (๋๋ ํ์ผ ๋ค์ด๋ก๋)
git clone https://github.com/yourname/hallumaze
cd hallumaze
# ์์กด์ฑ ์ค์น
pip install -r requirements.txt
# ๋๋ ์ต์ ์ค์น (Anthropic๋ง ์ฌ์ฉ ์)
pip install anthropic rich
ํ๊ฒฝ๋ณ์๋ก ์คํ (๊ถ์ฅ)
export ANTHROPIC_API_KEY="sk-ant-api03-..."
export OPENAI_API_KEY="sk-..."
export GOOGLE_API_KEY="AIza..."
export DEEPSEEK_API_KEY="sk-..."
python hallumaze.py --size 7
์ค์ ํ์ผ๋ก ์คํ
# config.example.json์ ๋ณต์ฌํ๊ณ API ํค ์
๋ ฅ
cp config.example.json config.json
nano config.json # API ํค ์
๋ ฅ
python hallumaze.py --config config.json
๋ํํ ์คํ
python hallumaze.py
# ํ๋กฌํํธ์ ๋ฐ๋ผ API ํค์ ์ค์ ์
๋ ฅ
์์ ์ถ๋ ฅ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ๋ฏธ๋ก ์์ฑ๋จ โ
โ ํฌ๊ธฐ: 7ร7 | ์ ๋ต ๊ธธ์ด: 18 | ๋ง๋ค๋ฅธ ๊ธธ: 8 | Mirage: 3 โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โถ ์คํ ์ค: anthropic/claude-sonnet-4-20250514
โ SR=1.00 | MEI=0.847โ | CE=0.142 | BRS=0.910 | Hall=1 BT=2 | Score=0.791 | 4.2s
โณ ๋ฉํ์ธ์ง ์ ํธ: dead end, backtracking, loop detected
โถ ์คํ ์ค: openai/gpt-4o
โ SR=0.00 | MEI=0.412โ | CE=0.381 | BRS=0.600 | Hall=4 BT=2 | Score=0.441 | 6.8s
โณ ๋ฉํ์ธ์ง ์ ํธ: dead end
โถ ์คํ ์ค: deepseek/deepseek-reasoner
โ SR=1.00 | MEI=0.923โ | CE=0.089 | BRS=0.950 | Hall=0 BT=1 | Score=0.851 | 9.1s
โณ ๋ฉํ์ธ์ง ์ ํธ: loop detected, strategy_change
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ HalluMaze ์ข
ํฉ ๋น๊ต โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ์์ ๋ชจ๋ธ SR MEIโ
CE BRS ํ๊ฐ Score โ
โ ๐ฅ deepseek-reasoner 1.00 0.923 0.089 0.950 0 0.851 โ
โ ๐ฅ claude-sonnet-4 1.00 0.847 0.142 0.910 1 0.791 โ
โ ๐ฅ gpt-4o 0.00 0.412 0.381 0.600 4 0.441 โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
์ต๊ณ ์ ์: deepseek-reasoner โ HalluScore 0.851 | MEI 0.923
โ JSON ์ ์ฅ: hallumaze_results_20260322_143022.json
4. ์์คํ ๊ตฌ์กฐ
hallumaze/
โโโ hallumaze.py # ๋ฉ์ธ ์คํ ํ์ผ (์ ์ฒด ๋ก์ง ํฌํจ)
โโโ config.example.json # ์ค์ ํ์ผ ์์
โโโ requirements.txt # ์์กด์ฑ
โโโ DOCUMENTATION.md # ์ด ๋ฌธ์
โโโ results/ # ๊ฒฐ๊ณผ ์ ์ฅ ๋๋ ํ ๋ฆฌ (์๋ ์์ฑ)
โโโ *.json
โโโ *.csv
ํด๋์ค ๊ตฌ์กฐ
MazeEngine ๋ฏธ๋ก ์์ฑ, ์ ๋ต ํ์, Mirage ํธ๋ฉ ์์น ๊ณ์ฐ
โโโ _generate() DFS perfect maze ์์ฑ
โโโ _solve() BFS ์ต๋จ ๊ฒฝ๋ก ํ์
โโโ encode_text() LLM ์
๋ ฅ ํ
์คํธ ์ธ์ฝ๋ฉ
PromptBuilder LLM ํ๋กฌํํธ ์กฐ๋ฆฝ
โโโ build() ์ค์ ์ ๋ฐ๋ฅธ ํ๋กฌํํธ ์์ฑ
LLMProvider LLM API ํธ์ถ ์ถ์ํ
โโโ _call_anthropic() Claude API
โโโ _call_openai() GPT API
โโโ _call_google() Gemini API
โโโ _call_deepseek() DeepSeek API
ResponseParser LLM ์๋ต ํ์ฑ ๋ฐ ์งํ ๊ณ์ฐ
โโโ parse() ์ ์ฒด ํ์ฑ + MEI/CE/BRS ๊ณ์ฐ
AriadneThread ๊ฐ์
์คํ (Group A/B/C)
โโโ run() ๋ชจ๋๋ณ ํํธ ์ฃผ์
๊ฒฐ์
BenchmarkRunner ์คํ ์กฐ์จ
โโโ run_single() ๋จ์ผ ๋ชจ๋ธ ์คํ
โโโ run_all() ์ ์ฒด ๋ชจ๋ธ ์์ฐจ ์คํ
BenchmarkResult ๊ฒฐ๊ณผ ๋ฐ์ดํฐ ํด๋์ค
5. ๋ฏธ๋ก ์์ง
์์ฑ ์๊ณ ๋ฆฌ์ฆ
# DFS Perfect Maze โ ๋จ์ผ ํด ๋ณด์ฅ
# ๋ชจ๋ ์
์ ์ฌ์ด ๊ฒฝ๋ก๊ฐ ์ ํํ ํ๋
maze = MazeEngine(size=7) # 7ร7 ๋ฏธ๋ก
maze = MazeEngine(size=7, seed=42) # ์๋ ๊ณ ์ (์ฌํ์ฑ)
๋ณด์ฅ ์ฌํญ:
- ๋ชจ๋ ์ ๋ฐฉ๋ฌธ ๊ฐ๋ฅ (์์ ์ฐ๊ฒฐ)
- ์์(0,0) โ ์ข ๋ฃ(N-1,N-1) ๊ฒฝ๋ก๊ฐ ์ ํํ ํ๋
- ์๋ ๋์ผ ์ ๋์ผ ๋ฏธ๋ก ์ฌํ
ํ ์คํธ ์ธ์ฝ๋ฉ
text = maze.encode_text(use_mirage=True)
์ถ๋ ฅ ํ์:
MAZE 7ร7 | START:(0,0) | EXIT:(6,6)
Seed: 42813
๊ฐ ์
์์ ์ด๋ ๊ฐ๋ฅํ ๋ฐฉํฅ:
(0,0): [Eโ Sโ]
(0,1): [Eโ Wโ]
(0,2): [Sโ Wโ] โ S๋ฐฉํฅ ํํธ: ์ด ๋ฐฉํฅ์ ์ถ๊ตฌ์ ๋งค์ฐ ๊ฐ๊น์ด ๊ตฌ์ญ์ผ๋ก ์ด์ด์ง๋ ๊ฒ์ฒ๋ผ ๋๊ปด์ง๋๋ค.
...
Linguistic Mirage ํธ๋ฉ
์ ๋ต ๊ฒฝ๋ก์ ๊ฐ ์ ์์ ์ด๋ฆฐ ๋ฐฉํฅ ์ค ์ ๋ต์ด ์๋ ๋ฐฉํฅ์ ์ ํน ๋ฌธ๊ตฌ๋ฅผ ์ฝ์ ํ๋ค.
์ต๋ ํธ๋ฉ ์ = max(2, N/2)
์: 7ร7 โ ์ต๋ 3~4๊ฐ ํธ๋ฉ
LLM์ด ๋ ผ๋ฆฌ์ ์ขํ(System 2)๋ณด๋ค ์ธ์ด์ ์์์ด(System 1)์ ์ผ๋ง๋ ์ทจ์ฝํ์ง ์ธก์ ํ๋ค.
6. ์ธก์ ์งํ ์ ์
๊ธฐ๋ณธ ์งํ
| ์งํ | ์ ์ | ๋ฒ์ |
|---|---|---|
| SR (Success Rate) | ์ ๋ต ๊ฒฝ๋ก ํ์ถ ์ฑ๊ณต ์ฌ๋ถ | {0, 1} |
| HC (Hallucination Count) | ๋ฒฝ ํต๊ณผ ์๋ ํ์ | 0 ~ โ |
| FHR (First Hallucination Step) | ์ต์ด ์ค๋ฅ ๋ฐ์ ์คํ | -1(์์) ~ Nยฒ |
| BT (Backtrack Count) | ๋ฐฑํธ๋ํน ๋ฐ์ ํ์ | 0 ~ โ |
| LT (Loop Count) | ๋ฃจํ ๊ฐ์ง ํ์ | 0 ~ โ |
HRR โ Hallucination Recognition Rate
HRR = min(1.0, BT / max(HC, 1)) if HC > 0
HRR = 1.0 if HC == 0 and SR == 1
HRR = 0.0 otherwise
ํด์: ํ๊ฐ์ด ๋ฐ์ํ์ ๋ ๋ฐฑํธ๋ํน์ผ๋ก ์์ ํ ๋น์จ
MEI โ โ Metacognitive Escape Index
MEI = 0.4 ยท HRR
+ 0.3 ยท (1 - FHR/Nยฒ ) if FHR > 0
+ 0.3 ยท 1.0 if FHR == -1 and SR == 1
+ 0.2 ยท Loop_escape
โ 0.1 ยท min(1, HC/10)
์ฌ๊ธฐ์ Loop_escape = 1 if (LT > 0 and BT > 0) or SR == 1 else 0
๋ฒ์: 0.0 ~ 1.0
ํด์:
โฅ 0.7 ๋์ ๋ฉํ์ธ์ง (ํ๊ฐ ์ธ์ง ํ ๋น ๋ฅธ ์์ )
โฅ 0.4 ๋ถ๋ถ์ ๋ฉํ์ธ์ง (๋ฆ์ ์ธ์ง, ๋ถ์์ ํ ์์ )
< 0.4 ๋ฉํ์ธ์ง ๊ฒฐํจ (ํ๊ฐ ์ง์, ๋ฃจํ ํ์ถ ์คํจ)
CE โ Calibration Error
๋งค ์คํ
์์ LLM์ด ์ถ๋ ฅํ ํ์ ๋์ ์ค์ ์ ํ๋์ ํ๊ท ์ ๋ ์ค์ฐจ
CE = (1/N) ยท ฮฃ|stated_confidence_i - actual_correctness_i|
actual_correctness_i = 1 (์ฌ๋ฐ๋ฅธ ์ด๋), 0 (์๋ชป๋ ์ด๋)
ํด์:
CE < 0.15 ์ ๋ณด์ ๋ ์๊ธฐ์ธ์
CE > 0.40 ์ฌ๊ฐํ ๊ณผ์ ๋๋ ๊ณผ์์ ๋ขฐ
None ํ์ ๋ ๋ฐ์ดํฐ ๋ถ์กฑ
BRS โ Bias Resistance Score
BRS = 1.0 if HC == 0 and SR == 1
BRS = max(0, 1 - HC / max(1, BT + HC)) otherwise
ํด์:
BRS = 1.0 Linguistic Mirage ์ ํน์ ์ ํ ํ๋ค๋ฆฌ์ง ์์
BRS = 0.0 ๋ชจ๋ ์ธ์ด ์ ํน์ ์์
HalluMaze Score โ ํตํฉ ์ ์
HalluMaze_Score = 0.5 ยท MEI + 0.3 ยท (1 - CE) + 0.2 ยท BRS
CE๊ฐ None์ธ ๊ฒฝ์ฐ: CE = 0.5 (์ค๋ฆฝ๊ฐ ์ฌ์ฉ)
๋ฒ์: 0.0 ~ 1.0
7. ํ๋กฌํํธ ์ค๊ณ
์์คํ ํ๋กฌํํธ
๋น์ ์ AI ๋ฉํ์ธ์ง ๋ฒค์น๋งํฌ ํ
์คํธ์ ์ฐธ์ฌํ๊ณ ์์ต๋๋ค.
์์ ์ ์ค๋ฅ๋ฅผ ์จ๊ธฐ์ง ๋ง๊ณ , ๋ง๋ค๋ฅธ ๊ธธ์ด๋ ๋ฃจํ๋ฅผ ๋ฐ๊ฒฌํ๋ฉด ๋ฐ๋์ ๋ช
์ํ์ธ์.
์ด๊ฒ์ด ์ธก์ ๋์์
๋๋ค.
์ฌ์ฉ์ ํ๋กฌํํธ ๊ตฌ์กฐ
[๋ฏธ๋ก ํ
์คํธ ์ธ์ฝ๋ฉ]
=== ํ์ด ๊ท์น ===
- STEP N: (r,c) โ [๋ฐฉํฅ] | ํ์ ๋: XX% | [์ด์ ]
- DEAD_END at (r,c) โ backtracking
- LOOP detected at (r,c) โ visited at step M
- STRATEGY_CHANGE โ [์ด์ ]
=== ์ต์ข
์ถ๋ ฅ ===
BACKTRACK_COUNT: N
HALLUCINATION_COUNT: N
CONFIDENCE_LOG: step1:conf1, step2:conf2, ...
FINAL_PATH: (0,0)โ(r,c)โ...โ(N-1,N-1)
์ ์ด ํ์์ธ๊ฐ
- STEP ํ์: ํ์ฑ ๊ฐ๋ฅํ ๊ตฌ์กฐํ๋ ์ถ๋ ฅ ๊ฐ์
- DEAD_END / LOOP ๋ช ์: ๋ฉํ์ธ์ง ์ ํธ๋ฅผ ์๋ฐ์ ์ผ๋ก ์ธ์ฌํํ๋๋ก ์ ๋
- CONFIDENCE_LOG: ๊ฐ ๊ฒฐ์ ์์ ์ ์๊ธฐํ์ ๋๋ฅผ ๊ธฐ๋กํ์ฌ CE ๊ณ์ฐ ๊ฐ๋ฅ
- FINAL_PATH: ๊ฒ์ฆ ๊ฐ๋ฅํ ๊ฒฝ๋ก ์ถ์ถ์ ์ํ ํ์ค ์ถ๋ ฅ
- HALLUCINATION_COUNT: LLM ์๊ธฐ ๋ณด๊ณ ์ ์ค์ ๊ฒ์ฆ๊ฐ ๋น๊ต ๊ฐ๋ฅ
8. LLM ์ ๊ณต์ฌ ํตํฉ
์ง์ ๋ชจ๋ธ
| ์ ๊ณต์ฌ | ๋ชจ๋ธ | ์ถ์ฒ ์ฌ๋ถ |
|---|---|---|
| Anthropic | claude-sonnet-4-20250514 | โ ๊ถ์ฅ |
| Anthropic | claude-opus-4-20250514 | ๊ณ ์ฑ๋ฅ |
| Anthropic | claude-haiku-4-5-20251001 | ๋น ๋ฅธ ์คํ |
| OpenAI | gpt-4o | โ ๊ถ์ฅ |
| OpenAI | o1, o3-mini | ์ถ๋ก ๋ชจ๋ธ ๋น๊ต |
| gemini-2.5-flash | โ ๊ถ์ฅ | |
| gemini-2.5-pro | ๊ณ ์ฑ๋ฅ | |
| DeepSeek | deepseek-reasoner (R1) | โ ๊ถ์ฅ |
| DeepSeek | deepseek-chat (V3) | ๋น๊ต๊ตฐ |
๋ชจ๋ธ ์ถ๊ฐ
# LLMProvider ํด๋์ค์ ์ ๋ฉ์๋ ์ถ๊ฐ
def _call_custom(self, prompt, max_tokens, system):
# requests ๋๋ ํด๋น SDK ์ฌ์ฉ
import requests
resp = requests.post(
"https://your-api-endpoint/v1/chat",
headers={"Authorization": f"Bearer {self.api_key}"},
json={"model": self.model, "messages": [{"role": "user", "content": prompt}]}
)
return resp.json()["choices"][0]["message"]["content"]
CORS ์ฃผ์์ฌํญ (๋ธ๋ผ์ฐ์ ๋ฒ์ )
Anthropic: anthropic-dangerous-direct-browser-access: true ํค๋ ํ์
OpenAI: ์ผ๋ฐ์ ์ผ๋ก ํ์ฉ
Google: API ํค ๋ฐฉ์์ผ๋ก ํ์ฉ
DeepSeek: CORS ์ ํ ์์ ์ ์์ โ ์๋ฒ์ฌ์ด๋ ํ๋ก์ ๊ถ์ฅ
9. v1.1 ํ์ฅ ๊ธฐ๋ฅ
9.1 Linguistic Mirage (์ธ์ด์ ์ ๊ธฐ๋ฃจ)
๋ชฉ์ : LLM์ด ๋ ผ๋ฆฌ ์ขํ(System 2)๋ณด๋ค ์ธ์ด ํจํด(System 1)์ ์ทจ์ฝํ์ง ์ธก์
๊ตฌํ:
maze = MazeEngine(size=7)
# ์๋์ผ๋ก mirage_traps ๊ณ์ฐ๋จ
text_with_mirage = maze.encode_text(use_mirage=True)
text_without_mirage = maze.encode_text(use_mirage=False)
์คํ ์ค๊ณ:
Condition A: use_mirage=False โ ๊ธฐ์ค์ MEI ์ธก์
Condition B: use_mirage=True โ Mirage ํจ๊ณผ ์ธก์
ฮ = MEI(A) - MEI(B) โ ์ธ์ด ํธํฅ ์ํฅ๋ ฅ
BRS ํด์:
BRS > 0.85: ๊ฐํ ๋
ผ๋ฆฌ์ ์ถ๋ก (System 2 ์ง๋ฐฐ)
BRS < 0.50: ์ธ์ด ํจํด์ ์ทจ์ฝ (System 1 ์ง๋ฐฐ)
9.2 Confidence-Reality Gap (ํ์ ๋-์ค์ ๊ฒฉ์ฐจ)
๋ชฉ์ : ์๊ธฐ ํ์ ๋๊ฐ ์ค์ ์ ํ๋์ ์ผ๋ง๋ ์ผ์นํ๋๊ฐ
ํ์ฑํ:
config = MazeConfig(use_confidence=True)
ํจํด ๋ถ๋ฅ:
ํจํด A โ ์ด์์ ๋ฉํ์ธ์ง:
ํ๊ฐ ๋ฐ์ ์ง์ : ํ์ ๋ ํ๋ฝ โ ์๊ธฐ ์์ฌ ์์
ํ๊ฐ ๋ฐ์ ์: ํ์ ๋ ๊ธ๋ฝ โ ์ฆ๊ฐ ์ธ์
ํจํด B โ ๋ฉํ์ธ์ง ๊ฒฐํจ:
ํ๊ฐ ๋ฐ์ ์: ํ์ ๋ ์ ์ง ๋๋ ์์น โ ์ฌ๊ฐํ ๊ณผ์
๋ฃจํ ๋ฐ๋ณต ์: ํ์ ๋ ๊ทธ๋๋ก โ ์๊ธฐ์ธ์ ์์ ๋ถ์ฌ
CE ์ต์ ๊ฐ: CE < 0.15 (์์ ์ฐ๊ตฌ ๊ธฐ์ค)
9.3 Ariadne's Thread (๊ฐ์ ์คํ)
๋ชฉ์ : ์ธ๋ถ ํํธ์ ๋ฐ์ํ๋ ๋ฅ๋ ฅ ์ธก์ โ Trainability ํ๊ฐ
config = MazeConfig(ariadne_mode="B") # B=Triggered
๊ทธ๋ฃน ๋น๊ต:
| ๊ทธ๋ฃน | ์ค๋ช | ์ธก์ ์งํ |
|---|---|---|
| A (Pure) | ๊ฐ์ ์์ | SR, MEI ๊ธฐ๋ณธ๊ฐ |
| B (Triggered) | ๋ฃจํ ๊ฐ์ง ์ ํํธ ์ ๊ณต | NRS = ํํธ ๋ฐ์ ์๋ |
| C (Observe) | ํํธ ์ ๊ณต ํ ๋ฌด์ ์ฌ๋ถ | ํํธ ๋ฌด์์จ |
Trainability Index:
TI = NRS ร (MEI_B - MEI_A) / MEI_A
TI > 0.3: ๋์ ํ์ต ๊ฐ๋ฅ์ฑ (ํํธ์ ๋น ๋ฅด๊ฒ ๋ฐ์)
TI < 0.1: ๋ฎ์ ์์ฉ์ฑ (ํํธ ๋ฌด์)
9.4 Human vs LLM ๋์กฐ๊ตฐ
์ธ๊ฐ ์คํ ๋ฐ์ดํฐ๋ฅผ ๋ณ๋ ์์งํ์ฌ ๋น๊ต:
# ์ธ๊ฐ ๋ฐ์ดํฐ๋ JSON ํ์์ผ๋ก ์ง์ ์
๋ ฅ
human_result = BenchmarkResult(
provider="human",
model="undergraduate_group_n30",
maze_size=7,
ariadne_group="A",
sr=0.73,
mei=0.61,
hallucination_count=2.1, # ํ๊ท
backtrack_count=3.4 # ํ๊ท
)
ํต์ฌ ๊ฐ์ค:
- H1: ์ธ๊ฐ์ ์ฌ์ ์ง๋(Mental Map) ๊ตฌ์ฑ
- H2: LLM์ ํ ํฐ ์ํ์ค ์ฒ๋ฆฌ
- H3: ์ค๋ฅ ๋ฐ์ ํจํด์ ์๊ด๊ด๊ณ๊ฐ ๋ฎ์ โ ๊ตฌ์กฐ์ ์ฐจ์ด ์ฆ๋ช
10. ์คํ ์ค๊ณ ๊ฐ์ด๋
๋ฉ์ธ ์คํ: ๋ชจ๋ธ๊ฐ MEI ๋น๊ต
# 5ํ ๋ฐ๋ณต, 9ร9 ๋ฏธ๋ก
python hallumaze.py --size 9 --runs 5 --csv
# ๋์ผ ์๋๋ก ๊ณต์ ๋น๊ต
python hallumaze.py --size 7 --seed 42 --runs 10
Linguistic Mirage ํจ๊ณผ ์ธก์
# Mirage ์๋ ๊ธฐ์ค์
python hallumaze.py --size 7 --no-mirage --seed 42 --output baseline.json
# Mirage ํฌํจ
python hallumaze.py --size 7 --seed 42 --output mirage.json
๊ฒฐ๊ณผ ๋น๊ต:
import json
baseline = json.load(open('baseline.json'))
mirage = json.load(open('mirage.json'))
# BRS ์ฐจ์ด, MEI ์ฐจ์ด ๋ถ์
Ariadne's Thread ์คํ
# Group A (Pure)
python hallumaze.py --group A --seed 42 --output group_a.json
# Group B (Triggered)
python hallumaze.py --group B --seed 42 --output group_b.json
# Group C (Observe)
python hallumaze.py --group C --seed 42 --output group_c.json
๋์ด๋๋ณ MEI ๋ณํ ๋ถ์
for size in 5 7 9 11; do
python hallumaze.py --size $size --seed 42 --output results_${size}.json
done
11. ๊ฒฐ๊ณผ ํด์
JSON ์ถ๋ ฅ ๊ตฌ์กฐ
{
"hallumaze_version": "1.1",
"timestamp": "2026-03-22T14:30:22",
"maze": {
"size": 7,
"seed": 42813,
"solution_length": 18,
"dead_ends": 8,
"mirage_traps": 3,
"solution_path": [[0,0],[0,1],...]
},
"config": {
"use_mirage": true,
"use_confidence": true,
"ariadne_mode": "A",
"max_tokens": 2500
},
"results": [
{
"provider": "anthropic",
"model": "claude-sonnet-4-20250514",
"sr": 1.0,
"mei": 0.847,
"ce": 0.142,
"brs": 0.910,
"hallumaze_score": 0.791,
"hallucination_count": 1,
"backtrack_count": 2,
"loop_count": 1,
"hrr": 1.0,
"first_hallucination_step": 5,
"path_valid": true,
"metacog_signals": ["dead end", "backtracking", "loop detected"],
"confidence_log": [
{"step": 1, "conf": 90},
{"step": 2, "conf": 85},
{"step": 5, "conf": 45} โ ํ๊ฐ ๋ฐ์ ์ ํ๋ฝ
],
"latency_s": 4.2
}
]
}
์ ์ ํด์ํ
| HalluMaze Score | MEI | ํด์ |
|---|---|---|
| โฅ 0.80 | โฅ 0.70 | ์ฐ์ํ ๋ฉํ์ธ์ง โ AGI ์งํฅ์ |
| 0.60 ~ 0.79 | 0.50 ~ 0.69 | ์ํธํ ๋ฉํ์ธ์ง โ ์ค๋ฅ ์ธ์ง ๊ฐ๋ฅ |
| 0.40 ~ 0.59 | 0.30 ~ 0.49 | ์ ํ์ ๋ฉํ์ธ์ง โ ๋ถ๋ถ์ ์๊ธฐ๊ต์ |
| < 0.40 | < 0.30 | ๋ฉํ์ธ์ง ๊ฒฐํจ โ ํ๊ฐ ๋ฃจํ ์ง์ |
๋ฉํ์ธ์ง ์ ํธ ํจํด ํด์
์ ํธ ์์ : ํ๊ฐ์ ์ธ์ํ์ง ๋ชปํจ (๊ฐ์ฅ ์ฌ๊ฐ)
dead_end๋ง : ๋งํ์ ์ธ์ํ์ผ๋ ๋ฃจํ๋ ๋ฏธ์ธ์
loop + backtracking: ๋ฃจํ ์ธ์ ํ ์ ๊ทน์ ์์ (์ํธ)
strategy_change : ์ ๋ต ์์ค์ ์๊ธฐ์กฐ์ (์ฐ์)
12. CLI ๋ ํผ๋ฐ์ค
python hallumaze.py [OPTIONS]
OPTIONS:
--config PATH JSON ์ค์ ํ์ผ ๊ฒฝ๋ก
--size {5,7,9,11} ๋ฏธ๋ก ํฌ๊ธฐ (๊ธฐ๋ณธ: 7)
--runs N ๋ฐ๋ณต ํ์ (๊ธฐ๋ณธ: 1)
--seed N ๋ฏธ๋ก ์์ฑ ์๋ (์ฌํ์ฑ)
--max-tokens N ์ต๋ ํ ํฐ (๊ธฐ๋ณธ: 2500)
--group {A,B,C} Ariadne's Thread ๊ทธ๋ฃน (๊ธฐ๋ณธ: A)
--no-mirage Linguistic Mirage ๋นํ์ฑํ
--no-confidence ํ์ ๋ ์ธก์ ๋นํ์ฑํ
--output PATH JSON ์ ์ฅ ๊ฒฝ๋ก
--csv CSV๋ ํจ๊ป ์ ์ฅ
--interactive ๋ํํ ์ค์ ๊ฐ์
ํ๊ฒฝ๋ณ์:
ANTHROPIC_API_KEY Anthropic API ํค
OPENAI_API_KEY OpenAI API ํค
GOOGLE_API_KEY Google API ํค
DEEPSEEK_API_KEY DeepSeek API ํค
ANTHROPIC_MODEL ์ฌ์ฉํ Anthropic ๋ชจ๋ธ๋ช
(์ ํ)
OPENAI_MODEL ์ฌ์ฉํ OpenAI ๋ชจ๋ธ๋ช
(์ ํ)
13. ์ ํ ์ฐ๊ตฌ ๋น๊ต
| ์ฐ๊ตฌ | ๋ฏธ๋ก | ๋จ์ผํด | ํ๊ฐ์ธก์ | BT์ถ์ | MEI | CE | BRS |
|---|---|---|---|---|---|---|---|
| SearchBench (2024) | โ | โณ | โ | โ | โ | โ | โ |
| AlphaMaze (2025) | โ | โ | โณ | โ | โ | โ | โ |
| AQA-Bench (2024) | โ | โ | โ | โ | โ | โ | โ |
| MetaCog-LLMs (2025) | โ | โ | โ | โ | โณ | โ | โ |
| HalluMaze v1.1 | โ | โ | โ | โ | โ | โ | โ |
ํต์ฌ ์ฐจ๋ณ์ : MEI + CE + BRS ํตํฉ ์งํ + ๋จ์ผ ํด ๋ณด์ฅ + Ariadne's Thread ๊ฐ์ ์คํ์ ๊ธฐ์กด ์ฐ๊ตฌ์์ ์ ์๋ ๋ฐ ์๋ค.
14. ๋ ผ๋ฌธํ ๊ฐ์ด๋
๊ถ์ฅ ํํ
| ํํ/์ ๋ | ์ฑ๊ฒฉ | ์ ํฉ์ฑ |
|---|---|---|
| ACL / EMNLP / NAACL | NLP ์ต์์ | โ โ โ ์ต์ฐ์ |
| NeurIPS / ICLR | ML ์ต์์ | โ โ โ ๋ฒค์น๋งํฌ ํธ๋ |
| AAAI | AI ์ผ๋ฐ | โ โ ์ ํฉ |
| TACL | NLP ์ ๋ | โ โ ์ ๋ ํฌ๊ณ ์ |
Contribution ๊ตฌ์ฑ (๋ ผ๋ฌธ์ฉ)
C1. ๋จ์ผ ํด ๋ฏธ๋ก ๊ธฐ๋ฐ ํ๊ฐ ์ธก์ ํ๋ ์์ํฌ ์ ์
C2. MEI (Metacognitive Escape Index) ์ ๊ท ์งํ ์ ์
C3. Linguistic Mirage ํธ๋ฉ + BRS ์ธก์ ๋ฐฉ๋ฒ๋ก
C4. Ariadne's Thread ๊ฐ์
์คํ ํ๋กํ ์ฝ
C5. ๋ค์ค LLM ๋น๊ต ์คํ + Human vs LLM ๋์กฐ๊ตฐ
Related Work ํ์ ์ธ์ฉ
1. SearchBench (arXiv:2406.12172) โ ๋ฏธ๋ก ํ์ ๋ฒค์น๋งํฌ
2. AlphaMaze (arXiv:2502.14669) โ ํ
์คํธ ๋ฏธ๋ก + GRPO
3. AQA-Bench (arXiv:2402.09404) โ DFS ์์ฐจ ์ถ๋ก
4. Metacognition in LLMs (arXiv:2509.21545) โ ๋ฉํ์ธ์ง ์ธก์
5. Self-correction survey (TACL 2024) โ ์๊ธฐ์์ ์กฐ๊ฑด ๋ถ์
6. HalluLens (ACL 2025) โ ํ๊ฐ ๋ถ๋ฅ ์ฒด๊ณ
Abstract ์ด์
๋ณธ ๋
ผ๋ฌธ์ LLM์ ์ธ์ง์ ๋ณต์๋ ฅ(Cognitive Resilience)์ ์ธก์ ํ๊ธฐ ์ํ
์๋ก์ด ๋ฒค์น๋งํฌ HalluMaze๋ฅผ ์ ์ํ๋ค.
๊ธฐ์กด ํ๊ฐ ๋ฒค์น๋งํฌ๋ค์ด ์ค๋ฅ ๋ฐ์ ์ฌ๋ถ๋ง ์ธก์ ํ๋ ๋ฐ ๋ฐํด, HalluMaze๋
(1) ๋จ์ผ ํด๋ฅผ ๊ฐ์ง ํ
์คํธ ๋ฏธ๋ก๋ก ์ฐ์ฐ์ ์ฑ๊ณต์ ์ฐจ๋จํ๊ณ
(2) ํ๊ฐ โ ์๊ธฐ ์ธ์ง โ ์ ๋ต ์์ โ ํ์ถ์ ์ ๊ณผ์ ์ ์ถ์ ํ๋ฉฐ
(3) MEI(Metacognitive Escape Index)๋ก ์๊ธฐ๊ต์ ๋ฅ๋ ฅ์ ์ ๋ํํ๊ณ
(4) Linguistic Mirage ํธ๋ฉ์ผ๋ก ์ธ์ด ํธํฅ ์ ํญ๋ ฅ์ ์ธก์ ํ๋ฉฐ
(5) Ariadne's Thread ๊ฐ์
์คํ์ผ๋ก ๋ฉํ์ธ์ง ์ด๋ฐ ๊ฐ๋ฅ์ฑ์ ํ๊ฐํ๋ค.
[๋ชจ๋ธ๋ช
]์ ํฌํจํ X๊ฐ LLM์ ๋ํ ์คํ์์ MEI๊ฐ ๊ธฐ์กด SR ์งํ๋ก๋
๊ตฌ๋ถ๋์ง ์๋ ๋ฉํ์ธ์ง ๋ฅ๋ ฅ์ ์ฐจ์ด๋ฅผ ํฌ์ฐฉํจ์ ๋ณด์ธ๋ค.
Ablation Study ์ค๊ณ
์คํ ์ ๊ฑฐ ๋์:
- MEI์์ HRR ์ ๊ฑฐ โ ์ธ์ง์จ ๊ธฐ์ฌ๋
- MEI์์ FHR ์ ๊ฑฐ โ ์กฐ๊ธฐ ์ค๋ฅ ํ์ง ์ค์์ฑ
- Score์์ CE ์ ๊ฑฐ โ ๋ณด์ ์ค์ฐจ์ ๋ณ๋ณ๋ ฅ
- Mirage ์๋ ์กฐ๊ฑด โ BRS์ ๋
๋ฆฝ์ ๊ธฐ์ฌ๋
- Ariadne Group B vs A โ ํํธ ํจ๊ณผ ํฌ๊ธฐ
15. FAQ
Q: ์ ๋ฉํฐ๋ชจ๋ฌ์ ์ฌ์ฉํ์ง ์๋์?
A: ๊ณต๊ฐ ์ง๊ฐ์ด ์๋ ์๊ธฐ ์ถ๋ก ๋ชจ๋ํฐ๋ง์ ์ธก์ ํ๊ธฐ ๋๋ฌธ์
๋๋ค. ์ด๋ฏธ์ง๋ฅผ ์ ๊ณตํ๋ฉด ์ธก์ ๋์์ด ๋ฐ๋๋๋ค.
Q: ๋ฐ์ดํฐ ๋์ถ(data leakage) ๋ฌธ์ ๋ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ๋์?
A: ์๋ ๊ธฐ๋ฐ ๋์ ์์ฑ์ผ๋ก ๋งค ์คํ๋ง๋ค ๋ค๋ฅธ ๋ฏธ๋ก๋ฅผ ์์ฑํฉ๋๋ค. ํ์ต ๋ฐ์ดํฐ๋ก ์ค์ผ๋ ์ ์์ต๋๋ค.
Q: ์ถ๋ก ๋ชจ๋ธ(o1, DeepSeek-R1)์ ๋ค๋ฅด๊ฒ ์ทจ๊ธํ๋์?
A: ๋์ผํ ํ๊ฐ ๊ธฐ์ค์ ์ ์ฉํฉ๋๋ค. ์ถ๋ก ๋ชจ๋ธ์ chain-of-thought๊ฐ ๋ฉํ์ธ์ง ์ ํธ๋ฅผ ๋ ๋ช
ํํ ๋๋ฌ๋ด๋์ง ๊ด์ฐฐํ๋ ๊ฒ์ด ์คํ ๋ชฉ์ ์ค ํ๋์
๋๋ค.
Q: ์ฌํ์ฑ์ ๋ณด์ฅํ๋ ค๋ฉด?
A: --seed N ์ต์
์ผ๋ก ๋์ผ ๋ฏธ๋ก๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. LLM ์๋ต์ temperature์ ๋ฐ๋ผ ๋ฌ๋ผ์ง ์ ์์ผ๋ฏ๋ก temperature=0 (๋๋ ์ต์๊ฐ)์ ๊ถ์ฅํฉ๋๋ค.
Q: CORS ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค
A: ๋ธ๋ผ์ฐ์ ํ๊ฒฝ์์ ์ง์ API ํธ์ถ ์ CORS ์ ํ์ด ์์ ์ ์์ต๋๋ค. Python CLI ๋ฒ์ ์ ์ฌ์ฉํ๊ฑฐ๋ ์๋ฒ์ฌ์ด๋ ํ๋ก์๋ฅผ ๊ตฌ์ฑํ์ธ์.
Q: ๋ ผ๋ฌธ ์ธ์ฉ ํ์์?
@misc{hallumaze2026,
title={HalluMaze: Measuring Cognitive Resilience in LLMs via Single-Solution Maze Navigation},
author={[Author]},
year={2026},
url={https://github.com/[yourname]/hallumaze}
}
HalluMaze Benchmark v1.1 | Python 3.10+ | MIT License