TinyTroupe × 人狼ゲーム — WSL2でマルチエージェントシミュレーション環境を構築してみた

この内容は「なごあずの集い#8」で発表した内容をベースに、さらに詳細な手順や補足情報を加えたものになります。

https://75az.connpass.com/event/383389/

speakerdeck.com

Microsoftが開発したマルチエージェントシミュレーションライブラリTinyTroupeを使って、人狼ゲームのシミュレーション環境の構築に挑戦してみました。本記事ではWSL2上での環境構築から動作確認、実際のシミュレーション実行までの手順を紹介します。

この実験の考察に関しては以下を参照してください🙇

uepon.hatenadiary.com


TinyTroupeは、LLMを用いて人格・興味・目標を持つエージェント(TinyPerson)を作成し、仮想環境(TinyWorld)内でエージェント同士を対話させるPythonライブラリです。MITライセンスで公開されており、GitHubリポジトリは7,000スター以上を獲得しています。

公式のユースケースは顧客インタビューやフォーカスグループのシミュレーションですが、今回はTinyPersonに「村人」「人狼」「占い師」などの役職を与えて人狼ゲームの議論をシミュレートしてみよう、という試みです。

⚠️ 先に結論を言ってしまうと、クラウド上のLLMサービスではレート制限の壁にぶつかり、マルチエージェントシミュレーションを回しきるのは(少なくとも低Tier / Freeプランでは)非常に厳しいです。本格実行にはローカルGPU(VRAM 16GB以上)が必要という結論になりました。環境構築としての手順は動作確認済みなので、参考にしていただければ幸いです。


実験の構成

今回のポイントは、TinyTroupeのPythonスクリプトはWSL2上で動かし、LLMの推論はWindows側のOllamaを経由してクラウドで実行する という構成です。WSL2からWindows側OllamaへはデフォルトゲートウェイのIPで接続します。

システムの概要

バックエンドは以下の source コマンドで切り替え可能です。

スクリプト バックエンド モデル 用途
source ollama_activate_env.sh Windows側Ollama → クラウド gpt-oss:20b-cloud APIコスト不要で試行錯誤
source openai_activate_env.sh OpenAI API gpt-4.1-mini 高品質なシミュレーション

💡 ローカルGPUでの構成は別記事で紹介予定です。

前提条件

ハードウェア

  • Windows 11
  • メモリ: 8GB以上(推奨16GB以上)
  • ストレージ: 10GB以上の空き

ソフトウェア

  • WSL2がインストール済み(Ubuntu 24.04 LTS推奨)
  • インターネット接続

APIキー

プロバイダ 必要な環境変数
OpenAI API OPENAI_API_KEY
Azure OpenAI AZURE_OPENAI_KEY + AZURE_OPENAI_ENDPOINT
Ollama(ローカル) APIキー不要(別途セットアップ必要)

⚠️ コストについて … TinyTroupeはエージェント間の対話で大量にAPIを呼びます。後述しますが、1エージェント1回のAPIコールで約5,000〜7,000トークン を消費するため、多人数シミュレーションはかなりのトークン消費になります。まずはOllamaクラウドモデルやgpt-4.1-miniなどコスト効率の良い選択肢で試すのがおすすめします。

WSL2の準備

WSL2がまだ未インストールの場合

PowerShell(管理者権限)で実行します。

PS> wsl --install -d Ubuntu-24.04

インストール後、再起動してWSLのユーザー名・パスワードを設定してください。

パッケージの更新

WSLのターミナルで以下を実行します。

$ sudo apt update && sudo apt upgrade -y
$ sudo apt install -y git curl wget build-essential

Python環境の構築(uv)

TinyTroupeの公式ドキュメントではCondaが前提になっていますが、Python 3.10以上 + pip があれば十分です。ここでは、uv を使っています。

uvのインストール

$ curl -LsSf https://astral.sh/uv/install.sh | sh
$ source $HOME/.local/bin/env
# バージョン確認
$ uv --version

プロジェクトディレクトリと仮想環境の作成

# プロジェクトディレクトリの作成
$ mkdir ~/werewolf-tinytroupe
$ cd ~/werewolf-tinytroupe

# 仮想環境を作成(Ubuntu 24.04のデフォルトPython 3.12を使用)
$ uv venv

# 仮想環境の有効化
$ source .venv/bin/activate

以降の作業はすべて仮想環境を有効化した状態で進めます。

TinyTroupeのインストール

$ uv pip install git+https://github.com/microsoft/TinyTroupe.git@main

