AI

OSS LLMプロキシ比較:LiteLLM vs Open WebUI vs Portkey でOpenAI APIを統一管理する

オープンソースラボ編集部2026年6月14日

OSS LLMプロキシ比較:LiteLLM vs Open WebUI vs Portkey でOpenAI APIを統一管理する

複数のLLM(OpenAI・Anthropic Claude・Google Gemini・Mistral・Llama)を使い分けるとき、APIキーの管理・コスト追跡・レート制限・フォールバックを個別に実装するのは非常に手間がかかります。LiteLLM(100+ LLMを統一APIで管理)・Open WebUI(ChatGPT風UIをセルフホスト)・Portkey(AI Gateway OSS版)はLLMのインフラ管理を一元化します。

OSS LLMプロキシを使う理由

  • 統一API: OpenAIのフォーマットでAnthropicもGeminiも呼べる(コードの変更最小)
  • コスト可視化: モデルごと・ユーザーごとの使用量とコストをダッシュボードで追跡
  • フォールバック: GPT-4oが失敗したらClaude Sonnetに自動切り替え(高可用性)
  • レート制限: ユーザー・チームごとにトークン使用量を制限(予算超過防止)
  • ロギング: すべてのLLMリクエスト/レスポンスを記録してデバッグ・監査に使用

主要ツールの概要

LiteLLM

2023年公開、Python製のOSSです。GitHubスター17k+。100以上のLLMプロバイダーをOpenAI互換APIで統一するプロキシサーバーです。OpenAI SDK・LangChain・LlamaIndexは設定変更なしでLiteLLMプロキシを通して任意のモデルにルーティングできます。

# docker-compose.yml - LiteLLM Proxy Server
version: '3.8'
services:
  litellm:
    image: ghcr.io/berriai/litellm:main-latest
    restart: unless-stopped
    ports:
      - "4000:4000"
    environment:
      LITELLM_MASTER_KEY: "sk-your-master-key-here"  # 認証マスターキー
      DATABASE_URL: "postgresql://litellm:password@postgres:5432/litellm"
      LITELLM_LOG: "INFO"
      # LLMプロバイダーのAPIキー
      OPENAI_API_KEY: ${OPENAI_API_KEY}
      ANTHROPIC_API_KEY: ${ANTHROPIC_API_KEY}
      GOOGLE_API_KEY: ${GOOGLE_API_KEY}
    volumes:
      - ./litellm-config.yaml:/app/config.yaml
    command: ["--config", "/app/config.yaml", "--port", "4000"]
    depends_on:
      - postgres

  postgres:
    image: postgres:16-alpine
    environment:
      POSTGRES_USER: litellm
      POSTGRES_PASSWORD: password
      POSTGRES_DB: litellm
    volumes:
      - postgres_data:/var/lib/postgresql/data

volumes:
  postgres_data:
# litellm-config.yaml - モデルルーティング設定
model_list:
  # OpenAI GPT-4o
  - model_name: gpt-4o
    litellm_params:
      model: openai/gpt-4o
      api_key: os.environ/OPENAI_API_KEY
      rpm: 500       # Requests Per Minute
      tpm: 300000    # Tokens Per Minute

  # Claude Sonnet 4.6(最新)
  - model_name: claude-sonnet
    litellm_params:
      model: anthropic/claude-sonnet-4-6
      api_key: os.environ/ANTHROPIC_API_KEY
      rpm: 50
      tpm: 400000

  # Gemini Flash(コスト最安)
  - model_name: gemini-flash
    litellm_params:
      model: gemini/gemini-2.0-flash
      api_key: os.environ/GOOGLE_API_KEY

  # ローカルOllamaモデル(無料)
  - model_name: llama3.1-local
    litellm_params:
      model: ollama/llama3.1
      api_base: http://ollama:11434

# フォールバック設定: gpt-4o失敗→claude-sonnetに自動切り替え
router_settings:
  fallbacks:
    - gpt-4o:
      - claude-sonnet
    - claude-sonnet:
      - gemini-flash
  routing_strategy: least-busy   # 最も空いているモデルを選択
  num_retries: 3
  timeout: 60

