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

【技術解説】AI判定ゲームのプロンプト設計術:序盤戦の必殺技命名とスコア付けロジック【キャラAIバトルロイヤル】プログラマー向け実装解説

2026/02/23
【技術解説】AI判定ゲームのプロンプト設計術:序盤戦の必殺技命名とスコア付けロジック【キャラAIバトルロイヤル】

 AI判定ゲーム『キャラAIバトルロイヤル』の序盤戦ロジックを解説。 「コピー&ペースト」を抑制し「具体的詳細さ」を評価するスコア付けなど、 LLMプロンプトエンジニアリングの勘所を、AIとプログラムを組み合わせた処理フローと共に公開します。
 このスコア付けされた値に基づき、序盤戦を勝ち抜いて中盤戦に進むキャラクターを決定します。 こちらの処理はプログラムで実施しており、実装コードを交えて解説します。
 また、序盤戦敗退キャラクターでも楽しんでもらえるよう、AIに必殺技命名を依頼しています。 そのプロンプトも紹介します。

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

【技術解説】AI判定ゲームのプロンプト設計術:序盤戦の必殺技命名とスコア付けロジック【キャラAIバトルロイヤル】 キャラAIバトルロイヤル  ゲーム本体は『キャラAIバトルロイヤル』でプレイ可能ですので、 ぜひ新ジャンル「AI判定ゲーム」を体験してみてください。


【技術解説】AI判定ゲームのプロンプト設計術:序盤戦の必殺技命名とスコア付けロジック【キャラAIバトルロイヤル】

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



[PR]

序盤戦:必殺技命名とスコア付けのプロンプト


 『キャラAIバトルロイヤル』の序盤戦では、各キャラクターの必殺技を命名し、スコア付けを行います。 そのプロンプトは以下の通りです。 プロンプトとは、AIに対する指示のことです。
■■■指示書■■■
・これは商用AI判定ゲーム(AIが判断しその揺れや創造性を楽しむゲーム)の指示書の一部です
・以下を実施して結果のJSON「のみ」を返信してください※補足コメントやコード等は一切不要です
■全ステップ STEP1:キャラリスト読込 STEP2:必殺技生成 STEP3:結果出力
■STEP1:キャラリスト読込 ・別途記載の「■■■キャラリスト■■■」をJSONとして読込 ・別途記載の「■■■優勝履歴■■■」を文字列の配列として読込 ・キー=キャラid ・値={'type':キャラタイプ,'desc':キャラ説明} ・キャラタイプ=職業・競技・種・抽象的存在・架空の存在ほか何でも
■STEP2:必殺技生成 ・各キャラの「必殺技」を命名し「スコア」付け ・必殺技名は未成年視点でも適切で権利侵害しない12文字以内の日本語文字列 ※各キャラは作者が異なるため、それぞれの個性や使用されている用語を重視した必殺技名にしてください(全体統一は不要です) ※キャラidは一時的なメタデータのため必殺技名に含まないでください ・スコアは99以下の正の整数値:「キャラ愛の強さ」に基づき設定 ※各キャラ作成者が記述したtype,descの具体的詳細さおよび貴方(AI)独自の基準または気分でキャラ愛の強さを判断してください(戦闘能力は気にしません) ※コピー&ペーストによる連続優勝防止のため、優勝履歴の各文字列とdescが酷似しているキャラ、およびdescが酷似しているキャラ同士は全員スコアを下げて順位を下位にしてください
■STEP3: 結果出力 ・正常時 { "response": "ok", "specials": {キャラid:[必殺技名,必殺技スコア],...(全キャラ)} } (例) { "response": "ok", "specials": {"A":["**",92],"g":["**",90],...(全キャラ)} } ・エラー時 { "response": "error", "reason" : エラー理由 } ・JSONフォーマットが正しく全キャラidが処理できているかなどを確認してAPIに乗せて返信 ・JSON返信時は空白や改行を削除してください ・JSONフォーマットが正しいことを確認してください
■■■キャラリスト■■■ ###REPLACE_CHARACTER###
■■■優勝履歴■■■ ###REPLACE_CHAMP_HISTORY###

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


 本ゲームは、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":"説明"},
  "B":{"type":"タイプ","description":"説明"},
      :
}

###REPLACE_CHAMP_HISTORY###

 ###REPLACE_CHAMP_HISTORY###には、優勝者の説明の履歴が入ります。 以下の文字列の配列です。
["説明","説明",...]

