社内向け ChatGPT 検証環境の構築について

こんにちは。エージェンシー事業でプロフェッショナルアプリケーションエンジニアをしている菊池です。今回は話題の生成 AI のひとつ Azure OpenAI の ChatGPT を社内利用できるようにするために、OSS の Chatbot UI を使って検証環境を構築したので紹介したいと思います。

この検証環境の構築と社内展開はしばらく前に完了していて、いまも順調に稼働しています。

背景

世の中を騒がす新しいテクノロジー ChatGPT の可能性を日常の業務を通して探るべく、ある程度の社内情報を入れて検証できる検証環境を一刻も早く社内向けに整える必要があるのでは!?という話が社内某所で湧き上がり、それではさっさと準備して使えるようにしましょう!となったのが話の発端です。

要件

先の背景を元に、ざっと ChatGPT 検証環境の要件として上がったのが以下の内容になります。

Azure OpenAI の ChatGPT 検証環境を社内に提供

本家 OpenAI の ChatGPT を WEB 版で利用する場合、オプトアウトしないとプロンプトの情報が学習データとして利用される可能性があります。このことから、まずは本家の OpenAI もしくは Azure OpenAI が提供している ChatGPT を API から利用することが検討されました。

なかでも Azure OpenAI が提供している ChatGPT は、本家のサービスでは提供予定になっている SLA が提供されてます。社内利用を想定した場合、こちらの方がより安心安全ということで、Azure Open AI の ChatGPT を社内展開することになりました。

OSS の Chatbot UI を利用して最速で公開

直接ユーザーが操作する Web アプリケーションの部分は、OSS として公開されている Chatbot UI を利用することにしました。これにより、実装コストを最小限に最速で検証環境を社内に提供することを目指すこととなりました。Chatbot UI は使用感も本家の UI に近いので、利用者側の負担も少ないものと思います。

念のため下り方向のアクセスを制限

万が一の想定になりますが、Chatbot UI のバックエンドに悪意のあるコードが混入して、プロンプトの入出力内容が Chatbot UI のバックエンドから意図しない外部へ送信されることをあらかじめ防いでおきたいです。

このことから、Chatbot UI のバックエンドから外部へのアクセスに関しては Azure OpenAI にデプロイした ChatGPT モデルのエンドポイントへのみアクセスを許可することにしました。

検証環境へのアクセスを制限

社内情報を入れて検証できる環境を作るという目的のため、セキュリティの観点からアクセス制限をかける必要があります。
弊社社員には専用の Google Workspace のアカウントが付与されているので、このアカウントの利用者にのみこのサービスの利用を許可するように認証機能を持たせることになりました。

構成

先の要件に挙げられた項目を満たすべく、以下の構成でシステムを構築しました。構築にあたっては、菊池がメイン業務のデータ基盤で使っていて慣れている Google Cloud を利用しました。AWS だとどういう構成になるのかな?というのも後ほど考えたいところです。

ここでは全体構成を大きく以下の三つの部分に分けて説明したいと思います。

ロードバランサー

Google Cloud のロードバランシングサービスに、いくつか他のサービスを組み合わせて以下の項目を実装しています。

ユーザー認証

Google Cloud のロードバランシングサービスに IAP (Identity-Aware Proxy) サービスを組み合わせて実装しました。この IAP サービスに、アクセスを許可させたい Google Workspace アカウントを登録することで認証処理を行っています。

当初は、社内ネットワークやリモートワークの VPN 接続からのみ ChatGPT 検証環境へのアクセスを許可するように制限して、認証機能は実装しない方法も検討していました。しかしながら、このネットワークでアクセスを制限する構成案を持って弊社のインフラチームに「この構成、どうだろう?」と相談したところ「菊池さん IAP (Identity-Aware Porxy) でいけるかもよ!?」とアドバイスをもらいました。試しに構成してみたらあっさり動いたので認証機能を実装することにした経緯があります。あの時のアドバイスありがとう!!!

実装がひと段落してから、IAP を社内の認証サーバーと連携させることも視野に入れています。

今回採用した Web アプリケーションの Chatbot UI には、認証機能が実装されていません。このため、ネットワークでアクセスを制限する方法や、 Chatbot UI に認証機能を独自に実装することもある程度想定していましたが、このようにクラウドサービス側で対応できたので、実装コストをそこそこ節約できたものと思います。

HTTPS 対応

Google Cloud のロードバランシングサービスに HTTPS を設定することで対応しています。

不正アクセス対策

開発中はリモートワークしている菊池の自宅からのアクセスのみを許可していました。サービス公開後の不正アクセス対策としては、ロードバランシングサービスに Cloud Armor を組み合わせています。

Web アプリケーション

Chatbot UI には Dockerfile が同梱されているので、このコンテナを動作させるために Cloud Run と Secret Manager を組み合わせて構築しています。

Chatbot UI

Google Cloud で Web アプリケーションのコンテナを動作させるとなれば Cloud Run でしょう。ということで、素直に Cloud Run にデプロイしたところあっけなく稼働しました。便利で簡単でした。

動かしていて気がついたのですが、Chatbot UI から Azure OpenAI を利用する場合、新しくチャットを作成する時に表示される GPT モデルのセレクトボックスが機能していないようなので、若干コードに手を入れて機能するようにしています。

シークレットキー管理

Chatbot UI を動作させるには Azure OpenAI が発行した API Key を環境変数として渡す必要があります。この API Keyを Secret Manager に登録して、Cloud Run から参照するように設定しています。この辺も設定だけで済むので、特に難しいこともなくあっけなく連携できました。簡単でした。

下りアクセス制限

Cloud Run で稼働させている Chatbot UI からの下りアクセスを Azure OpenAI にデプロイした ChatGPT モデルのエンドポイントに制限している部分になります。

Cloud Run にはトラフィックを全て VPC (Virtual Private Cloud) にルーティングする設定があります。これを利用して Cloud Run から VPC 経由で外部へ接続するように構成しています。合わせて外部接続用に VPC に Cloud NAT 等を組み合わせています。この VPC に組み合わせた Cloud Firewall Rules に、Azure OpenAI のエンドポイントへのアクセスのみ許可するルールを設定しています。

構築期間

他の業務もやりながら空いた時間に構築しましたが、ざっと 1 ~ 2 週間ぐらいで構築してテスト公開するところまで持っていけました。ハマることもなくあっさり動いた印象です。

コスト

Google Cloud だけでいうと、1日あたり数百円のコストで済んでいます。安い!

まとめ

今回の ChatGPT 検証環境構築で感じた点をまとめると

  • クラウドサービスの認証機能を使うと簡単で安心
  • 構築期間もそれほどかからず
  • 運用コストも安い

それに加えて、僕はアドウェイズ転職前に長らくインターネットサービスプロバイダー等でネットワークエンジニアをしていた時期があります。あのときと技術環境や仕事内容はだいぶ変化しましたが、今回のような構成を考える上で以前のインフラ構築運用経験はいまだに役に立つなーと改めて感じた次第です。

それではみなさんごきげんよう。また記事でお会いしましょう。

おまけ

構築した ChatGPT 検証環境のデモは以下のようになります