19
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

challenge_clubAdvent Calendar 2024

Day 3

【パタパタ】遊戯王ライフ表示器作ってみた

Last updated at Posted at 2024-11-13

遊戯王はライフポイント(LP)の計算をしなくてはいけないので、子供のころ苦労しました。今回は Web API が公開されているパタパタ表示器 AfterAI Flaps を使って、遊戯王のライフを計算・表示してみようと思います。

動画

ソースコード

AfterAI Flaps とは

image.png

デプロイメント図

YGODeploymentDiagram.png

  • ターン表示器: 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 を使うことになりました。

フローチャート

YGOFlowChart.png
『相手にXXXダメージを与える』という意味のことが発言されたら、相手のライフポイントをディスプレイから GET リクエストで取ってきます。ダメージ計算のあと、 ディスプレイ POST リクエストして表示されている数字を更新します。
簡単のため『俺のターン』についてはフローチャートに描いていないですが、同様の処理をしています。詳しくはコードを見てください。

プロンプト

以下タスクを llama3.2 (3B) にやらせようとしました。

入力: 『現在どちらのターンなのかという情報』と『発言を文字化した情報』
出力: ゲームの状態変化の情報(ダメージや回復、次のターンなど)

しかし相手を回復してしまったり、意外と苦しみました。他の AI にプロンプトを改善してもらったりしましたが、それでもダメでした。

結局、同じプロンプトを OpenAI 社の gpt-4o-mini に食わせたらうまくいきました。

まとめ

  • パタパタ表示器 (AfterAI Flaps) は DIY プロジェクトの一部としてちゃんと使える
  • リアルタイム性を上げるためには、音声エンジンの発言完了イベントを待たずに途中で割って入ると良さそう
    • 発言完了イベント発生までのタイムラグが、エンジンのパラメータとしていじれるならそれで良い
  • このような小さな課題でも、モデルによってかなり性能に差がある
    • llama は有名なモデルだが、この課題で躓いたのは意外だった
    • llama 3.2 には 3B よりもパラメータ数が多いバージョンもあるので、それならうまくいくのかもしれない
    • gpt-4o-mini のパラメータ数はざっとインターネットをさらったが見つけられなかった
19
10
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?