遊戯王はライフポイント(LP)の計算をしなくてはいけないので、子供のころ苦労しました。今回は Web API が公開されているパタパタ表示器 AfterAI Flaps を使って、遊戯王のライフを計算・表示してみようと思います。
動画
ソースコード
AfterAI Flaps とは
- エンジニアのためのパタパタ表示器です。僕が作りました。
- ここで買えます: https://shop.afterai.dev
- ワークショップやります: https://www.street-academy.com/myclass/185682?sessiondetailid=15206829&trigger=browse-history_top
デプロイメント図
- ターン表示器: AfterAI Flaps 5 文字分
- ライフポイント表示器: AfterAI Flaps 9 文字分
- 実装段階で、 4 文字分を2つ使用することにしました
- 計算機: MacBook Pro (M2)
計算機
MacBook Pro (M2) には潤沢なコンピューティングリソースがあるので、計算処理は全てローカルで動かす方針にしました。 Speech-to-Text には Vosk を、 テキストからコマンドを抽出するためには Ollama 経由で llama3.2 を使用しました。
しかし、llama3.2 (3B) では誤った答えが返ってくることが多すぎたので、結局 OpenAI 社の gpt-4o-mini を使うことになりました。
フローチャート
『相手にXXXダメージを与える』という意味のことが発言されたら、相手のライフポイントをディスプレイから GET リクエストで取ってきます。ダメージ計算のあと、 ディスプレイ POST リクエストして表示されている数字を更新します。
簡単のため『俺のターン』についてはフローチャートに描いていないですが、同様の処理をしています。詳しくはコードを見てください。
プロンプト
以下タスクを llama3.2 (3B) にやらせようとしました。
入力: 『現在どちらのターンなのかという情報』と『発言を文字化した情報』
出力: ゲームの状態変化の情報(ダメージや回復、次のターンなど)
しかし相手を回復してしまったり、意外と苦しみました。他の AI にプロンプトを改善してもらったりしましたが、それでもダメでした。
結局、同じプロンプトを OpenAI 社の gpt-4o-mini に食わせたらうまくいきました。
まとめ
- パタパタ表示器 (AfterAI Flaps) は DIY プロジェクトの一部としてちゃんと使える
- 出荷時点ではバージョン 1.1。必要に応じて GitHub から最新のファームウェアをダウンロードして焼くと良い
- https://github.com/AfterAILab/flaps-esp
- リアルタイム性を上げるためには、音声エンジンの発言完了イベントを待たずに途中で割って入ると良さそう
- 発言完了イベント発生までのタイムラグが、エンジンのパラメータとしていじれるならそれで良い
- このような小さな課題でも、モデルによってかなり性能に差がある
- llama は有名なモデルだが、この課題で躓いたのは意外だった
- llama 3.2 には 3B よりもパラメータ数が多いバージョンもあるので、それならうまくいくのかもしれない
- gpt-4o-mini のパラメータ数はざっとインターネットをさらったが見つけられなかった