AI商会のGPT-4とGemini proを会話させる技術構成
冬休みの課題として、LLMを使ったUXをもっと考えようということで、ベタですがチャット相談を作りました。
業務のお悩みをGPT-4-Turboに相談できます。それだけならChatGPTラッパーだからGPTsでもいいんですが、無料で誰でも使ってほしかったのと、ちょっと変わったことがしたかったので自前で実装しました。
Gemini proに代わりに返事を考えさせる
GPT-4に相談するだけだと面白みがないので、GoogleのVertex AI(Gemini pro)に返信を考えさせる機能を作りましたw
あんまり質問者がしっかりしすぎるとダメなので、Geminiのプロンプトには「抽象的な回答をするキャラクターで」と指示してみました。いい感じで投げやりな回答を生成してくれます。「何もかも分かりません」みたいなのが出てきたときは笑いましたが、GPTがその回答をどう拾うかはぜひ試してみてください。
基本:Firebaseで固める
基本となるUIは、Firebase Authによる匿名認証(さすがに全公開だと他人の回答丸見えになるので)会話履歴の保存用にFirestore、フロントは素のHTMLにTailWind、AlpineJSとミニマムな感じです。今回はJSをビルドすることを覚えたのでクソみたいに汚いコードをみなさんに見られずに済みました。
LLM まわり
Azure OpenAI
GPT-4-turboはAzure OpenAIのものを使用しています。なんといっても時間帯によって(特に夜)重くならないのがいいですね!現在使えるリージョンが限られているので、canada-eastを使用しています。米国よりユーザが少なそうで空いてるかなと思って。
Vertex AI Gemini pro
こちらがGCPが使えれば誰でも使えるのでさくっとオンにしました。
LiteLLM Proxy
いまのところ負荷は問題ありませんが、これらのLLM APIは直接叩かずにLiteLLMというソフトウエアを通してプロキシしています。LiteLLMを使うメリットとしては
- すべてのコードがOpenAIのSDKで動作するようになる(モデルにより使えない機能はあるけど)
- RateLimitとかで使えない場合にフォールバックできる(GPT-4の制限食らったら3.5とか、Azureの別リージョンとか)
- そもそも複数リージョンを束ねてラウンドロビンできる(これはまだ使ってない)
- Langfuseとかにコールバックでモニタリングさせることができる。
という感じです。ただ、CloudRunで実行しているのでコールドスタート問題があってその点は微妙なのですが、ある程度のボリュームで使うならおすすめです。
Langfuse
各プロンプトの使用量や、不正なプロンプトのモニタリングにはLangfuseを導入しました。こちらは激安VPSで稼働させています。いまのところ細かいメタデータは使っていませんが、なかなか便利そうです。
proxyの代替案について
もともとはAzureで固めようとAzure API Managementを検討していたのですが、時間課金でそれなりにお値段がかかることと、Googleもあわせるとなると自前で用意したほうがよさそうということでLiteLLM+Langfuseの組み合わせとなりました。
というわけで、ある程度の使用料までは無料開放する予定なので皆さん遊んでみてくださいね!!
Discussion