AfterAI Flapsを使った遊戯王ライフカウンター
子供の頃、遊戯王でライフポイント(LP)を記録するのがいつも面倒でした。そこで今回、AfterAI Flapsを使ってLPの計算と表示を自動化してみました。
GitHub: https://github.com/AfterAILab/Yu_Gi_Oh_Life_Counter
構成図

使ったもの:
- AfterAI Flaps(5文字): どちらのターンかを表示。
- AfterAI Flaps(9文字): 両プレイヤーのライフポイントを表示。
- MacBook Pro (M2): 全体の処理を担当する頼れる相棒。
PC側のセットアップ
MacBook Pro (M2)は十分なスペックがあるので、すべての処理をローカルで完結させることにしました。音声認識にはVoskを、テキストからコマンドを抽出する部分では最初Ollama経由のllama3.2を試しました。ただ、llama3.2(3B)は誤った結果を返すことが多く、最終的にOpenAIのgpt-4o-miniに切り替えました。
フローチャート

たとえば「相手にXXXダメージ」と発話すると、システムがGETリクエストで相手の現在LPをディスプレイから取得し、ダメージを計算してPOSTリクエストで表示を更新します。
「俺のターン、ドロー!」の処理はフローチャートでは省略していますが、基本的な流れは同じです。詳しくはコードをご覧ください。
プロンプトで苦労した点
最初はllama3.2(3B)に次のようなタスクを任せようとしました:
入力: 現在のターン情報と、音声認識で得たテキスト。
出力: ゲーム状態の変化(ダメージ、回復、ターン交代など)。
ところがllama3.2はうまくいかず、ダメージを与えるべき場面で相手を回復させてしまうことが頻発。他のAIにプロンプト改善を相談してみたものの改善せず、最終的に同じプロンプトをgpt-4o-miniに渡したら一発で正しく動きました。
まとめ
- AfterAI FlapsはDIYプロジェクトの部品として十分実用的。
- 必要に応じてv1.2へのアップグレードも検討を。
- リアルタイム性の改善: 発話完了を待つより、途中で割り込んで処理を始めた方が体感速度は上がりそう。
- 音声エンジン側のパラメータで発話完了判定の遅延を調整できると理想的。
- モデルによる性能差が想像以上に大きい: こんな小さなタスクでも顕著に出る。
- llamaは有名なモデルだが、この用途での苦戦は意外だった。
- llama3.2の3Bより大きいバージョンなら結果が違うかもしれない。
- gpt-4o-miniのパラメータ数は調べてみたが、公開情報は見つからなかった。