生成AI入門 2026.04.19

【2026年版】GoModelとLiteLLM比較|LLMプロキシ設定コードと使い分けガイド

タグ:LLM / プロキシ / AI比較 / 開発ツール / 2026年

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)

機能比較表

機能LiteLLMGoModel
対応モデル数100以上主流10〜20
セットアップpip + yamlDocker/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互換性と機能が豊富
高トラフィック・低レイテンシ重視GoModelGo製で処理が速い
モデル比較実験LiteLLM100以上のモデル対応
コスト追跡・予算管理LiteLLMLangfuse等との連携が充実
シンプルなDockerデプロイGoModel設定が少ない
Enterprise・SSO要件LiteLLM Enterprise監査ログ・SSO対応

あわせて読みたい

参考ソース