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