💬

OpenWebUIで組織独自のChatGPT環境を構築してみた

2024/07/14に公開

自己紹介

EC系サービスでSREエンジニアをしています。また、秋葉原で中高生向けのプログラミング教室でクラスマネージャーを務めている@andex_tokyoです。

背景

私たちの教室では、クリエイティビティーを高めるために生成AIの利活用を推進しています。中高生に最新のモデルであるGPT-4oに触れて活用して欲しいと考えています。しかし、ChatGPTのProプランは月額USD20がかかり、利用規約上の年齢制限もあるため、中高生が使うにはハードルが高いという現状があります。

アプローチ

OpenWebUIを自サーバーでホスティングし、OpenAPIのAPIキーを経由してGPT-4oにアクセスできるようにしました。

OpenWebUIにはユーザー管理機能が実装されており、許可されたユーザーのみに使用を制限することができます。

また、トークンの無制限な使用を防ぐために、pipelinesを使用してアカウントのRate Limitを設定しています。以下の項目が設定可能です:

  • 1分あたりのリクエスト数
  • 1時間あたりのリクエスト数
  • スライディングウィンドウのリミット
  • スライディングウィンドウの時間

このソリューションにより、人数分のChatGPT Proプランを契約するよりもコストを削減し、ChatGPT環境を提供できます。

デモGIF

実装

構成

今回は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の使用を見送っている組織には、このソリューションが役立つと思います。

AkihabaraSchool

Discussion