ローカルLLM(Ollama)を使ったワンナイト人狼ゲームです。LLMがNPCプレイヤーとして議論・推理・投票を行い、ユーザーが対話形式でゲームに参加できます。
- 5人プレイ: LLM 4人 + ユーザー 1人
- 7役職から4つをランダム選択: 人狼、狂人、占い、吊人、独裁、狩人、村人
- RAGベースの戦略: 役職の組み合わせに応じた戦略ファイルをLLMに提供
- 質問フェーズ: NPCに直接質問して情報を引き出せる
- Web GUI対応: Gradioによるブラウザインターフェース
- Python 3.8以上
- Ollama (ローカルLLM実行環境)
- Gradio (GUI使用時)
# Ollamaをインストール後、モデルをダウンロード
ollama pull qwen2.5:72b
# Gradio (GUI使用時)
pip install gradio# 基本実行
python run.py
# デバッグモード(プロンプトやRAGコンテキストを表示)
python run.py --debug
# 全員LLMの自動モード
python run.py --auto
# モデル変更
python run.py --model llama3.1:70b
# 役職を固定(カンマ区切り)
python run.py --roles 人狼,占い,狩人,村人python gui.pyブラウザで http://localhost:7860 にアクセスしてプレイ。
- 夜フェーズ: 占い師が1人を占う(結果は占い師のみに通知)
- 発言フェーズ: 全員が2周発言(役職CO、推理、議論)
- 質問フェーズ: ユーザーがNPCに個別質問可能
- 投票フェーズ: 全員が処刑先を投票
- 決着: 処刑結果に応じて勝敗判定
| 陣営 | 役職 | 勝利条件 |
|---|---|---|
| 市民陣営 | 占い師、狩人、村人、村長(USER) | 人狼を処刑 |
| 人狼陣営 | 人狼、狂人 | 人狼以外を処刑 |
| 第三陣営 | 吊人 | 自分が処刑される(単独勝利) |
| 特殊 | 独裁者 | 自分が処刑時、投票先を代わりに処刑 |
- 狩人: 誰も処刑されなかった場合、1人を追加処刑
- 独裁者: 自分が処刑された時、自分の投票先を代わりに処刑
| オプション | 説明 |
|---|---|
--debug |
デバッグモード(RAGコンテキスト、プロンプト表示) |
--auto |
自動モード(全員LLM、ユーザー入力なし) |
--model <名前> |
使用するOllamaモデルを指定 |
--roles <役職,...> |
4つの役職をカンマ区切りで固定 |
zinro/
├── run.py # メインゲームエンジン
├── gui.py # Gradio Web UI
├── rule.md # ゲームルール
├── prompt.md # シナリオ生成プロンプト
├── create_role.sh # 役職組み合わせディレクトリ生成
├── combos_4/ # 35通りの役職組み合わせ戦略
│ ├── 人狼_占い_狩人_村人/
│ │ ├── 人狼.md
│ │ ├── 占い.md
│ │ ├── 狩人.md
│ │ └── 村人.md
│ └── ...
├── log/ # ゲームログ出力
├── scripts/ # 補助スクリプト
└── archive/ # 過去バージョン
run.py 冒頭のパラメータで各種設定を変更できます。
# LLMモデル
MODEL = "qwen2.5:72b"
# 発言の周回数
DAY_SAY_ROUNDS = 2
# 難易度設定(USERへの役職開示)
DISCLOSE_TO_USER = {
"Werewolf": False, # Trueで人狼の情報を開示
...
}
# RAG設定
RAG_LOG_TAIL = 30 # ログの参照行数
RAG_INCLUDE_ROLE = True # 役職戦略を含める
RAG_STRIP_EXAMPLES = True # 発言例を除去combos_4/<役職組み合わせ>/<役職名>.md を編集することで、LLMの行動戦略をカスタマイズできます。
新しい組み合わせを追加する場合:
bash create_role.shゲームログは log/game/<日付>/game_<時刻>.txt に保存されます。
MIT License