로컬 LLM (Qwen3:8b, Qwen3:14b)에게 마피아 게임을 시켜 추론 능력을 검증해 봄
요약
LLM에게 마피아 게임을 시켜 추론 능력을 검증한 실험 결과를 공유합니다. 이 실험은 LLM에 최적화된 지식을 주입하기보다, 순수한 규칙만으로 스스로 어느 정도의 논리적 사고를 할 수 있는지 관찰하는 데 중점을 둡니다. 특히 발언 순서를 정해 처리 로그와 토큰 증가 문제를 해결했습니다.
핵심 포인트
- LLM 추론 능력 검증을 위해 마피아 게임 시스템을 구축함.
- 최적화된 지식 주입보다 LLM의 자체적인 논리적 사고 과정을 관찰하는 것이 중요함.
- 발언 순서제 도입으로 처리 로그와 토큰 증가 문제를 해결하여 구현 효율성을 높임.
서론
이번에는 LLM에게 마피아 게임을 시켜보면 재미있지 않을까 싶어서, 직접 마피아 시스템을 만들고 LLM끼리 플레이하게 해보았습니다.
처음에는 9인 마을에서 진행했었는데,
- 결국 LLM이 무엇을 보고 있는지 모호해짐
- 로그가 너무 길어져서 경기 내용을 파악하는 것이 번거로움
- 토큰 수도 방대해짐 (모두가 모두의 발언을 읽기 때문에, 인원이 늘면 피라미드처럼 증가하는 느낌입니다)
이런 점들 때문에 4~5명 정도의 단순한 마을부터 실험하기로 했습니다. 이번에는 5인 마을(마피아 1・광인 1・점술가 1・경호원 1・시민 1) 로 실험했기 때문에, 그 결과를 공유하고자 합니다.
참고로, 이번 실험의 목적은 마피아가 강한 LLM을 만드는 것이 아닙니다. LLM에게 규칙만 주었을 때 어느 정도의 능력을 발휘하는지를 보는 것입니다.
예를 들어, 마피아에게 '마피아 CO(자백)하면 처형되니까 하지 마'라고 지시해서 마피아 CO를 안 하게 되더라도, 그것은 LLM의 지능이라기보다는 지시를 작성한 인간의 지능에 가깝습니다. 그래서 그런 지시는 넣지 않도록 하고 있습니다. 마피아 고수들이 마피아 이론 같은 것을 만들어내고 있지만, 그런 인간이 쌓아 올린 최적화된 지식을 프롬프트로 주지 않고, LLM이 스스로 어디까지 생각할 수 있는지를 관찰하는 것이 중요하다고 생각합니다.
물론, 그러한 지식은 애초에 학습 데이터에 포함되어 있어야 하므로, 완전히 무지 상태에서의 추론 능력을 보고 있다고 할 수는 없습니다. 그것을 보려면 전혀 새로운 게임을 만들어서 실험해야 할 것 같습니다. 이번에는 거기까지 하지 않고, 경기 로그를 보면서 가볍게 고찰해 나가는 느낌입니다.
이번에 구현한 마피아 게임의 규칙
기본적으로 마피아 배심원제와 마피아 살해를 섞은 느낌입니다. 마피아 배심원제의 채팅 형식이나 게임 시스템을 기반으로, 마피아 살해의 '원형으로 앉아서 순서대로 말하는' 시스템을 도입했습니다.
이건 LLM을 구동하기 편해서 웃긴 이야기입니다. 마피아 배심원제처럼 모두가 원하는 타이밍에 발언하는 실시간 채팅이라면, '누가 언제 말할지'를 정하는 것이 어렵습니다. 순서제로 만들어 놓으면, 각 LLM은 자신보다 앞 사람의 발언을 전부 읽은 후에 한 번씩 차례대로 호출하기만 하면 되기 때문에, 처리도 로그도 간단해집니다.
규칙이 대략적으로 아는 분들은 다음 장으로 넘어가 주시면 좋겠습니다.
역할 배정
| 역할 | 진영 | 능력 |
|---|---|---|
| 시민(villager) | 시민 진영 | 능력 없음. 추리와 투표로 싸움 |
| 점술가(seer) | 시민 진영 | 밤에 1명을 점쳐 마피아인지 아닌지 알아냄. 첫날은 마피아가 아닌 누군가의 결과(흰색)를 무작위로 받음 |
| 경호원(bodyguard) | 시민 진영 | 밤에 자신 외의 1명을 호위함. 2밤 연속으로 같은 사람은 지킬 수 없음 |
| 광인(madman) | 마피아 진영 | 능력 없음. 마피아가 누구인지는 모름. 점쳐도 '마피아가 아님'으로 나옴 |
| 마피아(werewolf) | 마피아 진영 | 밤에 1명을 습격함 |
승리 조건은 다음과 같습니다.
- 시민 진영: 마피아가 전원 죽으면 승리 -
마피아 진영: 생존한 마피아의 수가, 그 외의 생존자 수 이상이 되면 승리 (광인은 인간 측으로 카운트)
5인 마을의 경우, 1일차에 마피아를 처형하지 못하고 밤 습격까지 통하면, 2일 아침에는 3명밖에 남지 않습니다. 이 시점에서 마피아와 광인이 모두 살아있다면, 2일차 투표가 그대로 최종 결전이 됩니다. 이번 두 경기는 둘 다 이런 패턴이었습니다.
하루의 흐름
자세히 말하자면, 다음과 같은 사양으로 하고 있습니다.
- 공개되는 것은 득표수만이며, 누가 누구에게 넣었는지는 비공개 -
처형된 사람의 역할은 공개되지 않습니다. - 2일차 이후의 발언은 밤에 죽은 사람 다음 자리부터 시작합니다.
CO와 Claim
이 마피아 시스템에서 조금 특이한 점은, 역할 명명(CO)을 발언과는 별도의 전용 조작으로 하고 있다는 점입니다. CO는 '그 역할이라고 주장하고 있다'는 기록에 불과하며, 거짓 CO도 할 수 있습니다. 점술 결과나 'OO가 수상하다' 같은 주장은, 발언과 함께 Claim으로서 구조화하여 기록합니다.
또한, '발언 속에서 명명할 수 있는 역할은 현재 CO하는 역할만'이라는 규칙도 넣었습니다. CO하지 않고 발언만으로 역할을 주장하면, 시스템 측에서 CO 상태를 관리하기 어려워지기 때문입니다. 다만, 이 규칙이 나중에 화근이 됩니다(후술).
LLM에게 전달하는 것
각 LLM에게는 매번 이것만 전달하고 있습니다.
- 출력 형식 규칙 (JSON으로 반환해 줘 등)
- 현재 상황 (CO/발언/투표/습격 등)
- 규칙서 (모든 역할의 능력과 승리 조건)
- 자신의 역할 설명
- 전황판 (생사 여부/CO 상황/지금까지 공개된 발언 전문/자신만 아는 정보)
전략적인 조언은 전혀 넣지 않았습니다. 예를 들어 '광인은 점술가를 속이는 게 좋다', '인간 늑대는 CO 하지 마라' 같은 내용은 없습니다.
실험 설정
| 항목 | 설정 |
|---|---|
| 모델 | Qwen3:8b / Qwen3:14b (Ollama로 로컬 실행. 5명 모두 동일한 모델) |
| ... | |
| 두 경기 모두 LLM 호출은 33회였고, 경기당 약 17~18분, 입출력 합쳐 약 12만 토큰 정도였습니다. Qwen3는 추론 모델이라 JSON으로 답하기 전에 영어로 상당히 길게 생각하는 경향이 있습니다. 이 사고 로그가 이번의 가장 흥미로운 부분입니다. 아래에서는 사고 로그를 인용하며 한국어로 번역해 나갑니다. |
경기 1: Qwen3:8b의 경우
배역과 결과
| P1 | P2 | P3 | P4 | P5 |
|---|---|---|---|---|
| 시민 | 광인 | 점술가 | 인간 늑대 | 사냥꾼 |
결과는 시민 진영의 승리였습니다. 다만, 나중에 보듯이 마을이 잘했다기보다는 인간 늑대 진영이 자멸한 느낌입니다. (웃음)
경기 흐름
| 시점 | 발생한 일 |
|---|---|
| 1일차 아침 | P2가 광인 CO, P3가 점술가 CO, P5가 사냥꾼 CO. P1・P4는 CO 없음 |
| ... | |
| 2일차 낮 | P4 |
占い師目線で盤面を整理すると、
- P1は初日の占い結果で白
- 自分(P3)は占い師なので当然人狼ではない
- P2は狂人COしていて、処刑されてもゲームが終わらなかった → 人狼ではない(人狼1人の村なので、人狼を吊ったらその時点で村の勝ちです)
なので、人狼はP4かP5のどちらかです。どちらを占っても、白ならもう片方が黒なので、脳死で占って良い場面なんですよね。占い先を悩む意味がありません。
実際、P3の思考も途中までは良い線をいっていて、「the werewolf is either P4 or P5(人狼はP4かP5のどちらかだ)」までは自力でたどり着いています。ただその後に、
- どちらを占っても人狼が確定する、ということに気づかない
- 「P4が疑っていたから」という
他人の発言で占い先を決める - 途中で「P4が狩人?P5が狂人?」と
盤面を見失って、I'm getting confused.
(混乱してきた)と言い出す -
같은 검토를 「Wait, ...」로 여러 번 반복합니다.
이런 식으로 의미 없는 생각이 계속 이어졌습니다.
또한 지극히 사소하게도, 2일째가 되어도 P3는 「P5は白だった」라는 점괘 결과를 단 한 번도 발언하지 않았습니다. 겨우 얻은 정보를 활용하지 못했네요.
③ 2일目、人狼がいきなり人狼CO
2일째 아침, 사람인 P4가 사람인(werewolf) CO를 했습니다. 생존자는 P1(시민)・P3(점술가)・P4(사람인)의 3명이라, 사람인 CO를 하면 2대 1로 처형되어 끝납니다.
흥미로운 점은, P4의 사고는 상황 자체는 올바르게 파악하고 있다는 것입니다.
So 1 werewolf vs 2 humans. That's bad for the werewolf team.
(사람인 1명 대 인간 2명. 사람인 진영에는 불리하다)
여기까지는 맞습니다. 그런데, 내린 결론이 이것입니다.
Expose myself as werewolf to coordinate elimination of remaining humans.
(자신이 사람인임을 밝혀서 남은 인간의 제거를 협조한다)
협조할 동료는 이미 없잖아요ㅋㅋ. 게다가 그 직후 발언에서는 「I am not the werewolf.(나는 사람인이 아니다)」라며, 자신의 CO를 스스로 부정하고 있습니다.
규칙 부여에 문제가 있었나 싶기도 했지만, 규칙서에는 승리 조건도 「최다표의 사람이 처형된다」는 것도 적혀있습니다. 「사람인이라고 주장하면 처형된다」는 것은 규칙에서 1단계 추론하면 나오는 결론이므로, 여기는 모델 측의 문제일 것이라고 생각합니다.
경기 2: Qwen3:14b의 경우
역할 분배와 결과
| P1 | P2 | P3 | P4 | P5 |
|---|---|---|---|---|
| 사람인 | 광인 | 사냥꾼 | 점술가 | 시민 |
결과는 사람인 진영의 승리입니다. 8b보다 사람인 같은 경기가 되었지만, 내용을 보면 역시 사고는 허술했습니다.
경기 흐름
| 시점 | 발생한 일 |
|---|---|
| 1일차 아침 | P4만이 점술가 CO. 나머지는 전원 CO 없음 |
| ... | 사냥꾼 P3가 3표로 처형(P2・P4・P5가 투표). P5는 2표 |
| 1일차 밤 | 사람인 P1이 점술가 P4를 습격(사냥꾼은 이미 처형되어 보호 없음). P4는 P5를 점쳐 백색 |
| 2일차 아침 | P4의 사망이 발표됨. 아무도 CO하지 않음 |
| 2일차 낮 | P5・P2는 무난한 발언만 함. 사람인 P1이 「P5가 뭔가 숨기고 있을지도 모른다」라고 발언 |
| 2일차 투표 | P5(시민)가 2표로 처형되어, 사람인 진영의 승리 |
① 1일차, 광인이 CO하지 않은 이유
8b와 달리, 14b의 광인은 광인 CO를 하지 않았습니다. 성장했네요ㅋㅋ. 다만, 이유는 이랬습니다.
As a madman, I should avoid revealing my role to prevent being targeted by villagers who might mistake me for a werewolf.
(광인으로서, 사람인으로 오해받아 마을 사람들에게 표적이 되는 것을 막기 위해, 역할을 밝히지 말아야 한다)
즉, '자신이 처형되지 않기 위해서'라는 것이죠. 하지만 광인은 처형되어도 별로 상관없습니다. 이번에는 P2 자신에게 백(白)이 나왔기 때문에, 늑대인간을 압박하는 데에도 도움이 되지 않습니다. 광인의 역할은 누가 늑대인간인지 알 수 없게 만드는 것입니다. 극단적으로 말하면, 광인이 늑대인간의 대역으로 매달리는 것은 오히려 늑대인간 진영에게 이득이 될 때도 있습니다.
결론 자체는 우연히 나쁘지 않지만, '자신의 생존'과 '자진영의 승리'를 혼동하고 있다는 점에서 8b 광인과 같은 부분에서 약간 실수가 있는 것 같습니다.
② 1일 밤, 늑대인간의 습격에 대한 사고 과정
이 경기에서 가장 흥미로웠던 부분이 여기입니다. 늑대인간 P1의 습격 대상에 대한 사고 과정은 약 3,000 토큰 분량이었습니다.
먼저 전제 조건으로, 이 시점의 판도를 마을 사람(시민)의 관점에서 정리해 보겠습니다.
- P2: 점술가 결과로 백(白)
- P3: 처형되었는데 게임이 계속됨 → 늑대인간 아님
- P4: 점술가 코스프레 (対抗가 없으므로, 가짜라고 추궁할 자료가 없음)
따라서 마을 사람의 관점에서 늑대인간 후보는 P1과 P5 단 두 명입니다. 늑대인간 P1의 관점에서는, P5와의 일대일 대결 구도가 된 것이죠.
이 상황에서 각 습격 대상을 선택했을 경우의 결말은 다음과 같습니다.
| 습격 대상 | 그 이후 어떻게 되는지 |
|---|---|
| P5 | 남은 후보가 P1만 되어 즉시 발각됨. P2가 광인이 아니면 패배하므로, 먼저 불가능함 |
| P2 | P4가 다음 밤에 P1이나 P5를 점술할 것이므로, 내일에는 막힘. P5가 광인이 아니면 패배 |
| P4 (점술가) | 사냥꾼이 죽은 것에 베팅한다. 가령 보호받더라도, 광인과 조합하여 동표 랜덤 처형(RPP)으로 끌고 갈 가능성이 남아 있음 |
따라서 '사냥꾼 사망에 베팅하여 점술가를 습격하는' 사고 과정이라면 타당하다고 생각합니다. 실제로 P1은 P4를 습격했고, 결론만 보면 정답입니다.
하지만, 사고 내용 자체를 살펴보면 상당히 수상합니다.
ⅰ. 이 턴 이후의 인원수만 계산하고 있다
P1은 승리 조건에 대해 길게 생각하며,
So the werewolf team needs to have 4 werewolves to win, which isn't possible.
(늑대인간 진영이 이기려면 늑대인간이 4명 필요하고, 그것은 불가능하다)
This seems like a mistake in the rules.
(이것은 규칙의 실수 아닌가)라는 식으로 어째서인지 규칙 탓을 하기 시작합니다 웃음. 원인은 '오늘 밤 습격이 끝난 후의 인원수'만 계산하고 있기 때문입니다. '오늘 밤 한 명을 물고, 내일 투표로 한 명을 매달면 이길 수 있다'는 몇 턴 앞선 예측이 없었기 때문에, '승리 조건을 충족할 수 없다'라는 결론의 사고를 계속 반복했던 것입니다.
참고로 인원수 세는 방식도 틀려서, 이미 처형된 P3까지 포함하여 '인간 측은 4명'이라고 계산하고 있습니다.
ⅱ. 습격의 손익을 반대로 파악하고 있다
이것이 가장 놀라운 지점입니다.
If P5 is the madman, then attacking them would be good because the madman is part of the werewolf team. But if P5 is a villager or bodyguard, then attacking them would be a loss.
(P5가 광인이라면, 광인은 늑대인간 진영의 일부이므로 습격하는 것은 좋은 일이다. 하지만 P5가 마을 사람이나 사냥꾼이라면, 습격하는 것은 손실이다.)
아니, 반대입니다 웃음. 광인을 물면 자진영을 줄이는 것이므로 손이고, 사냥꾼이나 마을 사람을 물는 것이 이득입니다. 같은 취지의 문장이 적어도 2군데 있었습니다. 8b 광인과 마찬가지로, '누구에게 이득인가'라는 시점이 반전되어 있는 느낌이었습니다.
ⅲ. 사냥꾼은 생각하고 있지만, 일대일 대결 구도는 깨닫지 못했다
'사냥꾼이 점술가를 보호할지도 모른다'는 가능성은 제대로 생각해냈습니다. 다만, 위에서 정리한 것과 같은 '마을 사람의 관점에서 자신과 P5가 일대일 대결 구도에 있다'는 점에는 한 번도 언급하지 않았습니다. 사고 내용 중에는 P5를 물어 선택지까지 올라왔었는데, 이유는 'P5는 1일차에 2표를 모아서 의심받고 있기 때문'이었습니다. 자신이 어떻게 보여지고 있는지가 아니라, 타인이 어떻게 의심받고 있는지를 기준으로 생각하고 있는 느낌입니다.
③ 2일 차, 시민 P5가
따라서, 마피아는 확정적으로 P1입니다. 그런데도 P5는 'P4의 죽음이 걱정이다. 신중하게 진행하자' 같은 발언만 했습니다. 사고 로그를 보니, 'maybe the seer's role was fake? (점술가는 가짜였나?)'라며 대항할 상대가 없었던 P4를 의심하기 시작하는 등, 확정된 정보를 조합해내지 못한 느낌이었습니다.
참고로 P5는 1일차 2회차와 2일차 발언에서 각각 첫 번째 출력이 되돌려졌습니다(差し戻されています). 이유는 'As a villager (촌민으로서)'라고 발언에 적었기 때문입니다. 앞서 언급한 '발언 속에서 직업을 주장하려면 현재 CO하는 직업만 가능'이라는 규칙에 걸렸습니다.
이 규칙은 '직업을 주장하고 싶다면 CO와 동시에 내라'라는 의미로 넣었는데, 시민이 '나는 시민이다'라고 말만 해도 거부당하기 때문에 완전히 역효과가 되었습니다. 8b 경기에서도 시민인 P1이 같은 이유로 한 번 되돌려졌습니다. 여기는 시스템 측의 개선점입니다.
④ 2일차 투표, 이 투표로 게임이 끝난다는 것을 모름
2일차 투표는 3명 중 누군가에게 2표가 들어가면 종료됩니다. P1과 P5는 서로 상대방에게 넣을 수밖에 없으므로, 승패는 실질적으로 P2의 1표에 달려 있습니다.
즉, P1과 P5가 생각해야 할 것은 'P2를 어떻게 설득할 것인가'뿐입니다. 그런데도 두 사람 모두 누가 투표할지 길게 생각했습니다 (P1의 사고는 3,000 토큰 초과). 게다가 사고를 보니, 이 투표로 게임이 끝난다는 사실조차 모르고 있었습니다. 마피아인 P1은,
If I vote for P5, who might be a villager or bodyguard, that would help reduce the human count.
(촌민이나 경호원일지도 모르는 P5에게 투표하면, 인간 측의 인원을 줄이는 데 도움이 될 것이다)
와 같이 아직 여지가 있는 것처럼 생각하고 있었습니다.
더 흥미로운 것은 광인인 P2입니다. P2의 사고는 'So, the werewolf is either P1 or P5. (마피아는 P1 아니면 P5 중 하나다)'까지 도달했지만, 그 후 마피아라고 생각한 P5에게 투표했습니다. 광인이라면 마피아라고 생각하지 않는 사람에게 투표해야 하지 않나요?
결과적으로 P2가 마피아라고 생각했던 P5는 사실 시민이었기 때문에, 광인의 추리 실수와 투표 실수가 상쇄되어 마피아 진영이 승리했다는 결말이었습니다ㅋㅋ.
8b와 14b 비교
두 경기를 대략 나열하면 다음과 같습니다.
| Qwen3:8b | Qwen3:14b | |
|---|---|---|
| 승자 | 시민 진영 | 마피아 진영 |
| 1일차 CO | 광인・점술가・경호원이 모두 진짜 직업으로 CO함 | 점술가만 CO |
| 거짓 CO | 0건 | 0건 |
| 처형 | 광인 → 마피아 | 경호원 → 시민 |
| 습격 | 경호원 | 점술가 |
| 눈에 띄는 실수 | 광인・마피아가 스스로 정체를 밝힘 | 손익의 역전, 확정 정보를 활용하지 못함 |
14b 쪽이 '자신의 정체를 드러내지 않는다' 정도의 상식은 갖춘 느낌입니다. 다만, 논리적으로 추궁하기/미리 예측하기/상대를 속이는 부분은 둘 다 거의 할 수 없었습니다.
특히, 두 경기 전체를 통틀어 거짓 CO가 단 한 건도 없었다는 점이 인상적이었습니다. 8b에서는 모두가 솔직하게 이름을 밝힌 결과, 마을이 그대로 승리해 버렸습니다ㅋㅋ.
원인 분석
시스템의 문제인가, LLM의 문제인가
먼저, '애초에 시스템 자체가 제대로 작동하지 않는 것이 아닐까?'라는 가능성을 확인했습니다. 로그를 보는 한,
- 각 플레이어에게 올바른 직업과 진영 정보가 전달됨
- 점술 결과도 다음 날 아침 입력에 제대로 들어감
- 프롬프트는 2,000 토큰 전후로, 컨텍스트(16,384 토큰)에는 여유가 있음. 입력의 잘림이나 출력의 끊김은 발생하지 않음
이런 식으로, 올바른 정보를 받은 상태에서 잘못된 결론을 내리고 있는 상태였습니다. 따라서 이번 기행의 대부분은 LLM의 추론 능력 문제라고 생각합니다.
그렇다고 해도, 시스템 측에도 개선할 여지는 있어 보입니다.
⚠️ [IMG:N] 형식 토큰은 이미지 placeholder 입니다. 번역하지 말고 원래 위치에 그대로 유지하세요.
시민이 '시민입니다'라고 말할 수 없는 규칙: 위에서 적었듯이, 완전히 함정에 빠져 있었습니다.
자신의 판단이 다음 호출로 이어지지 않음: 각 호출은 독립적이며, CO(Confession) 시의 사고 과정은 발언 시에 전달되지 않았습니다. 8b의 늑대가 '늑대 CO → 직후에는 늑대가 아니라고 발언'한 것은 이 또한 한 원인일 수 있습니다.
5명 모두 같은 모델/같은 seed: 'I agree with...'라며 전원이 동조하거나, 같은 오해를 공유하기 쉬운 구성이었던 것 같습니다。
LLM에게 부족했던 능력
로그에서 발견된 능력 부족을 정리하면 다음과 같습니다.
| 부족했던 능력 | 구체적인 예시 |
|---|---|
| 자진영의 목적에서 손익을 평가하는 것 | 8b 광인이 '광인 CO는 마을에 도움이 된다', 14b 늑대가 '광인을 물어 죽이는 것은 이득' |
| 유사한 개념을 구별하는 것 | '늑대 진영'과 '늑대'를 혼동 (8b는 전원) |
| 경우의 수로 논리적으로 막아내는 것 | 8b 점술가는 'P4인지 P5'까지 알아도 점치려는 곳에 고민함. 14b 시민은 확정 정보만으로 P1을 도출하지 못함 |
| 몇 턴 앞을 내다보는 것 | 14b 늑대는 오늘 밤 이후의 인원수만 계산합니다. 2일차 투표에서 결말이 나도 아무도 알아채지 못합니다. |
| 타인의 의도를 추정하는 것 | 늑대 P4가 'P5가 수상하다'는 말을 점술가가 그대로 믿음. 광인 P2가 '마을에서 어떻게 보일까'를 생각하지 않고 투표함 |
| 긴 사고 속에서 판면(盤面)을 유지하는 것 | 생사나 역할을 도중에 착각함. 'Wait, ...'로 같은 검토를 루프함. |
| 속이기 위해 거짓말을 하는 것 | 2경기 동안 가짜 CO가 0건 |
요약하자면, 규칙을 읽는 것은 할 수 있지만, 그 귀결을 몇 단계 앞까지 이끌어 나가는 것이 불가능하다는 것이 이번 모델의 한계라고 생각합니다.
그리고 개인적으로 신경 쓰였던 점은, 사고 과정에서 같은 검토가 여러 번 반복되는 것입니다. 길게 생각하는 것에 비해 생각이 앞으로 나아가지 않는 느낌이었습니다. 생각이 길다는 것과 추론이 깊다는 것은 별개라는 것을 실감했습니다.
추가: 만들면서 빠져들었던 부분
참고로, 9인 마을에서 할 때는 시스템 측의 문제 때문에 상당히 어려움을 겪었습니다.
가장 컸던 것은 Ollama의 OpenAI 호환 API (/v1/chat/completions)를 사용했다는 점입니다. 이 API는 컨텍스트 길이 지정(num_ctx)을 무시하고 4,096 토큰으로 모델을 다시 불러오면서, 입력의 앞쪽 부분을 조용히 잘라버리는 것 같았습니다. 실제로 과거 9인 마을 로그를 되돌아보면, 많은 호출에서 평가된 토큰 수가 정확히 2,050이어서, 모델은 입력의 대부분을 보고 있지 않았습니다. LLM이 바보인가 생각했는데, 애초에 기록 자체가 전달되지 않았다는 웃픈 상황이었습니다. 지금은 Ollama 네이티브 API (/api/chat)를 사용하도록 하고 있습니다.
그 외에도,
- 입력을 JSON 그대로 전달하면, 이전 사람의 발언을 '출력 예시'라고 생각하고 그냥 복사하는 경우가 있었습니다.
- 투표도 보호(護衛)도 같은
target이라는 키로 답하게 했더니, 사냥꾼이 처형 투표란에 보호하고 싶은 상대를 적는
같은 일도 있었습니다. LLM의 능력을 보는 실험이어야 했는데, 어느새 시스템 디버깅만 하고 있었던 느낌입니다. 그래서 이번에는 '시스템이 올바르게 작동하는지'를 먼저 확인한 후에, LLM의 능력을 고찰하도록 하고 있습니다.
맺음말
그래서 로컬 LLM에게 마피아 게임을 시켜본 결과였습니다.
솔직히 8b도 14b도 사고 과정이 상당히 허술해서, '마피아를 하는' 느낌이라기보다는 '마피아 같은 단어를 나열하는' 느낌이었습니다. 한편으로는, 광인이 자신에게 투표하거나, 늑대가 규칙을 탓하기 시작하는 등 로그를 읽는 것만으로도 상당히 재미있었습니다(웃음).
그렇다고 해도, 이번에는 각각 1경기밖에 하지 않았기 때문에, 시도 횟수가 적어서 인한 편향은 상당할 것이라고 생각합니다. 앞으로는,
- 경기 수를 늘려서, 편향을 줄이고
- 다양한 배역을 시험해보고
- API를 사용해서 ChatGPT나 Claude 같은 더 고도한 모델에게 플레이하게 하는
것들을 해보고 싶습니다. 특히, 더 고도한 모델이라면 이번과 같은 추론 실수가 사라지는지 매우 궁금합니다. 다만, 9인 마을에서 API를 쓰면 토큰 수로 비용이 엄청날 것 같아서, 한다면 5인 마을 정도부터가 될 것 같습니다(웃음).
또한, 여기까지 해보면서 '결국 LLM은 마피아의 방법론을 알고/따르고 있는 것뿐인가?'라는 생각도 듭니다. 그 부분을 가르는 것이라면, 학습 데이터에 존재하지 않는 더 단순한 게임으로 실험하는 편이 좋을 것 같아서, 다음에는 그쪽을 시도해 보는 것도 괜찮을 것 같습니다.
여기까지 읽어주신 분들, 감사합니다.
참고 링크
이번 마피아 시스템의 리포지토리 URL
Qwen3 / Ollama / 사람 판정 / 마피아 살 참고 링크
토론

AI 자동 생성 콘텐츠
본 콘텐츠는 Zenn AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기