# 予算・レート制限
litellm_settings:
  max_budget: 100     # 月$100以上はエラー
  budget_duration: monthly
# LiteLLMプロキシをOpenAI SDKから使う(コードの変更なし)
from openai import OpenAI

# base_urlをLiteLLMプロキシに向けるだけ
client = OpenAI(
    api_key='sk-your-master-key-here',   # LiteLLMのマスターキー
    base_url='http://localhost:4000',    # LiteLLMプロキシURL
)

# OpenAI SDKの通常の呼び出し→LiteLLMが任意のモデルにルーティング
response = client.chat.completions.create(
    model='claude-sonnet',    # litellm-config.yamlで定義した名前
    messages=[
        {'role': 'system', 'content': 'あなたはPythonの専門家です。'},
        {'role': 'user', 'content': 'FastAPIでJWT認証を実装する方法を教えてください。'},
    ],
    temperature=0.7,
    max_tokens=1000,
)
print(response.choices[0].message.content)
# LiteLLM Admin API でコスト・使用量を取得
import requests

LITELLM_URL = 'http://localhost:4000'
MASTER_KEY = 'sk-your-master-key-here'

headers = {'Authorization': f'Bearer {MASTER_KEY}'}

# 全スペンドの概要を取得
def get_spend_overview():
    resp = requests.get(f'{LITELLM_URL}/spend/logs', headers=headers)
    return resp.json()

# ユーザーごとのコストを取得
def get_user_spend(user_id: str = None):
    params = {}
    if user_id:
        params['user_id'] = user_id
    resp = requests.get(f'{LITELLM_URL}/spend/users', headers=headers, params=params)
    return resp.json()

# 新しいAPIキーを発行(チームメンバー用)
def create_api_key(team_id: str, budget_limit: float = 10.0) -> str:
    resp = requests.post(
        f'{LITELLM_URL}/key/generate',
        headers=headers,
        json={
            'team_id': team_id,
            'max_budget': budget_limit,          # $10の予算上限
            'budget_duration': 'monthly',
            'models': ['gpt-4o', 'claude-sonnet', 'gemini-flash'],
            'max_parallel_requests': 5,
        },
    )
    return resp.json()['key']

# 使用例: 開発チーム用の月$20上限キーを発行
dev_key = create_api_key(team_id='dev-team', budget_limit=20.0)
print(f'Dev team API key: {dev_key}')

Open WebUI(旧 Ollama WebUI)

2023年公開、Python/Svelte製のOSSです。GitHubスター82k+。ChatGPTのようなチャットUIをセルフホストでき、Ollama(ローカルLLM)だけでなくOpenAI互換APIのすべてのモデルに対応します。RAG(PDF/URL参照)・画像生成(DALL-E/Stable Diffusion)・音声入力を内蔵しています。

# docker-compose.yml - Open WebUI + Ollama
version: '3.8'
services:
  open-webui:
    image: ghcr.io/open-webui/open-webui:main
    restart: unless-stopped
    ports:
      - "3000:8080"
    environment:
      OLLAMA_BASE_URL: http://ollama:11434
      # OpenAI/Anthropic等のAPIも使用する場合
      OPENAI_API_KEY: ${OPENAI_API_KEY}
      # LiteLLMプロキシを経由する場合
      OPENAI_API_BASE_URL: http://litellm:4000
    volumes:
      - open_webui_data:/app/backend/data

  ollama:
    image: ollama/ollama:latest
    restart: unless-stopped
    volumes:
      - ollama_data:/root/.ollama
    # GPU使用(NVIDIA)
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: 1
              capabilities: [gpu]

volumes:
  open_webui_data:
  ollama_data:
# Ollamaでローカルモデルをダウンロード・実行
docker exec ollama ollama pull llama3.1:8b        # 8Bモデル(RAM 8GB+)
docker exec ollama ollama pull gemma2:9b           # Google Gemma 2
docker exec ollama ollama pull qwen2.5-coder:7b   # コード特化モデル

