DIY

AfterAI Flaps を使った遊戯王ライフカウンター

子供の頃、遊戯王でライフポイント(LP)を記録するのがいつも面倒でした。そこで今回、AfterAI Flaps を使って LP の計算と表示を自動化してみました。

GitHub: 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 のパラメータ数は調べてみたが、公開情報は見つからなかった。