このプロジェクトは、LangChain とLangGraph を利用して構築した、シンプルなテーブルトークRPG(TRPG)のゲームマスター(GM)エージェントです。
コンソール上でユーザーがAI(GM)と対話しながら物語を進める「ライトTRPG」を体験できます。
- LangChain / LangGraph を活用した対話型エージェント構成
roll_dice
ツール によるサイコロ判定update_game_state
ツール によるプレイヤーの HP・アイテム・ターン数の更新- プロンプト制御 で無限ループや連続ツール呼び出しを制限(シンプルに安定動作)
- ステート管理 でターン数・HP・アイテム・セッション終了を制御
- Python 3.10 以上(3.12 など最新でも可)
- Poetryでのパッケージ管理を推奨
- 主なライブラリ
langgraph
langchain-openai
langchain-community
python-dotenv
- リポジトリをクローン / ダウンロード
git clone <このリポジトリのURL>
cd light-trpg-agent
- Python の仮想環境を作成し、必要パッケージをインストール
poetry install
- .env ファイルの用意
- OpenAI API キーを指定する
.env
を作成し、以下のように環境変数を設定
OPENAI_API_KEY=sk-***********
.env
ファイルをプロジェクト直下に置く
poetry run python light-trpg-agent.py
- 実行すると、コンソール上で「TRPGセッション開始」のメッセージが表示され、AI が順次プロンプトを出してきます。
- はじめに下記のような流れが提示されるはずです(ジャンル / 主人公名 / 世界観 / 目標 / ターン数などを質問される)。
- 入力を行うと、AI がサイコロを振って初期 HP やアイテムを決定 → 物語の序盤シーンを描写 → 以後、ターン数をカウントしながら物語が進みます。
- 初期設定
- AI が「ジャンルは?」「主人公の名前は?」など質問してくるので、コンソールに回答します。
- 続いて AI がサイコロ(
roll_dice
ツール)を呼び出し、初期 HP とアイテムをランダムに決定します。
- 行動コマンド
- 毎ターン、ユーザーが「扉を開ける」「敵を攻撃」「アイテムを使う」など好きなアクションを入力してください。
- AI は状況に応じてサイコロ判定 (
roll_dice
) を行い、update_game_state
ツールを呼び出して HP やターン数を更新します。
- セッション終了
- ターン数が指定した上限 (
max_turns
) に到達したらセッションが終了します。 - 終了時は AI がストーリー要約を表示してくれます(プロンプトに基づく動き)。
- ターン数が指定した上限 (
- プロンプト
light-trpg-agent.py
内のシステムプロンプトを編集することで、より細かいルールを指定可能です。- 例: 「敵を倒すときは 2d6+3 の判定を行う」「ターン数が経過するとイベントが発生する」など。
- ツール
roll_dice
内を変更し、2d6+筋力 ボーナスなどの解析ロジックを追加するとバリエーションが増えます。update_game_state
でアイテムのステータスや HP が 0 以下の場合の処理などを加えられます。
- UI / フロントエンド
- コンソールベースのやり取りをブラウザUI (SvelteKit / Streamlit 等) に切り替えるだけで、インタラクティブな体験が可能になります。
本プロジェクトは MIT License の下で公開されています。
詳細は LICENSE
ファイルをご覧ください。