これだけでインストール完了です。

💡 リポジトリをクローンしたい場合 … git clone https://github.com/microsoft/TinyTroupe.git してから uv pip install . でもインストールできます。この方法だと examples/ フォルダ内のJupyterノートブック(顧客インタビューや広告評価のサンプル)を手元で参照・実行できるので、TinyTroupeの使い方を学ぶのに便利ですね。今回はシンプルにpipインストールだけで進めました。

環境変数とconfig.iniの設定

ここが今回の構築で工夫した点でもあります。.bashrc にAPIキーを直接書くのではなく、バックエンドごとに専用のシェルスクリプトを用意し、source で切り替える方式にしました。各スクリプトが config.ini も自動生成するので、切り替えが楽です。

作業開始時の手順

# Step 1: プロジェクトディレクトリに移動
$ cd ~/werewolf-tinytroupe

# Step 2: Python仮想環境の有効化
$ source .venv/bin/activate

# Step 3: バックエンド切り替え
$ source ollama_activate_env.sh   # Ollama Cloud版
# または
$ source openai_activate_env.sh   # OpenAI API版

同一シェル内でバックエンドを切り替えたいときも、もう一方のスクリプトを source するだけでOKになります。

ollama_activate_env.sh の作成(Ollama Cloud版)

cat << 'SCRIPT_EOF' > ollama_activate_env.sh
#!/bin/bash
# ollama_activate_env.sh
# 使い方: source ollama_activate_env.sh
# ※ 事前に source .venv/bin/activate を実行しておくこと

# === 仮想環境の確認 ===
if [ -z "$VIRTUAL_ENV" ]; then
    echo "⚠️  Python仮想環境が有効化されていません"
    echo "   → 先に source .venv/bin/activate を実行してください"
    return 1 2>/dev/null || exit 1
fi

# === 不要な環境変数のクリア(OpenAI版からの切り替え対応) ===
unset OPENAI_API_KEY 2>/dev/null

# === Windows側OllamaのIPを取得 ===
# WSL2のデフォルトゲートウェイ = WindowsホストのIP
WINDOWS_HOST_IP=$(ip route | grep default | awk '{print $3}')
OLLAMA_HOST="http://${WINDOWS_HOST_IP}:11434"

export OLLAMA_HOST

# === OpenAI互換モードで接続するためダミーキーとBASE_URLを設定 ===
export OPENAI_API_KEY="ollama"
export OPENAI_BASE_URL="http://${WINDOWS_HOST_IP}:11434/v1"

# === config.ini の生成 ===
cat > config.ini << CONF
[OpenAI]
API_TYPE=openai
MODEL=gpt-oss:20b-cloud
MAX_TOKENS=8192
TEMPERATURE=0.1
BASE_URL=http://${WINDOWS_HOST_IP}:11434/v1
waiting_time = 5

[Simulation]
parallel_agent_actions = False

[Logging]
loglevel_console = CRITICAL
CONF

# === Ollama疎通確認 ===
echo "🔍 Windows側Ollamaへの接続を確認中... (${OLLAMA_HOST})"
if curl -s --max-time 5 "${OLLAMA_HOST}/api/tags" > /dev/null 2>&1; then
    echo "✅ Ollama接続OK"
    if curl -s "${OLLAMA_HOST}/api/tags" | grep -q "gpt-oss"; then
        echo "✅ gpt-oss モデル確認OK"
    else
        echo "⚠️  gpt-oss:20b-cloud が見つかりません"
        echo "   → Windows側で ollama pull gpt-oss:20b-cloud を実行してください"
    fi
else
    echo "❌ Windows側Ollamaに接続できません"
    echo "   → Windows側でOllamaが起動しているか確認してください"
    echo "   → 検出したWindowsホストIP: ${WINDOWS_HOST_IP}"
fi

# === 環境変数の登録状態を表示 ===
MASKED_KEY="ollama (ダミーキー)"
echo ""
echo "--- 環境変数の確認 ---"
echo "VIRTUAL_ENV    : ${VIRTUAL_ENV}"
echo "OLLAMA_HOST    : ${OLLAMA_HOST}"
echo "OPENAI_API_KEY : ${MASKED_KEY}"
echo "OPENAI_BASE_URL: ${OPENAI_BASE_URL}"
echo "Python         : $(which python)"
echo "Python ver     : $(python --version 2>&1)"
echo "config.ini     : API_TYPE=openai / MODEL=gpt-oss:20b-cloud / BASE_URL=.../v1"
echo ""
echo "✅ TinyTroupe環境を有効化しました(Ollama Cloud × OpenAI互換モード)"
SCRIPT_EOF

