これ。
これは何?
AIが何についてのポエムを作ってるのか当てるゲームです。
ルールは以下の通り。
- 秘密のキーワードが指定されます。これが何であるかはプレイヤーに知らされません。
- そのキーワードをテーマにAIがポエムを作ります。
- プレイヤーはそのキーワード(英語)が何かを当てます。
- 誤回答するたびにキーワードが1文字ずつ開示されます。
- 全部開示されるまでにキーワードを当てられたらクリアです。
こんな画面です。
赤い鼻と大きな嘘は鏡の中に映る
悲しい笑顔を見せる怪しい影
ハンドピースを掲げて遊ぶように
輝く瞳が消えた時には
これが何についてのポエムなのかを当てます。
なんだか悲しげですね。
ちなみに答えは『CLOWN』です。日本語でいうとピエロ。
技術解説
AI部分
これはChatGPTで有名なOpenAIのAPIを叩いてるだけです。
2023年2月6日現在ではChatGPTのAPIは公開されていないため、ChatGPTの兄弟と言えるようなテキスト生成モデルを利用しています。
OpenAIのAPIでは現在4種類のモデルが公開されており、このゲームでは一番強いtext-davinci-003を利用しています。
モデル名 | 特徴 | 価格 |
---|---|---|
text-davinci-003 | 一番優秀。でも一番遅い。 | 1000トークン0.0200ドル |
text-curie-001 | まぁまぁ優秀。遅い。 | 1000トークン0.0020ドル |
text-babbage-001 | 単純なことならできる。速い。 | 1000トークン0.0005ドル |
text-ada-001 | 凄く単純なことならできる。凄く速い。 | 1000トークン0.0004ドル |
英語なら1000トークンは約750単語くらい。日本語だともっとトークン消費するらしい。
3ヶ月のあいだは無料ですが、それを過ぎると課金しないとAPIは使えなくなります。ChatGPTが出始めのころにアカウント作った人はそろそろ無料期間終了ですね。自分はDALLE2が出始めの頃にアカウントを作ったので既に終わってました。
料金は月額の予算を決めてその範囲内で課金する形のため、自分の懐事情に合わせて遊べます。
呪文
このゲームでは以下の呪文を使ってポエムを生成しています。
「${keyword}」に関する4行の詩を日本語で作ってください。
ただし歌詞の中で「${keyword}」や${keyword}を意味する日本語を絶対に使わないでください。
キーワードがCROWNの場合は
「CROWN」に関する4行の詩を日本語で作ってください。
ただし歌詞の中で「CROWN」やCROWNを意味する日本語を絶対に使わないでください。
こんな文章になります。
UIの関係でポエムの長さを4行に制限し、ゲームを成立させるために文章の中に「CROWN」やCROWNを意味する「ポエム」を使わせないようにしています。
ただ残念なことに、この約束は結構な確率で破られます。
現時点のAI利用は「どれだけ不確実性を許せるか」がキモになってきそうです。
アプリ部分
Next.jsを利用しています。
OpenAIのAPIへのアクセスにはAPIキーが必要で、それが漏れると悲惨なことになるので完全にフロントエンドだけで完結するのは難しいです。そのためリクエストを中継するプロキシ的なAPIを用意する必要があります。
そしてこのプロキシAPIも用途によっては結構神経を使います。今回の用途は「キーワードに応じたポエムを作る」だったので、プロキシAPIはポエムを作る機能だけを提供しています。ポエム生成にしか使えません。しかしより柔軟な用途に使う場合は、クライアントから生に近いクエリをプロキシが受け取る必要があります。そうなると誰かにプロキシをタダ乗りされ、OpenAIのAPI利用料で損をする可能性があります。
ホスティング部分
これ、意外と困りました。
最初Vercelにホスティングしていたのですが、DavinciモデルだとOpenAIのAPIが返ってくるのに10秒前後かかります。Vercelの無料プランはバックエンドの処理で10秒以上かかるとタイムアウトしてしまうので、2回に1回くらいの確率でエラーになります。有料プランならこの制限は緩和されますが、月額20ドルは結構痛いです。
Netlifyもダメでした。同じく10秒制限があります。結局Google Cloud Runを利用することになりました。これならかなり長い時間かかってもタイム・アウトすることはありません。
Google Cloud Run立ち上げスピードどうだったかなぁ~とも思ったのですが、最近はCPUブーストという機能もあり、コールドスタートの時間も気にならないレベルになっていました。
おわりに
2023年2月時点での感想としては、やっぱり生成系AIをコントロールするのって難しいですね。
AIを利用したWebサービスを作る…と言ってもただAPIを叩いて結果を利用するだけではありますが、不確実性が許される用途を探し、不安定な結果をどう料理して安定した結果に整形するかが腕の見せどころになりそう。(それもいずれはAIの進化で解決するでしょうけど)
Webサービス:
リポジトリ: