生成AIに丸投げして画像と画像を戦わせられるゲームを作ったぞ!!!
※注:この記事は生成AIにゲーム製作を補助してもらうみたいな話ではなく、ゲームのだるそうな処理を全部生成AIに任せたっていう話です
AI はプログラミングを楽にするとかだけじゃなくて
もっとプログラミング自体をやらなくてもいいようにしてくれ!
どんなゲーム?
名前は「AI神話闘神大戦」です
どんなゲームなのか
例えばこの画像をアップロードすると
みたいになって
こうなります
以上です。全体的に漂う頭の悪い感じがウリです
誰でも以下のページでプレイできます
ランキング か 適当な闘神を見つける から登録済みのキャラを見てみるとよいでしょう
が、2024年4月末に閉鎖予定です(ページ自体は見れるようにしとくかも)
この記事ではコレにどういう風に生成AIが使われているかとかを記します
(ちなみに ChatGPT ではなく Gemini を使ってます)
説明の前に
このゲームは AIバトラー という名作に多大なる影響を受けています!
このゲームの仕組み
このゲームは実質二つの機能だけで構成されてます
一つは 画像から内容を読み取ってのキャラクター作成
もう一つは キャラクターとキャラクターが戦う文章の生成
そしてこの二つを正攻法で作るのはたぶんめちゃくちゃ難しい!
なので全部AIに任せることとします
ここからはどうやって AI に任せているかを示しながら説明していきます
(※プロンプト例を書いてますが長くて見にくいのでかなり省略してます)
画像からキャラクター作成
以下のようにして画像と返信の形式を指定して AI におねがいをします
以下の画像に含まれている要素について、キャラクターのようなステータスを作成してください。
# 対象の画像
{ここに画像ファイルを置く}
# ステータスについて
- 画像に含まれる内容を最大限に考慮してステータスを作成してください
- ステータスは以下のJSONテンプレートに従って作成してください
{
"名前": "",
"二つ名": "",
"性格": "",
"攻撃力": "",
"防御力": "",
"素早さ": "",
"スキル": [
"",
"",
""
]
}
するとこんな感じの返答が返ってくるので、いい感じにして保存します
{
"名前": "キリン人間",
"二つ名": "首長竜の末裔",
"性格": "穏やかで人懐っこい性格だが、キリンの首のように長い手足で意外と俊敏に動くことができる。",
"攻撃力": "長い手足を鞭のようにしならせて攻撃する。そのリーチは遠く、威力も十分にある。",
"防御力": "分厚い毛皮と長い手足で身を守ることができる。",
"素早さ": "長い手足を活かして素早く移動することができる。",
"スキル": [
"首を伸ばして遠くの敵を攻撃する「ロングネックアタック」",
"長い手足を振り回して周囲の敵を攻撃する「トルネードスイング」",
"キリンの柄を模した手裏剣を投げて攻撃する「キリン手裏剣」"
]
}
これだけでキャラクター作成機能は完成です。超簡単ですね
書いたプログラムは10行ぐらいです
さらに!
不適切な画像(卑猥なのとか)だった場合は AI が勝手にブロックしてくれます!
悩みの一つを勝手に解決してくれて神
戦闘シーンの文章生成
こちらも、戦闘に参加するキャラクター達の情報とそいつらに戦闘させてくれって AI におねがいをします
あなたはプロの小説家で、「AI神話闘神大戦」という大会を題材にした小説を書いています。
その試合の描写を小説のような文章を創作してください。
# 参加者1のステータスを表現したJSON
{ここに作ったキャラ1のステータス書く}
# 参加者2のステータスを表現したJSON
{ここに作ったキャラ2のステータス書く}
めちゃくちゃ普通の使い方ですね
すると当然ですがなんか文章が返ってきます
アナウンサー「ついに始まりました! AI神話闘神大戦! 今回の参加者は、慈悲の聖女・聖女アルテミス様と、首長竜の末裔・キリン人間殿! どのような戦いが繰り広げられるのか、今から目が離せません!」
*ズガァンッ!*
試合開始の合図とともに、アルテミスは光の速さでキリン人間めがけて突撃する。アルテミスの左腕からは「聖なる光」が放たれ、キリン人間に直撃する。しかし、キリン人間の分厚い毛皮が衝撃を吸収し、致命傷には至らない。
キリン人間「てっ! ちょっと待っていただきましょうか!」
キリン人間は首を伸ばし、「ロングネックアタック」をアルテミスに繰り出す。アルテミスの聖なる鎧が首に巻き付くが、アルテミスは「浄化の炎」で首を焼き切り、難を逃れる。
アルテミス「我が聖なる炎が、貴様の闇を浄化する!」
両者の戦いは激しさを増し、会場の熱気も最高潮に達する。キリン人間が「トルネードスイング」を繰り出すと、会場は旋風に見舞われた。アルテミスは「慈悲の祈り」で自分自身を守り、旋風を無力化する。
キリン人間「さすがは聖女様! 手強うございますなぁ」
アルテミス「私はこの戦いで、誰ひとり傷つけたくはない。だが、貴下が私の邪魔をするなら、容赦なく浄化せねばならぬ!」
突如、キリン人間が姿を消す。アルテミスは辺りを見回すが、キリン人間の姿はどこにもない。
アナウンサー「なんと! キリン人間殿が姿を消しました! どこへ行ったのでしょうか?」
*ヒュン、パシッ!*
{以下省略}
でも、これを見て読む気になりますか?なりませんね
なんの装飾もされていない長い文章を読むのはつらすぎる!
ということで、文字装飾も AI にさせます
以下の小説を原文の構造を忠実に守ったまま、
過剰なほどのHTMLタグとスタイルシートで色や大きさや太さなどを派手に装飾してください。
文章は段落ごとに div か p タグで囲んでください。画像は追加しないでください。
# 原文
{ここに文字装飾させたい文章を書く}
すると加工された文章が返ってきます
<div>
<h1 style="font-size: 2em; font-weight: bold; color: red; text-align: center;">アナウンサー「ついに始まりました! <span style="color: blue; font-style: italic;">AI神話闘神大戦</span>!</h1>
<p style="font-size: 1.5em; font-weight: bold;">今回の参加者は、<span style="color: purple; font-weight: bolder;">慈悲の聖女・聖女アルテミス様</span>と、<span style="color: green; font-weight: bolder;">首長竜の末裔・キリン人間殿</span>! どのような戦いが繰り広げられるのか、今から目が離せません!」</p>
<p style="font-size: 1.8em; font-weight: bold; color: darkred; text-align: center;">*ズガァンッ!*</p>
<p style="font-size: 1.5em;">試合開始の合図とともに、<span style="color: purple; font-weight: bold;">アルテミス</span>は光の速さで<span style="color: green; font-weight: bold;">キリン人間</span>めがけて突撃する。アルテミスの左腕からは「<span style="color: gold; font-style: italic;">聖なる光</span>」が放たれ、キリン人間に直撃する。しかし、キリン人間の分厚い毛皮が衝撃を吸収し、致命傷には至らない。</p>
<p style="font-size: 1.6em; font-style: italic; color: green;">キリン人間「てっ! ちょっと待っていただきましょうか!」</p>
<p style="font-size: 1.5em;">キリン人間は首を伸ばし、「<span style="color: blue; font-weight: bold;">ロングネックアタック</span>」をアルテミスに繰り出す。アルテミスの聖なる鎧が首に巻き付くが、アルテミスは「<span style="color: orange; font-weight: bold;">浄化の炎</span>」で首を焼き切り、難を逃れる。</p>
<p style="font-size: 1.7em; font-weight: bold; color: purple;">アルテミス「我が聖なる炎が、貴様の闇を浄化する!」</p>
<p style="font-size: 1.5em;">両者の戦いは激しさを増し、会場の熱気も最高潮に達する。キリン人間が「<span style="color: blue; font-weight: bold;">トルネードスイング</span>」を繰り出すと、会場は旋風に見舞われた。アルテミスは「<span style="color: pink; font-weight: bold;">慈悲の祈り</span>」で自分自身を守り、旋風を無力化する。</p>
<p style="font-size: 1.6em; font-style: italic; color: green;">キリン人間「さすがは聖女様! 手強うございますなぁ」</p>
<p style="font-size: 1.7em; font-weight: bold; color: purple;">アルテミス「私はこの戦いで、誰ひとり傷つけたくはない。だが、貴下が私の邪魔をするなら、容赦なく浄化せねばならぬ!」</p>
<p style="font-size: 1.5em;">突如、キリン人間が姿を消す。アルテミスは辺りを見回すが、キリン人間の姿はどこにもない。</p>
<h2 style="font-size: 1.8em; font-weight: bold; color: red;">アナウンサー「なんと! キリン人間殿が姿を消しました! どこへ行ったのでしょうか?」</h2>
<p style="font-size: 1.6em; font-weight: bold; color: gray; text-align: center;">*ヒュン、パシッ!*</p>
</div>
文章に抑揚がついて見やすいね!(そうならないこともあるけど)
ちなみに把握してる中で一番すばらしい文字装飾が行われた回はこれです
最後に、勝敗も記録したいので勝敗判定もさせます
勝敗を戦いの文章に含めさせるような指示しても忘れられがちなんですよね
あなたには文章を読んで勝敗を判定してもらいます。
登場人物は以下の二人です。
- A: {ここにキャラ1の名前}
- B: {ここにキャラ2の名前}
回答は JSON 形式で勝者を A か B で答えてください。引き分けの場合は null にしてください。
例: { "WINNER": "A" } / { "WINNER": "B" } / { "WINNER": null }
# 文章
{ここに戦闘シーンの文章を書く}
すると { "WINNER": "A" } みたいな感じで返ってきてうれしい!
たまに文章内容とあってないこともあるけど、それもまた愛嬌ですね
これで戦闘周りの仕組みは完成!
こちらもプログラム自体は数十行ぐらいしか書かずにできました!
ほかの機能とか
適当につくりました。AI 関係ないので気にしないでください
Remix と Cloudflare は神
生成AIに処理を任せられるものそうでないもの
このようにこのゲームのコアの部分は完全にAIに丸投げでつくられています
なので最低限遊べる状態になるまでの開発期間は数時間しかかかりませんでした
とはいえ、他のものを作るときに何にでもこの手法が応用できるかといわれると当然そうではありません(少なくとも2024年4月現在では)
向いてそうなこと
今回のような間違っていたり意味不明な結果がでても問題ない(むしろ笑える)ものにはとても向いています
このゲームとは別に、自分の運営する Discord サーバーでユーザー間で発生した裁判の最終判決を下す裁判長ボットなども作りましたが、こちらも結果は意味わからないほうが盛り上がるのでかなり向いていました
向いていなさそうなこと
逆に、結果が間違っていたり整合性がとれていないと問題がある処理はAIには任せるのが難しいと思われます
今後 AI の性能がさらに向上したとしても間違える可能性が常に存在する限り任せるのはちょっとこわいですね
なので必然的にゲームとかのエンターテイメント性が重視される用途が主となるのかなって感じです
改善できそうな点
まあ改善点あげてもアップデートしないから意味ないけどね!
誰かパクって作っていいよ!
もっと高性能な AI を使う
今回は Gemini-1.0 を使っています
(なぜなら無料使用枠がめちゃくちゃ多いから)
これを単純に ChatGPT や Claude に変更するだけでキャラクターステータスのバリエーションや戦闘結果の多様性が増えそうな気はします
でも相応に金かかるから大変や!
画像生成機能をつけるか、ほかの画像生成サービスの利用を促す
このゲームに参加するためには画像(他者の著作物でない)を用意する必要があります
ですが、たぶんほとんどの人は画像は用意できません
なので必然的に画像生成AIを触る人以外はユーザーになりにくいんですよね
世の中には無料でも使える画像生成サービスがいっぱいあるのでやろうと思えば誰でも使えますが、たぶんわざわざやらないんじゃないかと思います
それをどうにかしたらより多くのユーザー増が見込めるのではないか!?
キャラのステータス作るときに危険画像のタグ付けとかもする
現状だと昆虫とかみたいな苦手な人がいる画像やちょっと下品(だがセンシティブというほどでもない)画像が野放しになっています
こういうのも画像判定時にタグ付けしてデフォルトでモザイクかけるとかしたほうが親切かもね!
そのほか
レートあったほうがいいかと思ったけど自分のキャラが負けたら悲しいとか、対戦内容が武力に頼りがちとか、投稿者わかるようにしろとか、画面適当に作りすぎとか、画像消せるようにしろとか、投稿数制限しろとか、ほかにもいろいろありますね
終焉
いかがでしたか?
結局この記事で何が言いたかったのかよくわかりませんが気にしないことにしておきます
そもそもこのゲームは戯れで作っただけだったのに想像以上に好評でびっくりしました
AI神話闘神大戦は公開からわずか1か月弱でその命を終える予定ですが、その後に第二、第三のAI神話闘神大戦があらわれることをねがっております
スペシャルサンクス
トップページの「AI神話闘神対戦」のロゴは 夕焼ましろ(@yuyake_mashiro) さん、ヘッダーのロゴは だにえる(@el2da_ai) さんに作っていただきました
あとテストプレイに参加した弊 Discord サーバーのみなさまにも感謝を申し上げかけましたが、治安の悪い画像もいっぱいアップロードしてたのでやめておこうと思います
想定されるご意見・ご感想に対する返答
生成AI ってこれ LLM しか使ってないよね
わかりやすさ重視した表現です。大変申し訳ございません
Function Calling 使いなよ
めんどくさかったから適当に作った結果です。大変申し訳ございません
全然たいしたことしてないじゃん
そのとおりです。大変申し訳ございません
プロンプトの書き方がなってないよ
動けばいいので適当です。大変申し訳ございません
AI神話闘神大戦って名前ダサすぎじゃない?
ダサいほうがかっこいいんじゃないかと思ってしまいました。
大変申し訳ございません
○○っていう機能があるとうれしいです!
今後アップデートの予定はありません。大変申し訳ございません
虫とか汚い画像でてきて気分を害したんですけど!
ランダム対戦をお控えいただくようお願いいたします
この記事が気に入ったらサポートをしてみませんか?