f4エンジニアブログ

f4samuraiの中の人たちが書いています

スマホゲームでのChatGPTの活用 アンジュ・リリンクのエイプリルフール施策

はじめに

今回は業務においてChatGPT を活用した件についてお話しします。
作ったものは、2023年4月1日(土)の24時間のみ公開された、エイプリルフール限定施策のWebサイトです。

 

 

▼本施策に関するプレスリリース

https://prtimes.jp/main/html/rd/p/000000081.000068754.html

エイプリルフールストーリーの概要

『アンジュ・リリンク』の公式HPにチャットAIが登場。青蘭学園の情報が搭載されたAIに対して自由にメッセージを送ることで、ストーリーが展開していきます。

 

<ストーリーあらすじ>

Dr.ミハイルが開発した最新鋭AIが突然、記憶を喪失してしまった!

あなたと日向美海はDr.ミハイルから依頼を受け、記憶を喪失し、ポンコツAIとなってしまったAIから聞き取り調査を行うことに。

最新鋭AIに何があったのか?

事件の真相を聞き出そう!

 

施策の仕様とポイント

・特設Webサイト上で、プレイヤーはチャット形式で自由に会話ができる。

・会話が10往復するまでの間に記憶喪失の原因を特定し、フォームに正解を入力すればクリアとなる。

・ロボットとの会話にChatGPT APIを使用している。

 

構成

Webフロントエンド (JavaScript)

AWS API Gateway

AWS Lambda (Python)

ChatGPT API

 

コスト

ChatGPT APIにリクエストするたびに、パラメータで渡す文字列とレスポンスとして返ってくる文字列のサイズ(トークン数)に比例して課金されます。実装時点で一番お安いgpt-3.5-turboモデルだと1000トークンごとに$0.002(0.27円)という設定です。トークンの計算方法は、日本語だと平均して0.91文字で1トークンに相当するのだそうです。

 

今回の仕組みだと、会話1回のリクエストごとにそれまでの会話履歴をまるごとパラメータにして送る形なので、会話の往復回数が増えるほど1リクエストあたりのトークン数が多くなっていきます。また、初期設定としてChatGPTに与える指示の文字数は毎回のリクエストに乗ってきます。実測として、会話の1回目が1000トークン、10回目だと2500~3000トークンくらいになる感じで、10回の会話を行なうと合計4円程度がかかりました。

※会話履歴をすべて送らずに直近数回分に絞ったりすることで、会話の往復回数が増えたときのトークン数を抑える工夫ができるとのこと。

ユーザ数と1利用あたりの会話回数を予想すると、ChatGPT APIの使用料は$100あれば収まる見込みでした。ただ、会話ボタンを連打したらその分だけ課金されるのは危ないですし、急にバズったりしてうれしい悲鳴が上がる場合も考慮して、いくつかの対応を入れました。

    • 会話は10往復を上限とし、それ以上続けられないルールにした(Lambda側のバリデーションでも配列の長さをチェックしている)。

    • 10往復の会話をしたあとに最初からやり直したい場合、1時間のインターバルを待つ必要がある、という仕組みにした(これはフロントエンドでチェックしているだけなので、仕組みが分かれば回避できてしまう)。

    • ChatGPT APIのHard limitに$400(見込みの4倍)を設定した。Hard limitは月の課金額の上限で、この予算額を超えると以降のAPIリクエストに対してエラーを返してくれる。※初期状態だとHard limitとして設定できる最大値が$100なので、この上限解放申請をOpenAI社に送らないといけない。1日で対応してもらえた。

    • API Gatewayのスロットリング(時間あたりのリクエスト上限数という意味合いのもの)を設定した。仮に短時間にどれだけアクセス集中したとしても、$400を使い切るのに24時間はかかる程度のしきい値にした。

結果として、4月1日の24時間で約1万リクエストがあり、API使用料は約4000円で済みました!

 

総括

  • Python初心者でも実装できた
  • ゲームとしてどのように面白くするかの工夫は必要
  • 今までにないユーザー体験を提供できる

 

後記

実装段階ではあまりにうまくいかないので、登場人物を演じてもらうことは諦めて、言うことが一切アテにならない「記憶喪失のポンコツAI」という逆の方向に振り切りました。記憶喪失のAIではあるけど、「青蘭学園」「風紀委員」「東条遥」などのキーワードには反応するように指示しておいて、記憶喪失の原因を解き明かすという部分でゲーム性を出せないか、という狙いでした。

 

「あなたは記憶喪失です」と指示してもダメで、「記憶喪失になったポンコツロボットを演じてください(ロールプレイしてください)」と指示した方が意図に近い受け答えをしてくれました。