openai_activate_env.sh の作成(OpenAI API版)

APIのキーは以下のデータのexport OPENAI_API_KEYの箇所を差し替えて実行してください

cat << 'SCRIPT_EOF' > openai_activate_env.sh
#!/bin/bash
# openai_activate_env.sh
# 使い方: source openai_activate_env.sh
# ※ 事前に source .venv/bin/activate を実行しておくこと

# === 仮想環境の確認 ===
if [ -z "$VIRTUAL_ENV" ]; then
    echo "⚠️  Python仮想環境が有効化されていません"
    echo "   → 先に source .venv/bin/activate を実行してください"
    return 1 2>/dev/null || exit 1
fi

# === 不要な環境変数のクリア(Ollama版からの切り替え対応) ===
unset OLLAMA_HOST 2>/dev/null
unset OPENAI_BASE_URL 2>/dev/null

# === OpenAI APIキー ===
export OPENAI_API_KEY="sk-xxxxxxxxxxxxxxxxxxxxxxxx"  # ← ご自身のキーに書き換えてください

# === config.ini の生成(モデル: gpt-4.1-mini) ===
cat > config.ini << CONF
[OpenAI]
API_TYPE=openai
MODEL=gpt-4.1-mini
MAX_TOKENS=4000
TEMPERATURE=0.3
waiting_time = 10

[Simulation]
parallel_agent_actions = False

[Logging]
loglevel_console = CRITICAL
CONF

# === APIキー設定の確認 ===
echo "🔍 OpenAI API設定を確認中..."
if [ "$OPENAI_API_KEY" = "sk-xxxxxxxxxxxxxxxxxxxxxxxx" ] || [ -z "$OPENAI_API_KEY" ]; then
    echo "⚠️  OPENAI_API_KEYがデフォルト値のままです"
    echo "   → openai_activate_env.sh 内のキーをご自身のものに書き換えてください"
else
    MASKED_KEY="${OPENAI_API_KEY:0:7}...${OPENAI_API_KEY: -4}"
    echo "✅ OPENAI_API_KEY: ${MASKED_KEY}"
fi

# === 環境変数の登録状態を表示 ===
echo ""
echo "--- 環境変数の確認 ---"
echo "VIRTUAL_ENV    : ${VIRTUAL_ENV}"
echo "OLLAMA_HOST    : (OpenAI APIモードでは不要)"
echo "OPENAI_API_KEY : ${MASKED_KEY:-⚠️ 要設定}"
echo "OPENAI_BASE_URL: (OpenAI APIモードでは不要 → デフォルトのapi.openai.comを使用)"
echo "Python         : $(which python)"
echo "Python ver     : $(python --version 2>&1)"
echo "config.ini     : API_TYPE=openai / MODEL=gpt-4.1-mini / parallel=False"
echo ""
echo "✅ TinyTroupe環境を有効化しました(OpenAI API)"
SCRIPT_EOF

パーミッション設定と.gitignore

$ chmod 700 ollama_activate_env.sh openai_activate_env.sh

# APIキーが含まれるためGit管理から除外
$ echo "ollama_activate_env.sh" >> .gitignore
$ echo "openai_activate_env.sh" >> .gitignore

config.iniの解説

各スクリプトが source 時に自動生成する config.ini のポイントを補足しておきます。

なぜ API_TYPE=openai なのか?

TinyTroupe v0.6.0のOllamaネイティブクライアント(API_TYPE=ollama)はAPIパスの構成に問題があり、/chat/completions という存在しないエンドポイントにリクエストを送ってしまいます(この場合、404エラーとなります)。OllamaはOpenAI互換APIを提供しているので、API_TYPE=openai + BASE_URL/v1 を付与する方式のほうが安定します。

💧 とほほポイント … config.iniの BASE_URLAPI_TYPE=openai のとき無視されることがあります。OpenAI Pythonクライアントが環境変数 OPENAI_BASE_URL を優先するため、スクリプト側でこの環境変数も設定しています。これに気づくまで結構ハマりました…

parallel_agent_actions = False について

並列実行だと全員の応答が揃うまで画面に何も表示されず「フリーズした?」と思ってしまいます。逐次実行(False)にすると1人ずつ応答が表示されるので、進捗が見えて安心です。速度を優先するなら True に戻してください。

waiting_time について

