生成AI入門 2026.04.19
【2026年版】GoModelとLiteLLM比較|LLMプロキシ設定コードと使い分けガイド
LLMプロキシが解決する問題
複数のAIプロバイダーを直接使うと:
❌ プロキシなしの問題:
アプリコード → OpenAI API(APIキーA)
アプリコード → Anthropic API(APIキーB) ← 別のSDK
アプリコード → Gemini API(APIキーC) ← また別のSDK
✅ プロキシありの解決:
アプリコード → LiteLLM/GoModel(統一OpenAI互換API)
├─ OpenAI API
├─ Anthropic API(自動変換)
└─ Gemini API(自動変換)
LiteLLMのセットアップ
# インストール
pip install litellm[proxy]
# プロキシサーバー起動
litellm --model claude-sonnet-4-5 --port 4000
# または設定ファイルで複数モデルを定義
cat > litellm_config.yaml << 'EOF'
model_list:
- model_name: gpt-4o
litellm_params:
model: openai/gpt-4o
api_key: $OPENAI_API_KEY
- model_name: claude-sonnet
litellm_params:
model: anthropic/claude-sonnet-4-5
api_key: $ANTHROPIC_API_KEY
- model_name: gemini-pro
litellm_params:
model: gemini/gemini-1.5-pro
api_key: $GOOGLE_API_KEY
# フォールバック設定
router_settings:
routing_strategy: latency-based-routing
fallbacks:
- gpt-4o: [claude-sonnet] # gpt-4o失敗時にclaudeに切り替え
EOF
litellm --config litellm_config.yaml --port 4000
# litellm_usage.py - OpenAI SDKでLiteLLMプロキシに接続
from openai import OpenAI
# base_urlをLiteLLMプロキシに向けるだけでコード変更なし
client = OpenAI(
base_url="http://localhost:4000",
api_key="any-string" # LiteLLMが管理
)
# 普通のOpenAI APIと同じコードで複数モデルが使える
def call_model(model: str, prompt: str) -> str:
response = client.chat.completions.create(
model=model,
messages=[{"role": "user", "content": prompt}]
)
return response.choices[0].message.content
# モデルを切り替えるだけ
result_gpt = call_model("gpt-4o", "Hello!")
result_claude = call_model("claude-sonnet", "Hello!") # 同じコード
result_gemini = call_model("gemini-pro", "Hello!") # 同じコード
# litellm_python_sdk.py - Pythonから直接使う
import litellm
import os
litellm.success_callback = ["langfuse"] # モニタリング連携
def multi_model_completion(prompt: str, models: list[str]) -> list[str]:
"""複数モデルで同じプロンプトを試す"""
results = []
for model in models:
try:
response = litellm.completion(
model=model,
messages=[{"role": "user", "content": prompt}],
max_tokens=500,
)
results.append({
"model": model,
"response": response.choices[0].message.content,
"cost": litellm.completion_cost(response),
})
except Exception as e:
results.append({"model": model, "error": str(e)})
return results
results = multi_model_completion(
prompt="Pythonでバブルソートを実装して",
models=[
"anthropic/claude-haiku-4-5-20251001",
"openai/gpt-4o-mini",
"gemini/gemini-1.5-flash"
]
)
for r in results:
if "cost" in r:
print(f"{r['model']}: ${r['cost']:.6f}")
GoModelのセットアップ
# Dockerで起動(Goで書かれた軽量プロキシ)
docker run -d \
-p 8080:8080 \
-e ANTHROPIC_API_KEY=$ANTHROPIC_API_KEY \
-e OPENAI_API_KEY=$OPENAI_API_KEY \
gomodel/gomodel:latest
# または設定ファイル使用
cat > gomodel.yaml << 'EOF'
models:
- name: claude
provider: anthropic
model: claude-sonnet-4-5
priority: 1
- name: gpt4o
provider: openai
model: gpt-4o
priority: 2 # claudeが失敗した場合のフォールバック
server:
port: 8080
rate_limiting:
requests_per_minute: 100
cost_tracking:
enabled: true
budget_limit_usd: 100 # 月$100で自動停止
EOF
gomodel -config gomodel.yaml
# gomodel_usage.py
from openai import OpenAI
# GoModelもOpenAI互換API
client = OpenAI(
base_url="http://localhost:8080/v1",
api_key="dummy"
)
response = client.chat.completions.create(
model="claude", # gomodel.yamlで定義した名前
messages=[{"role": "user", "content": "Hello"}],
max_tokens=100
)
print(response.choices[0].message.content)
機能比較表
| 機能 | LiteLLM | GoModel |
|---|---|---|
| 対応モデル数 | 100以上 | 主流10〜20 |
| セットアップ | pip + yaml | Docker/Go |
| 処理速度 | 中程度 | 高速(Go製) |
| メモリ使用量 | 高め | 低い |
| フォールバック | ◎ | ○ |
| コスト追跡 | ◎ | ○ |
| モニタリング連携 | Langfuse・Helicone等 | 基本のみ |
| ドキュメント | 充実 | 発展途上 |
| Enterprise版 | あり | なし |
| 推奨規模 | 中〜大 | 小〜中 |
フォールバックとコスト管理(LiteLLM)
# cost_aware_routing.py
import litellm
# 予算オーバーで自動フォールバック
def cost_aware_request(prompt: str, max_cost: float = 0.01) -> dict:
"""コストを考慮してモデルを自動選択"""
# まずHaikuで試みる(安い)
response = litellm.completion(
model="anthropic/claude-haiku-4-5-20251001",
messages=[{"role": "user", "content": prompt}],
max_tokens=1000,
)
cost = litellm.completion_cost(response)
if cost > max_cost:
print(f"⚠️ コスト超過 ${cost:.4f}、Haikuを使用")
return {
"model": "haiku",
"response": response.choices[0].message.content,
"cost": cost,
}
# バジェットアラート設定
litellm.max_budget = 10.0 # $10を超えたら例外
litellm.budget_duration = "1d" # 1日のリセット周期
try:
result = cost_aware_request("長い文章を要約して..." * 100)
except litellm.BudgetExceededError:
print("日次予算を超えました")
どちらを選ぶべきか
| ユースケース | 推奨 | 理由 |
|---|---|---|
| 既存OpenAIアプリをClaude/Geminiに切り替え | LiteLLM | 互換性と機能が豊富 |
| 高トラフィック・低レイテンシ重視 | GoModel | Go製で処理が速い |
| モデル比較実験 | LiteLLM | 100以上のモデル対応 |
| コスト追跡・予算管理 | LiteLLM | Langfuse等との連携が充実 |
| シンプルなDockerデプロイ | GoModel | 設定が少ない |
| Enterprise・SSO要件 | LiteLLM Enterprise | 監査ログ・SSO対応 |
あわせて読みたい
- Claude APIコストを95%削減する仕様書ファースト開発【実装テンプレート付き】
- Claude Haiku vs Sonnet vs Opus【2026年版】料金・速度・精度を実例で比較
- LangChainとLlamaIndexどっちを選ぶ?用途別機能比較ガイド