このページの本文へ

用途に合った生成AIを選ぶための比較/検証環境をOSSで構築する方法 テクニカルレポート

公開日:2025年11月21日

R&D本部 言語処理技術部 ITエンジニアの松島です。
​生成AIのビジネス活用が「研究」フェーズから「実用」フェーズへと移行した現在、当部門には社内外から「この課題を生成AIで解決できないか」といったご相談をいただく機会が増えてきました。
​こうしたご相談に対応するにあたり、まず取り組むべき重要なステップの一つに「用途に適した大規模言語モデル(以下、LLM)の選定」があります。用途に合ったLLMを速やかに選定し、簡単なプロトタイプを作りご覧いただくと、検討もスムーズに進みます。実際にそうした対応を実施した事例もいくつかあります。
​しかしながら、相談のたびに毎回モデルの比較や評価を個別に行うと、どうしても時間と労力がかかります。組織としてこの活動を継続的に進めていくためには、LLMの選定を効率的に行う仕組みが必要だと感じていました。そこで今回は、複数のクラウドLLMを同じUI上で比較/検証できる環境を整備した事例をご紹介します。オープンソースソフトウエア(以下、OSS)のOpen WebUIとLiteLLMを組み合わせることで、少ない構成で柔軟なモデル比較が可能になります。

モデル比較が簡単にできるツールが欲しい

生成AI関連の開発を進めるなかで、「この業務課題に合うLLMを選ぶには、実際に複数のモデルで試してみるのが一番早い」という場面が多くあります。
ただし、現状の各種クラウドLLMはそれぞれ専用のUIやエンドポイントを持ち、同じプロンプトで複数モデルを比較するには、各プラットフォームにアクセスして都度入力/確認を繰り返す必要があります。​
また、AIベンダーからさまざまなモデルが短期間で次々と登場するなか、モデルの「出力の傾向」や「回答の粒度」「日本語処理の強さ」などを比較して把握しておくことの重要性も増しています。
そのため、以下が簡単にできるツールを探していました。​

  • 単一のUI上で複数モデルの応答を横並びで確認できること
  • モデルの切り替えや追加が手軽であること

調査の結果、Open WebUIとLiteLLMを組み合わせるという案にたどり着きました。

Open WebUI×LiteLLMによる比較環境

Open WebUIとは

Open WebUIは、LLMと対話するためのGUIツールで、OSSとして公開されています。クラウドLLMと対話するインターフェースとしてOpen WebUIを用いるのは以下のような利点があり、生成AIチャットサービスを構築したい場合には有力な選択肢となるでしょう。

  • ChatGPTライクなシンプルなUIで生成AIと対話可能
  • 生成されたPythonコードを実行する機能やカスタムプロンプトを登録/呼び出す機能など、実用的な機能が備わっている
  • Dockerで容易に立ち上げ可能
  • 複数のモデルとの対話を同時に行える

特に「複数のモデルとの対話を同時に行える」点は非常に魅力的です。異なるLLMからの応答を並べて比較できるため、モデルごとの出力の違いや特性を定性的に把握するのに役立ちます。
下の図ではOpen WebUIを用いて、OpenAI GPT‑4o、Anthropic Claude 3.5 Sonnet、Amazon Nova Proに同一のプロンプトを与えた場合の出力を比較しています。​

Open WebUIでクラウドLLMを使うには

Open WebUIでのクラウドLLM APIの利用は、OpenAI形式を前提としています。そのため、Anthropic ClaudeやGoogle GeminiなどのクラウドLLMは、そのままでは扱えません。これを解決するために、LiteLLMを利用します。
LiteLLMとは、OpenAI互換のAPI形式で各種クラウドLLMの呼び出しをラップするOSSです。​

  • 100以上ものLLMに対応し、その全ての呼び出しをOpenAI形式で統一
  • Dockerで容易に立ち上げ可能

Open WebUIから見れば「OpenAI互換API」にアクセスしているだけなので、そのままAPIリクエストの送信先をLiteLLMに変更することで他社LLMでも同じUIで使えるようになります。

構成と環境構築

では、実際に構築します。構成としては、Open WebUIとクラウドLLMの中間にLiteLLMを挟む形にします。

構成と環境構築

1.Dockerで2つのサービスを立ち上げる

Open WebUIとLiteLLMは両方、Dockerコンテナとして起動できます。
2つのコンテナを連携させるために、Docker Composeを利用します。​

  
# compose.yaml

services:
  open-webui:
    image: ghcr.io/open-webui/open-webui:<バージョン>
    restart: always
    volumes:
      - open-webui:/app/backend/data
    ports:
      - 8080:8080
    environment:
      - "TZ='Asia/Tokyo'"
      - 'WEBUI_SECRET_KEY='
      - 'ENABLE_OLLAMA_API=false'
      - 'OPENAI_API_BASE_URL=http://litellm:4000'
      - 'OPENAI_API_KEY=dummy'    # ここはダミーの値でOK

  litellm:
    image: ghcr.io/berriai/litellm:<バージョン>
    volumes:
      - ./litellm/config.yaml:/config.yaml
      - ./litellm/.env:/.env
    command: [ "--config", "/config.yaml" ]
    env_file:
      - .env

