皆さんはLLMの仕組みをご存じでしょうか?
OpenAIのAPIを利用したことがある人はご存じだと思いますが、1トークンずつ文字列が決定されることを繰り返しています。
実はあれ、中で小人が多数決で決定しているんですよ...
今回はその小人側になれるクソアプリを突貫で作成しました。
クソアプリアドベントカレンダーでモチベが上がってしまったので仕方ないですね。
つかいかた
質問を作る
左上の鉛筆マークが新規作成です。
質問文、temperatureを設定してRunをクリックします。
質問に回答する
回答画面では10秒に1文字入力して投票でき、投票データが確認できます。
EOS(終了トークン)はボタンで入力できます。
感想
作っていたらこっくりさんとか、2chの〇〇が完成したらのノリを思い出しました。
※ 予告なくメンテナンス・終了する可能性があります。
インフラの選定
Aurora Serverless v2
今回のアプリケーションの要件として、投票の集計がありました。
個人開発御用達のNoSQLではこの機能が用意されておらず、DynamoDBでやろうとするとデータをすべてAPサーバー内のRAMに読み込む必要があり、投票が多い場合にメモリ不足を引き起こす可能性がありました。
また、一つのドキュメントサイズ制限も厳しいため、トランザクションで投票結果を都度集計するなど工夫してもスケールしないと考えました。
これらの理由からRDBを採用する必要がありましたがクソアプリにお金はかけられないのでAurora Serverless v2を採用し、休眠期間中の請求をカットしました。
個人的にはSupabaseとの二択にできると考えています。
GCP Cloud Run
サーバーレスのコンテナ実行環境で、AWS App Runnerと異なりゼロスケールが可能です。
AWSでまとめることができればよかったのですが、lambdaではinit durationの上限に達し実行できませんでした。
Remixでフルスタックアプリにしていることの弱点ですが、手軽に作れてSSR対応できるのは大きいです。
バグ修正とか
prismaがタイムアウトする
aurora serverless v2のコールドスタートが長すぎてタイムアウトしました。
pool_timeout=60を接続設定に追加することで解決した...はずですがインフラ周りは検証がむずかしいですね。
データベース接続パスワードがローテーションされる
AWSで完結していないので、シークレットマネージャーのローテーションに追随できませんでした。
ローテーションは無しにすることで事なきを得ました。