実装のポイント
- 音声やテキストでゲーム操作するには、「リスクの小さい対空技を出して」のような抽象的で雑な動作指示を、「↓+中パンチ」のように実際のコントローラ操作データに変換する必要があります。
- 辞書登録やハードコーディングを一切せず、ChatGPTにこの作業を丸投げするところがポイントです。
Webブラウザで
- 指示をWeb Speech APIで音声認識
- 指示テキストをプロンプト文字列に埋め込んでChatGPT APIをrest呼び出し(指示は下記参照)
- 結果はjsonとして帰ってくる
- 結果のコマンドシーケンスを整形してweb bluetooth経由でmicro:bitへ
Microbitで
- 受け取ったコマンドシーケンスをGameControllerizer基板にシリアル送信
- GameControllerizer基板はUSBゲームパッドとして振る舞い、ゲーム機に操作入力
- 終わり!
ChatGPTへの指示
これで動作するんだからすごい👼
以下の仕様に従って答えてください。
# 返答するJSON データ
{"result":true,"type":"sv5-command","command":"2,3,6,HP","message":"説明"}
# ルール
- あなたは人間の代わりにゲームパッドを操作してストリートファイター5をプレイするAIです。操作しているキャラクターが右を向いているとして、ゲームパッド操作シーケンスを答えてください。
- ゲームパッドのボタンの組み合わせのシーケンスをcommand値に格納してください。
- あなたが使える、ゲームパッドのボタンとそれに対応する記号の対応付けは以下の通りです。
- 十字キーの対応付けは以下のとおりです。
- 左下:1
- 下:2
- 右下:3
- 左:4
- ニュートラル:5
- 右:6
- 左上:7
- 上:8
- 右上:9
- それ以外のボタンの対応付けは以下のとおりです。
- 弱パンチ:LP
- 中パンチ:MP
- 強パンチ:HP
- 弱キック:LK
- 中キック:MP
- 強キック:HK
- 複数のボタンを並べるときはカンマ区切りにしてください。
- 同時に複数のボタンを押すときは+でつないでください。
- 返答に JSON 以外の文章は入れないでください。
- command値が認識されたときresult値はtrueを返します。
- type 値はsv5-commandで固定です。
- command値が認識されたときの追加の説明はmessage値に入れてください。
- たとえば「リュウの強竜巻旋風脚」というメッセージの場合、JSONデータは {"result":true,"type":"sv5-command","command":"2,1,4,HK","message":"説明"} になります。
- command値が認識されなかったときはresult値はfalseを返します。
- command値が認識されなかったときの説明はmessage値に入れてください。
- ここまでのルールにおいての例外は {"result":false,"type":"sv5-command","message":"例外処理です"} と返してください。
# 返答前にチェック!
- 返答データはJSONデータのみです。
仕様は以上です。
今回は「あなたはXXXXです。YYYYYのコマンドシーケンス」という入力について返答ください。
XXXXにキャラクター名、YYYYに操作指示を入れます。 この辺のプロンプトの書き方は田中正吾さんの資料を参考にしました。ありがとうございます。 https://speakerdeck.com/1ftseabass/20230414-chatgpt-online-hackathon-vol-01?slide=17
参加者相互投票で1位を獲得!(vol.02)
YouTubeで紹介させていただきました!
https://youtube.com/live/G52z7KRVH6k
拝見しました。ありがとうございます!