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
# 初回は管理者アカウントを作成→モデルを選択してチャット開始
機能比較表
| 比較項目 | LiteLLM | Open WebUI | Portkey OSS |
|---|---|---|---|
| プロキシ/ルーティング | ✅ | ❌ | ✅ |
| チャットUI | ❌ | ✅ | ❌ |
| コスト追跡 | ✅ | △ | ✅ |
| フォールバック | ✅ | ❌ | ✅ |
| ローカルLLM対応 | ✅(Ollama) | ✅(ネイティブ) | ✅ |
| GitHub Stars | 17k+ | 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-sonnet、litellm_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=true・OAUTH_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 |