# Open WebUI にアクセス: http://localhost:3000
# 初回は管理者アカウントを作成→モデルを選択してチャット開始

機能比較表

比較項目LiteLLMOpen WebUIPortkey OSS
プロキシ/ルーティング
チャットUI
コスト追跡
フォールバック
ローカルLLM対応✅(Ollama)✅(ネイティブ)
GitHub Stars17k+82k+5k+

LLMプロキシはLLMツールカテゴリ/categories/llm-toolsのLangChain・LlamaIndexと組み合わせてRAGパイプラインのバックエンドとして活用します。DevOpsカテゴリ/categories/devopsのKubernetes・Helm Chartを使ってLiteLLMをスケーラブルにデプロイしてマイクロサービスのAI基盤を構築する構成も一般的です。

FAQ

Q. LiteLLMプロキシでClaude 3.7 SonnetをOpenAI SDKから呼ぶには?

A. litellm-config.yamlのmodel_listに追加します。model_name: claude-37-sonnetlitellm_params: model: anthropic/claude-sonnet-4-6。OpenAI SDKからはclient.chat.completions.create(model="claude-37-sonnet", ...)で呼び出せます。LiteLLMがAnthropicのAPIフォーマット(messagesの扱い・max_tokensの必須化等)を自動変換するため、コードの変更はmodel名のみです。Streaming(stream=True)もLiteLLMが変換するため、SSEストリーミングはOpenAI SDKのまま動作します。

Q. Open WebUIのRAG機能でPDFを読み込んでチャットするには?

A. ①Open WebUI → チャット画面の「+」→「Upload Document」からPDFをアップロード②「Set as Context」をクリックして選択したドキュメントをRAGコンテキストに設定③通常のチャットで質問するとPDFの内容を参照した回答が生成される。内部処理: PDFをテキスト抽出(PyMuPDF)→チャンク分割→OpenAI/Ollamaでembedding生成→ChromaDB(組み込み)に保存→質問時に関連チャンクを検索してプロンプトに注入。複数ドキュメントはコレクションとして保存でき、後から選択して使えます。

Q. LiteLLMのフォールバックはレイテンシーに影響しますか?

A. 一次呼び出しが成功する通常ケースはゼロ影響です。フォールバックが発生するのはタイムアウト・API障害・レート制限超過時のみです。設定例: timeout: 10(10秒でタイムアウト)→フォールバックモデルへ再試行→合計で15〜30秒かかる可能性。最適化: ①num_retries: 1(同モデルの再試行を最小化)②fallbacksでコスト安・低レイテンシーのモデルを優先(GPT-4o→Gemini Flash)③cooldown_time: 60で障害モデルを60秒間スキップ。ヘルスチェック: LiteLLMの/healthエンドポイントで各モデルの状態をリアルタイム確認できます。

Q. Open WebUIを社内チームで使う際のユーザー管理方法は?

A. Open WebUIはAdmin設定でロールベースアクセスを提供します。①Admin → Users → 招待リンクを生成or個別ユーザー追加②ロール: Admin(全設定変更可)・User(チャット・モデル選択)③モデルアクセス制御: Admin → Models → 特定モデルを特定ロールにのみ許可(例: GPT-4oはAdminのみ・Llama3.1は全員)④LDAP/OIDCシングルサインオン: 環境変数ENABLE_OAUTH_SIGNUP=trueOAUTH_CLIENT_ID等を設定(Google Workspace・Oktaと連携可能)⑤ユーザーごとのAPIキー: Open WebUI → Account → API Keys から個人APIキーを発行してOpenAI SDK互換APIとして使用。

まとめ

ユースケース推奨ツール
複数LLMのAPI統一・コスト管理・フォールバックLiteLLM
ChatGPT風UIをセルフホスト・社内チャットOpen WebUI
エンタープライズAI Gateway・監査ログPortkey OSS

関連外部リソース

他の記事も読む

Let's Build Together

OSS導入、自社だけで悩まない。

ツール選定から構築・運用・AI活用まで、オープンソースラボ運営元のClasslessが伴走します。初回のご相談は無料です。