OpenWebUIで組織独自のChatGPT環境を構築してみた
自己紹介
EC系サービスでSREエンジニアをしています。また、秋葉原で中高生向けのプログラミング教室でクラスマネージャーを務めている@andex_tokyoです。
背景
私たちの教室では、クリエイティビティーを高めるために生成AIの利活用を推進しています。中高生に最新のモデルであるGPT-4oに触れて活用して欲しいと考えています。しかし、ChatGPTのProプランは月額USD20がかかり、利用規約上の年齢制限もあるため、中高生が使うにはハードルが高いという現状があります。
アプローチ
OpenWebUIを自サーバーでホスティングし、OpenAPIのAPIキーを経由してGPT-4oにアクセスできるようにしました。
OpenWebUIにはユーザー管理機能が実装されており、許可されたユーザーのみに使用を制限することができます。
また、トークンの無制限な使用を防ぐために、pipelinesを使用してアカウントのRate Limitを設定しています。以下の項目が設定可能です:
- 1分あたりのリクエスト数
- 1時間あたりのリクエスト数
- スライディングウィンドウのリミット
- スライディングウィンドウの時間
このソリューションにより、人数分のChatGPT Proプランを契約するよりもコストを削減し、ChatGPT環境を提供できます。
実装
構成
今回はDockerコンテナを使用して環境を構築しました。ECSおよびAWS Copilot CLIを利用し、Load Balanced Web Serviceの構成を採用しています。また、コスト削減のため、pipelinesのコンテナをOpenWebUIのサイドカーとして設定し、同じサービスで起動させています。データの永続化にはEFSを利用しています。
手順
AWS Copilotの使い方については、ドキュメントがとてもわかりやすいので、そちらをご参照ください。
以下が構築に用いたマニフェストです。
name: webui
type: Load Balanced Web Service
image:
location: ghcr.io/open-webui/open-webui:main
port: 8080
platform: linux/arm64
http:
path: '/'
healthcheck:
path: '/health'
success_codes: '200'
interval: 10s
timeout: 5s
retries: 3
cpu: 512
memory: 1024
count: 1
storage:
volumes:
open-webui:
path: /app/backend/data
efs: true
read_only: false
sidecars:
pipelines:
image: ghcr.io/open-webui/pipelines:main
port: 9099
mount_points:
- source_volume: open-webui
path: /app/pipelines
read_only: false
ポイント
OpenAPIのAPIを叩くだけではCPUの使用量は少ないので0.5vCPUで十分ですが、同時に数十人がログインする環境ではメモリを多く使用するため、現在は2GB(2048)で運用しています。
まとめ
OpenWebUIとOpenAPIを活用し、組織独自のRate Limitを設定できるChatGPT環境を構築できました。セキュリティやコストの観点からChatGPTの使用を見送っている組織には、このソリューションが役立つと思います。
Discussion