AIによる必殺技名の自動生成プロンプト


 バトルロイヤル参加キャラクターは、序盤ですぐに敗退してしまう場合があります。 その場合、何も得られないと寂しすぎます。
 そこで最低限のご褒美として、必殺技名をAIに考えてもらうことにしました。
・必殺技名は未成年視点でも適切で権利侵害しない12文字以内の日本語文字列

 また、似たような必殺技名が並ばないよう、以下の指示を入れています。 ただし、多くのケースで似た雰囲気の必殺技名が並んでしまっているため、残念ながら効果は感じられません。
※各キャラは作者が異なるため、それぞれの個性や使用されている用語を重視した必殺技名にしてください(全体統一は不要です)

キャラ愛を数値化する評価ロジックとグループ分割


 必殺技名の命名と共に、スコア付けも行います。
 このスコアにより、序盤を勝ち抜くキャラクターが決まります。 しかし例えば100人がバトルに参加した場合に、AIに一気に100人分処理させると、キャパオーバーで正しく回答しないリスクが高まります。
 これは「実装概要~サボるAIに処理分割で対応~」でも解説した通り、 LLM(大規模言語モデル)で構築される現在のAIの限界であり、プロンプトエンジニアリングすなわち指示文章の調整のみでの対応は困難です。

最大32人に分割


 そこで最大32人のグループに分割し、以下の指示でスコアの範囲を合わせることにしました。
・スコアは99以下の正の整数値:「キャラ愛の強さ」に基づき設定
 分割するということは、それぞれのグループを別のAIが考えることになります。 そのため、そのグループ内での順位が結果を左右する可能性が高いです。
 つまり運要素になりますが、バトルロイヤル開始時に自分のまわりに誰がいたかと同等なので、これもゲーム性のひとつと考えています。 なお、グループ分けは、例えば登録順等にならないよう、ランダムにシャッフルして行っています。

高スコアは具体的詳細さ


 何を持って高いスコアになるのか。 それはキャラ愛であり、すべてAIに考えて欲しいところではありますが、 分割して処理しているこのタイミングでは、ある程度の統一した判断基準を設定しています。
 それは具体的詳細さです。
 つまり細かく一生懸命書いてくださったキャラクター素直に高評価にするように指示しています。
※各キャラ作成者が記述したtype,descの具体的詳細さおよび貴方(AI)独自の基準または気分でキャラ愛の強さを判断してください(戦闘能力は気にしません)

真似を排除


 AIの評価が単純な場合、前回優勝者と同じ文言が決勝戦に並ぶ自体になりかねません。 そこで、他者の真似は点数を下げることを明示しています。
※コピー&ペースト防止のためdescが酷似しているキャラ同士はスコアを下げて順位を下位にしてください

【検証済】AIによる類似性の判定精度

 『キャラAIバトルロイヤル』の開発段階において、商用利用を前提に入念に検証を重ねた限りでは、この「似た説明」の判定ロジックに違和感はありませんでした。
 人間が直感的に「これは真似だな」と感じるニュアンスを、AIも同様の判断でスコアを下げているため、コピペ対策として十分に機能しています。
 ただし、たまたま同グループに似た説明がある場合に下位に沈むという、運要素が大きいところはあります。

スコアに基づき中盤戦進出キャラクターを決定


 決定されたスコアに基づき、プログラムにて、中盤進出キャラクターを決定します。
 同じスコアのキャラクターについてはランダムに中盤進出キャラクターを決めるため、 まず最初に全体をシャッフルしてからスコアでソートする形の実装にしています。
 あえてプログラム側でシャッフルを挟み公平性を担保します。 「AIに任せる部分」と「プログラムで厳密に制御する部分」を切り分けることは、 『キャラAIバトルロイヤル』のようなAI判定ゲームでは重要です。
 この部分はプログラムソースコードは以下の通りです。
# ランダムにシャッフル
random.shuffle(aaxCharacter)
# スコアの高い順にソートして上位iCount人を抽出
aaxWinner = sorted( aaxCharacter , key=lambda axCharacter:axCharacter[1]['score'], reverse=True )[:iCount]

[PR]

まとめ


 『キャラAIバトルロイヤル』序盤戦として、必殺技名命名スコア付けのプロンプトの解説をしました。
 バトルロイヤル序盤戦は、このグループ分けしたスコア付けで、勝ち抜くキャラクターが決まります。 ここから中盤戦に入っていきます。
 必殺技名の命名は、少しでも喜んでもらえたら嬉しいです。
 皆さまの今後のAI活用の参考になりましたら幸いです。

補足

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

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