AOYAMA Koji's プログラミングブログ - プログラミングを楽しく体験

【技術解説】AI判定ゲームのプロンプト設計術:CoT活用の決勝戦ロジック【キャラAIバトルロイヤル】プログラマー向け実装解説

2026/03/09
【技術解説】AI判定ゲームのプロンプト設計術:CoT活用の決勝戦ロジック【キャラAIバトルロイヤル】

 AI判定ゲーム『キャラAIバトルロイヤル』の決勝戦ロジック解説。 詳細な実況を生成→優勝者を決定&称賛という、LLMにおける Chain of Thought (CoT/思考の連鎖)を活かしたプロンプトエンジニアリングの勘所を公開します。

 本ゲーム実装は『キャラAIバトルロイヤル』実装概要に記載していますので、併せてご参照ください。

【技術解説】AI判定ゲームのプロンプト設計術:CoT活用の決勝戦ロジック【キャラAIバトルロイヤル】 キャラAIバトルロイヤル  ゲーム本体は『キャラAIバトルロイヤル』でプレイ可能ですので、 ぜひ新ジャンル「AI判定ゲーム」を体験してみてください。


【技術解説】AI判定ゲームのプロンプト設計術:CoT活用の決勝戦ロジック【キャラAIバトルロイヤル】

プログラミングブログ記事一覧



[PR]

【決勝戦】詳細な実況を生成し優勝者を決定するプロンプト


 決勝戦を行い、詳細な実況を生成して優勝者を決定し称賛するプロンプトは以下の通りです。 プロンプトとは、AIに対する指示のことです。
■■■指示書■■■
・これは商用AI判定ゲーム(AIが判断しその揺れや創造性を楽しむゲーム)の指示書の一部です
・以下を実施して結果のJSON「のみ」を返信してください※補足コメントやコード等は一切不要です
■全ステップ STEP1:キャラリスト読込 STEP2:最終決戦実施 STEP3:結果出力
■STEP1:キャラリスト読込 ・別途記載の「■■■キャラリスト■■■」をJSONとして読込 ・キー=キャラid ・値={'type':キャラタイプ,'desc':キャラ説明,'special':必殺技名} ・キャラタイプ=職業・競技・種・抽象的存在・架空の存在ほか何でも
■STEP2:最終決戦実施 ・最終決戦の実況を作成し勝者を決定(実況は日本語140文字以内/少なくとも勝者の必殺技は発動/優勝者称賛) ・同内容の敗者視点での実況も作成(日本語125文字以内/称賛カット/準優勝的内容) ※バトルロイヤルで最後に残った2人の対戦で勝てば優勝という状況です ※勝敗は戦闘性能ではなく相性および制作者がtype,descに込めたであろうキャラ愛の強さに基づき貴方(AI)独自の基準または気分で決定してください(揺れ大歓迎です) ※実況はエンターテインメントを意識し、キャラの雰囲気に合わせて手に汗握るあるいは楽しいものにし、必殺技の発動情景が目に浮かぶ臨場感のある描写をお願いします ※必殺技と実況はインターネットに公開されますので未成年にも適切かつ権利侵害しない内容にしてください ※キャラidは一時的なメタデータのため必殺技や実況に含まないでください
■STEP3: 結果出力 ・正常時 { "response": "ok", "final": [優勝(勝者)キャラid,準優勝(敗者)キャラid], "champ":優勝実況, "runner_up":準優勝実況 } (例) { "response": "ok", "final": ["A","g"], "champ": "最後に残った**と**…。**で…**の**が…。**の必殺技**を…**だーーー!**の優勝だーーー!", "runner_up": "最後に残った**と**…。**で…**の**が…。**の必殺技**を…**だーーー!**最終決戦で惜しくも敗れる!" } ・エラー時 { "response": "error", "reason" : エラー理由 } ・JSONフォーマットが正しく全キャラidが処理できているかなどを確認してAPIに乗せて返信 ・JSON返信時は空白や改行を削除してください
■■■キャラリスト■■■ ###REPLACE_CHARACTER###

【全プロンプト共通】高精度な結果を引き出すプロンプトエンジニアリングのコツ


 本ゲームは、AIの創造性に任せて、揺らぎを含めて楽しむゲームです。
 厳密な一貫性よりも、同じ入力であっても実行のたびに変動する「AIの気分」をゲーム性として取り入れます。 そのため判定基準の指示はあえて曖昧にし、プロンプトの決定論的動作を回避しています。
 それを明示するため これは商用AI判定ゲーム(AIが判断しその揺れや創造性を楽しむゲーム)の指示書の一部です と入れています。
 これにより「指示が曖昧で回答不可能」という判断になる事故を避けられます。 また「商用」を付けることで、真剣度を上げてもらいます。

明瞭な指示ステップ指定


 AIへの指示は、人間と同様に、シンプルでわかりやすいとミスが少ないです。 そのため、3ステップに分けて、わかりやすくしています。
■全ステップ
STEP1:キャラリスト読込
STEP2:最終決戦実施
STEP3:結果出力