Ollamaクラウドにはレート制限があり、短時間に多数のリクエストを送ると 429 Too Many Requests が発生します。waiting_time = 5 で各APIコール間に5秒の待機を入れていますが、後述する通りこれでも足りないケースが多いです。

loglevel_console = CRITICAL について

TinyTroupeは大量のDEBUGログを出すので、CRITICAL にしておくとエージェント同士の議論だけが見やすくなります。トラブル時は INFODEBUG に戻してください。

Windows側Ollama + gpt-oss:20b-cloud のセットアップ

今回はWindows側のOllamaのクラウドモデル機能を使います。gpt-oss:20b-cloudはollama.comのサーバー上で推論が行われるため、ローカルにGPUがなくても利用できます。

Windows側の設定

以下はWindows側(PowerShellまたはコマンドプロンプト)で実行します。

# 1. ollama.com へのサインイン(クラウドモデル利用に必須)
PS> ollama login

# 2. gpt-oss:20b-cloud のpull
PS> ollama pull gpt-oss:20b-cloud

# 3. 動作確認
PS> ollama run gpt-oss:20b-cloud
# → 「Hello!」と入力して応答が返れば成功。/bye で終了

⚠️ クラウドモデルの注意点 * 推論はollama.comのサーバー上で実行されるため、プロンプトの内容が送信されます。機密データを含むシミュレーションには不向きです * Freeプランは軽い利用向け。TinyTroupeのようなAPIコール集約型のユースケースでは日次制限に引っかかる可能性があります

WSL2からWindows側Ollamaへの接続

WSL2はデフォルトでは localhost でWindows側のサービスにアクセスできません。Windows側で外部接続を受け付ける設定が必要です。

# PowerShell(管理者権限)で実行
[System.Environment]::SetEnvironmentVariable("OLLAMA_HOST", "0.0.0.0", "User")

設定後、Ollamaを再起動してください。

WSL側から疎通確認

# WindowsホストIPの確認
WINDOWS_HOST_IP=$(ip route | grep default | awk '{print $3}')
echo "Windows IP: ${WINDOWS_HOST_IP}"

# Ollamaへの接続テスト
curl http://${WINDOWS_HOST_IP}:11434/api/tags

モデル一覧がJSONで返ってくれば成功です。

💡 IP取得のポイント … WSL2からWindowsホストIPを取得するのに /etc/resolv.confnameserver を使う方法がネットで見つかりますが、ip route | grep default で取るほうが確実です。resolv.conf は必ずしもホストIPを示しているとは限りません。

動作確認

基本的なインポートテスト

$ cd ~/werewolf-tinytroupe
$ source .venv/bin/activate
$ source ollama_activate_env.sh
$ python -c 'import tinytroupe; print("TinyTroupe imported successfully!")'

簡易エージェントテスト

以下を test_tinytroupe.py として保存して実行します。

test_tinytroupe.py

import tinytroupe
from tinytroupe.agent import TinyPerson
from tinytroupe.environment import TinyWorld

# テスト用のシンプルなエージェント作成
villager = TinyPerson("村人太郎")
villager.define("age", 30)
villager.define("nationality", "日本人")
villager.define("occupation", "農家")
villager.define("personality_traits", [
    "あなたは正直で率直な性格です。",
    "他人に対して少し疑り深いですが、公平に接します。",
    "日本語で会話してください。"
])

# エージェントに話しかける
villager.listen_and_act("自己紹介をしてください。あなたはどんな人ですか?")

print("=== テスト完了 ===")
$ python test_tinytroupe.py

正常に応答が返れば環境構築は完了です。ここまでは順調にいきました。

⚠️ semantic memoryエラーについて … Error storing engram in semantic memory: property 'text' of 'Document' object has no setter というエラーがログに出ることがありますが、TinyTroupe v0.6.0と依存ライブラリ(chromadb等)の互換性の問題で、動作には影響ありません。ログレベルを CRITICAL にしておけば画面にも表示されません。

人狼ゲーム シミュレーションの実装

ここからが人狼ゲームらしい設定を入れていくフェーズになります。エージェントの定義、ゲームループの骨格、投票ロジックなどを実装していきます。