volumes:
  open-webui:
  

2.LiteLLMの設定

LiteLLMで呼び出すクラウドLLMは、config.yamlで指定します。

  
# litellm/config.yaml

model_list:
  - model_name: gpt-4o-mini
    litellm_params:
      model: azure/gpt-4o-mini  # azure/< model_name >の形式
      api_key: os.environ/AZURE_API_KEY
      api_base: os.environ/AZURE_API_BASE
      api_version: os.environ/AZURE_API_VERSION
  - model_name: gpt-4o
    litellm_params:
      model: azure/gpt-4o
      api_key: os.environ/AZURE_API_KEY
      api_base: os.environ/AZURE_API_BASE
      api_version: os.environ/AZURE_API_VERSION

# 中略

  - model_name: nova-pro
    litellm_params:
        model: bedrock/amazon.nova-pro-v1:0
        aws_access_key_id: os.environ/AWS_ACCESS_KEY_ID
        aws_secret_access_key: os.environ/AWS_SECRET_ACCESS_KEY
        aws_region_name: us-east-1


litellm_settings:
  num_retries: 1
  request_timeout: 60
  timeout: 60
  set_verbose: True
  

APIキーなどは今回envファイルで指定しました。

  
# litellm/.env

TZ='Asia/Tokyo'

AZURE_API_KEY=< Azure OpenAIのAPIキー >
AZURE_API_BASE=< Azure OpenAIのエンドポイント >
AZURE_API_VERSION=2024-02-15-preview

AWS_ACCESS_KEY_ID=< AWSのアクセスキー >
AWS_SECRET_ACCESS_KEY=< AWSのシークレットアクセスキー >

  

3.起動

  
docker-compose up -d
  

8080番ポートにブラウザーでアクセスすると、Open WebUIを使えます。

4.SSOで認証する(オプション)

Open WebUIはSSOログインにも対応しています。アカウント管理要件にもよりますが、ここではAmazon CognitoをIdPとしてOIDCで認証する方法をご紹介します。システム構成の参考情報としてお読みください。

(ア)Cognitoユーザープールの作成

CDKやコンソールから作成してください(詳しい方法は公式ドキュメントや他の技術記事が多くあるため割愛します)。ここで気を付けていただきたいのは以下の2点です。

  • アプリケーションクライアントシークレットは有効化する
  • アプリケーションクライアントのマネージドログインページ、OpenID Connectのスコープには"openid"、"email"、"profile"の3つが含まれていることを確認する
(イ)Open WebUI側の設定

公式ドキュメントを確認し、OIDCの設定を行います。今回は、先ほどのcompose.yamlでOpen WebUIのコンテナに設定を追加します。追加する設定の例は以下です。


environment:
      - 'ENABLE_OAUTH_SIGNUP=true'
      - 'ENABLE_SIGNUP=false'   # SSO以外でのログインをさせない
      - 'ENABLE_LOGIN_FORM=false'
      - 'OAUTH_CLIENT_ID=< CognitoのアプリケーションクライアントID >'
      - 'OAUTH_CLIENT_SECRET=< Cognitoのアプリケーションクライアントシークレット >'
      - 'OPENID_PROVIDER_URL=https://cognito-idp.ap-northeast-1.amazonaws.com/< CognitoのユーザープールID >/.well-known/openid-configuration'


なお、Cognitoのアプリクライアントに設定するリダイレクトURLはHTTPSである必要があるため、Open WebUIにはHTTPSでアクセスできるようNginxなどでリバースプロキシを構築しておいてください。

まとめ

今回は、複数のクラウドLLMを同一のUI上で試せる環境として、Open WebUIとLiteLLMを組み合わせた構成をご紹介しました。
この環境があれば、社内外からの生成AIに関する相談に対しても、モデルの検討や特性の把握をこれまでより少し手早く行えるようになります。​
Open WebUIは、もともとローカルLLM向けに開発されたツールですが、設定次第でクラウドLLMにも対応できる柔軟なインターフェースです。またLiteLLMは、複数のクラウドLLMをOpenAI API形式で扱えるプロキシであり、Open WebUIに限らず他のOpenAI互換アプリケーションからもそのまま利用できます。今回はそれらを組み合わせることで、少ない構成で実用的な比較環境を実現できました。​
今後も、検証や評価をよりスムーズに行えるよう、他のOSSツールの活用や構成の拡張も検討していく予定です。複数のLLMを日常的に扱っている方や、モデル選定に関心のある方の参考になれば幸いです。​

筆者紹介

松島 優太

R&D本部 言語処理技術部所属。自然言語処理を応用した研究開発に従事。生成AI/検索/テキストマイニングなどの技術を活用した業務改善やシステム開発に取り組む。