LLMを活用したターン制RPGバトルシミュレーター
作ったもの
LLMを活用し、ターン制RPGのステータスを初期化する仕組みを作りました!
今回はUnity側でゲームのロジックを実装し、Pythonで作ったサーバーでプレイヤー・敵のデータを作成しています。ソースコードは以下です。
Unity Pythonで立てたサーバーを叩いて、プレイヤー敵のステータスを取得します
Python ChatGPTのAPIを実行して、ステータスを生成します
プロンプトだけざっくり抜き出すとこのような感じです。
シンプルなRPGゲーム用のJSONデータを生成してください。以下の条件を満たしてください:
- プレイヤーと敵が交互に攻撃するターン制バトルです。
- プレイヤーと敵のどちらかが3回攻撃することでギリギリ勝敗が決まるように調整してください。
- プレイヤーにはわずかに勝つ可能性があるように設定してください。
- 各キャラクターには以下のステータスを含めてください:
- HP: ヒットポイント
- Attack: 攻撃力
- Defense: 防御力
解説はつけずjsonだけを出力してください。
- JSON形式で出力してください。例:
{
"Player": {
"Name": "Hero",
"HP": 100,
"Attack": 20,
"Defense": 10
},
"Enemy": {
"Name": "Slime",
"HP": 80,
"Attack": 25,
"Defense": 8
}
}
システム構成
Flaskを使用したAPIサーバー
Flaskを使って簡単なAPIサーバーを構築しています。
CORS(Cross-Origin Resource Sharing)を有効化しており、外部からのアクセスも可能です。
カスタムエラーハンドラーを設定しており、例外が発生した場合にJSON形式のエラーメッセージを返します。
ルート管理
ルート定義はBlueprintを使用して分離しています。
create_routes関数でルートをFlaskアプリに登録しています。
ゲームデータ生成ロジック
ゲームのバランスが取れたデータを生成するために、LLM(GPT)を使用しています。
GameDataGeneratorクラスがゲームデータ生成のロジックを担当。
LLMとのインターフェース
LLMInterfaceクラスを使用して、OpenAIのAPIにリクエストを送信します。
環境変数 OPENAI_API_KEY を利用してAPIキーを取得し、GPTを呼び出しています。
JSONデータのロード
サーバー起動時に初期データをロードするためのロジックを提供。
ファイルからJSONを読み込み、ゲームデータとして利用可能です。
セットアップガイド
1. 依存パッケージのインストール
pip install flask flask-cors openai
2. 環境変数の設定
Linux/macOS:
export OPENAI_API_KEY=your_api_key_here
まとめ
まだシンプルな機能ですが
ゲームとLLM連携し、データ制作に役立てることができました。
この仕組みを活かせば、色々なゲームを作れそうですね!
次回はより複雑なゲームや大規模なゲームに使えるか考えたいと思います。
Discussion