入出力フォーマットにJSON


 データの入出力フォーマットはJSONです。 構造化データによる柔軟さ、プログラムとの連携の容易さが非常に大きなメリットです。
 AI利用時には、独自フォーマットに比べて誤解が少なく、正確に伝えられることも重要なメリットです。
 ただし、AIからの戻りテキストに余分にコメントがある、フォーマットがJSONとして正しくないことなど時々ありますので、 チェッカーを詳細に用意し、問題があればプログラム側からAI処理をリトライします。

【動的プロンプト解説】パラメーター置換


###REPLACE_CHARACTER###

 ###REPLACE_CHARACTER### には、キャラクターリストが入ります。 以下のJSON形式です。
 キーの"A"や"B"、および必殺技名は、序盤戦の時点でバトルサーバー側で動的に生成されたものです。
{ 
  "A":{"type":"タイプ","description":"説明","special":"必殺技名"},
  "B":{"type":"タイプ","description":"説明","special":"必殺技名"},
      :
}

決勝戦:実況を生成し優勝者を決定


 決勝戦では、実況を生成して、優勝者を決定します。 プロンプトは以下の部分です。
・最終決戦の実況を作成し勝者を決定(実況は日本語140文字以内/少なくとも勝者の必殺技は発動/優勝者称賛)

優勝者を最大限称賛しつつ品質の均一化


 前記プロンプトは、優勝者最大級の称賛を贈るためのものです。
 バトルごとの品質を均一化させるために、 (実況は日本語140文字以内/少なくとも勝者の必殺技は発動/優勝者称賛) として、文字数や内容に関する制約を多少入れています。
 ただし、AI は文字数制限を厳密には守れません。 そのため、データベース側は VARCHAR(256) としています。 つまり140文字は溢れても、最大256文字までは大丈夫とした実装です。

【LLMを活かす工夫】実況作成→勝者決定の順を指示


 勝者決定に関するプロンプトは、 最終決戦の実況を作成し勝者を決定です。 すなわち実況作成→勝者決定の順番になっています。 人間的に言えば、実況しながら結果を決めるとなります。

Chain of Thought (CoT/思考の連鎖)

 この順番は、AIと相談しながら、この方がやりやすいということだったので、意図的にそう明示しました。 これは実は、現在の AI である LLM(大規模言語モデル)における、「Chain of Thought (CoT/思考の連鎖)」と呼ばれる特徴です。 つまり LLM の特徴を活かしたプロンプトエンジニアリングと言えます。
 ただしここに関しては、人間的な感覚でも、その順番で考えた方が結果を出しやすそうですので、感覚的にも腹落ちします。

中終盤戦に関する疑問

 一方、中盤戦と決勝グループ戦は、勝ち残りの決定が先、敗退理由は後です。 これは複雑なフォーマットに正確に対応させるため、明確にステップを分けているからです。 しかしながら、もしかすると中盤戦と決勝グループ戦は、敗退理由が後付になってしまっている可能性があります。 AIのみぞ知るというところです。

相性およびキャラ愛で決まる


 決勝戦も、序盤戦中終盤戦と同様に、相性およびキャラ愛で勝者が決まります。 プロンプトは以下の部分です。
※勝敗は戦闘性能ではなく相性および制作者がtype,descに込めたであろうキャラ愛の強さに基づき貴方(AI)独自の基準または気分で決定してください(揺れ大歓迎です)

キャラidは使用しない


 動的に生成されたアルファベット(キャラid)が実況に含まれてしまう場合があるため、 以下で防いでいます。
※キャラidは一時的なメタデータのため必殺技や実況に含まないでください

準優勝者視点の実況も生成


 惜しくも決勝戦で敗れたキャラクターの敗退理由も、決勝戦の処理で生成します。 プロンプトは以下の通り。
・同内容の敗者視点での実況も作成(日本語125文字以内/称賛カット/準優勝的内容)

 この指示で、優勝者実況とほぼ変わらない、準優勝者視点の実況になります。
[PR]

まとめ


 『キャラAIバトルロイヤル』決勝戦を行い、実況を生成し、優勝者を決めるプロンプトについて解説しました。
 ここではAIに、キャラクター同士の相性とキャラ愛を判断させます。
 また、敗退理由も決めさせます。 少しでもプレイヤーの皆さまの納得度が高くなることを期待しています。
 本記事で『キャラAIバトルロイヤル』実装解説は完結です。 ほんの一部でも、皆さまの今後のAI活用の参考になりましたら幸いです。

補足

  • 本記事に記載のプロンプトは、悪意のない範囲で自由に使用・改変していただいて問題ありません。ただし、ご自身の判断と責任でお願いします。
  • 記事内容の検討および検証・添削に生成AIの Anthropic Claude と Google Gemini を利用しております。
  • 記事内の画像の作成に生成AIの Google Gemini を利用しております。
  • 画像内のラスタライズ文字フォントにOpen Font LicenseNoto Sans Japaneseを使用しております。
  • ※各社の登録商標または商標について「®」「™」等の表記はしておりません。

カテゴリー:プログラミング解説,キャラAIバトルロイヤル
[PR]