役職ごとのエージェント定義(agents/roles.py

agents/roles.py

from tinytroupe.agent import TinyPerson

def create_werewolf_player(name, role, personality_desc):
    """人狼ゲームのプレイヤーエージェントを作成"""
    player = TinyPerson(name)
    player.define("age", 25)
    player.define("nationality", "Japanese")
    player.define("occupation", f"人狼ゲームの参加者(役職: {role})")

    # 役職に応じた秘密の目標を設定
    if role == "人狼":
        player.define("personality_traits", [
            personality_desc,
            "あなたは人狼です。正体を隠しながら村人を欺いてください。",
            "他のプレイヤーの発言を注意深く観察し、疑いを他人に向けてください。",
            "日本語で会話してください。"
        ])
    elif role == "占い師":
        player.define("personality_traits", [
            personality_desc,
            "あなたは占い師です。人狼を見つけ出すのがあなたの使命です。",
            "ただし、占い師であることを明かすタイミングは慎重に判断してください。",
            "日本語で会話してください。"
        ])
    elif role == "村人":
        player.define("personality_traits", [
            personality_desc,
            "あなたは村人です。議論を通じて人狼を見つけ出してください。",
            "論理的に考え、怪しい発言をする人物を見極めてください。",
            "日本語で会話してください。"
        ])
    return player

⚠️ 注意: roles.py には関数定義のみを記載してください。モジュールレベルでエージェントを作成すると、import時に実行されて名前の重複エラーが発生します。

ゲームループの骨格(werewolf_game.py

from tinytroupe.environment import TinyWorld
from tinytroupe.extraction import results_extractor as extractor

def run_werewolf_game(players, max_days=3):
    """人狼ゲームのメインループ"""
    alive_players = list(players)

    for day in range(1, max_days + 1):
        print(f"\n{'='*50}")
        print(f"  Day {day} — 昼のターン(議論)")
        print(f"{'='*50}")

        # --- 昼フェーズ: 全員での議論 ---
        world = TinyWorld(f"人狼ゲーム Day{day}", alive_players)
        world.make_everyone_accessible()

        # 議論のきっかけを与える
        world.broadcast(
            f"Day {day}の議論を始めます。"
            f"生存者は{len(alive_players)}人です。"
            f"誰が人狼だと思いますか?議論してください。"
        )
        world.run(steps=2)  # 2ステップ分の議論

        # --- 投票フェーズ ---
        print(f"\n--- 投票フェーズ ---")
        votes = {}
        for player in alive_players:
            player.listen_and_act(
                "投票の時間です。最も怪しいと思う人物の名前を1人だけ挙げてください。"
                "理由も簡潔に述べてください。"
            )
            # ResultsExtractorで投票先を抽出する処理を実装
            # (実際のコードではLLMからの応答を解析して投票先を取得)

        # --- 処刑・夜フェーズの処理 ---
        # (投票集計、処刑、夜のアクション等の実装)

    print("\n=== ゲーム終了 ===")


# === メイン実行 ===
if __name__ == "__main__":
    from agents.roles import create_werewolf_player

    # まず3人・1日で動作確認
    players = [
        create_werewolf_player("田中", "人狼", "あなたは口が上手く、説得力があります。"),
        create_werewolf_player("佐藤", "占い師", "あなたは慎重で観察力に優れています。"),
        create_werewolf_player("鈴木", "村人", "あなたは感情的で直感を大事にします。"),
    ]

    run_werewolf_game(players, max_days=1)

⚠️ 注意点 … default_extractorresults_extractor にリネームされています。古い記事のコードをコピペするとエラーになります。

ディレクトリ構成

# __init__.py を作成
$ mkdir -p agents game_logic notebooks logs
$ touch agents/__init__.py game_logic/__init__.py

プロジェクトのツリー構造

~/werewolf-tinytroupe/
├── .venv/                       # Python仮想環境
├── .gitignore
├── ollama_activate_env.sh       # Ollama Cloud用(Git管理対象外)
├── openai_activate_env.sh       # OpenAI API用(Git管理対象外)
├── config.ini                   # 自動生成
├── test_tinytroupe.py           # 動作確認用
├── werewolf_game.py             # メインスクリプト
├── agents/
│   ├── __init__.py
│   └── roles.py                 # 役職別エージェント定義
├── game_logic/
│   ├── __init__.py
│   ├── phases.py                # 昼/夜フェーズの制御
│   └── vote.py                  # 投票・集計ロジック
└── logs/                        # ログ出力

実行

$ cd ~/werewolf-tinytroupe
$ python werewolf_game.py

💡 Tips … 初回はまず3人・1日・2ステップで動作確認するのがよいでしょう。Ollamaクラウドモデルは1回のAPIコールに数秒〜十数秒かかるので、3人×2ステップ+投票でも数分かかります。

ここからが本番 — レート制限との闘い

環境構築は成功し、コードも動く状態にはなりました。でもここからが大変でした🥲🥲🥲

Ollama Cloud — 429エラーの嵐

3人のエージェントで議論を始めた途端、こうなります。

tinytroupe - WARNING - [1] Rate limit error, waiting a bit and trying again.
tinytroupe - INFO - Request failed. Waiting 15.0 seconds between requests...

waiting_time = 5 にしても足りず、日次上限にも引っかかるようで、マルチエージェントシミュレーションを最後まで回し切れませんでした。Ollama CloudのFreeプランは「ちょっとした質問に使う」想定であり、TinyTroupeのようなAPIコール集約型のユースケースには向いていないです。

OpenAI API(Tier 1)に切り替え

source openai_activate_env.sh でgpt-4.1-miniに切り替えてみました。Tier 1は200,000 TPM(Tokens Per Minute)。これなら大丈夫だろうと思ったのですが…

tinytroupe - WARNING - [4] Rate limit error, waiting a bit and trying again.
tinytroupe - INFO - Request failed. Waiting 125.0 seconds between requests...

5人構成でwaiting_timeを15にしても429が出ます。ログを見ると 1リクエストで5,556トークン 送信していました。

トークン消費の内訳

TinyTroupeは1エージェント1回のAPIコールで以下を丸ごと送信します。

  • エージェント仕様(行動ルール、入出力フォーマット定義): 約3,000〜4,000トークン
  • ペルソナ定義(性格、役職、行動指針): 約500〜1,000トークン
  • 認知状態(目標、文脈、注意、感情、エピソード記憶): 約500〜2,000トークン

合計 約5,000〜7,000トークン/エージェント/コール 。5人で2ステップの議論+投票だけで5万〜10万トークンに達します。これがTinyTroupeをクラウドLLMで使う際の最大のボトルネックでした。

3人に減らして waiting_time = 10 にすれば何とか動きますが、5人構成での本格シミュレーションはTier 1では現実的ではありません。

バックエンド評価まとめ

バックエンド 速度 コスト レート制限 評価
Ollama Cloud(Free) 遅い 無料 時間/日の上限あり、429頻発 単体テスト向き。マルチエージェント実験には不向き
OpenAI API(Tier 1) 中程度 従量課金 200K TPM、429発生 3人なら可能、5人以上は厳しい🥲
OpenAI API(Tier 2以上) 速い 従量課金 2M TPM 5人規模が実用的になる
ローカルGPU + Ollama GPU性能次第 電気代のみ 制限なし レート制限の心配なし。最適解

まとめと所感

できたこと

  • WSL2上に uv + Python 3.12 + TinyTroupe v0.6.0の環境を構築
  • Ollama Cloud(gpt-oss:20b-cloud)とOpenAI API(gpt-4.1-mini)の2つのバックエンドを切り替え可能な構成を構築
  • TinyPersonの作成、listen_and_act による対話、TinyWorldを使った複数エージェントの議論まで動作確認

わかったこと

  • TinyTroupeは 1エージェント1回のAPIコールで約5,000〜7,000トークン消費 する。人狼ゲームのようなマルチエージェントシミュレーションでは非常に大きなボトルネック
  • クラウドLLMサービス(Ollama Cloud Free / OpenAI API Tier 1)のレート制限では、5人規模のシミュレーションを行うのは困難
  • 本格的にTinyTroupeでマルチエージェントシミュレーションを行うなら、ローカルGPU(VRAM 16GB以上)が実質的に必要

予想される推奨構成

  1. ローカルGPU環境(最推奨): VRAM 16GB以上のGPUで gpt-oss:20b をローカル実行。レート制限なし、プライバシー確保、電気代のみ
  2. OpenAI API(Tier 2以上): TPMが2,000,000に増加し、5人規模が実用的になる
  3. 開発・デバッグ用途: 本記事の環境(Ollama Cloud / OpenAI API Tier 1)は、1〜2人のエージェントでロジックを検証する用途には十分

「動くけどレート制限で実用にならない」という結果は、事前に調べるだけではなかなか分からないところです。実際に手を動かしてトークン消費量の現実を体感できたのは良い経験でした。

💡 ローカルGPU(RTX 4090)での実行結果と、そこで判明したさらなる課題(人狼ゲームとして議論が成立しない問題)については、別エントリーで書こうと思います。

参考リンク


本記事は2026年3月時点の情報に基づいています。TinyTroupeは活発に開発中のためAPIが変更される可能性があります。