Skip to content
Published on

LiteLLM完全ガイド2025:100以上のLLMを1つのAPIで統合するプロキシサーバー

Authors

はじめに:なぜLiteLLMなのか?

2025年(ねん)現在(げんざい)、AI市場(しじょう)はかつてないほど急速(きゅうそく)に変化(へんか)しています。OpenAIのGPT-4o、AnthropicのClaude Opus 4、GoogleのGemini 2.0、MetaのLlama 3.1、MistralのLargeなど、毎月(まいつき)新(あたら)しいモデルがリリースされ、各提供者(ていきょうしゃ)はそれぞれ異(こと)なるAPI形式(けいしき)、認証方式(にんしょうほうしき)、価格(かかく)ポリシーを持(も)っています。

この状況(じょうきょう)で企業(きぎょう)が直面(ちょくめん)する3つの核心的(かくしんてき)な問題(もんだい)があります。

1. ベンダーロックイン問題(もんだい)

1つのLLM提供者(ていきょうしゃ)のAPIにコードを合(あ)わせると、より良(よ)いモデルが登場(とうじょう)しても切(き)り替(か)えコストが大(おお)きくなります。

# 問題: 各提供者ごとに異なるAPI形式
# OpenAI
import openai
response = openai.ChatCompletion.create(model="gpt-4", messages=[...])

# Anthropic
import anthropic
response = anthropic.messages.create(model="claude-3-opus", messages=[...])

# Google
import google.generativeai as genai
response = genai.GenerativeModel("gemini-pro").generate_content(...)

2. コスト管理(かんり)の困難(こんなん)さ

複数(ふくすう)のモデルを使(つか)うと、各提供者別(ていきょうしゃべつ)のコストを追跡(ついせき)し、予算(よさん)を管理(かんり)するのが複雑(ふくざつ)になります。

3. 可用性(かようせい)と信頼性(しんらいせい)

単一(たんいつ)の提供者(ていきょうしゃ)に依存(いそん)すると、そのサービスに障害(しょうがい)が発生(はっせい)した際(さい)にシステム全体(ぜんたい)が停止(ていし)します。

LiteLLMはこの3つの問題(もんだい)を1つのソリューションで解決(かいけつ)します。

┌──────────────────────────────────────────────────┐
Your Application              (OpenAI SDK Format)└─────────────────────┬────────────────────────────┘
┌──────────────────────────────────────────────────┐
LiteLLM Proxy Server│  ┌──────────┐ ┌──────────┐ ┌──────────────────┐ │
│  │  Cost    │ │  Load    │ │  Virtual Keys    │ │
│  │  Tracking│Balance │ │  + Budget Mgmt   │ │
│  └──────────┘ └──────────┘ └──────────────────┘ │
└───┬──────────────┬──────────────┬────────────────┘
    │              │              │
    ▼              ▼              ▼
┌────────┐  ┌──────────┐  ┌───────────┐
OpenAI │  │ Anthropic│GoogleGPT-4o │  │ Claude   │  │  Gemini└────────┘  └──────────┘  └───────────┘

1. LiteLLMアーキテクチャ:SDK vs Proxy

LiteLLMは2つのモードで使用(しよう)できます。

1.1 SDKモード(Pythonパッケージ)

アプリケーションに直接(ちょくせつ)インポートして使用(しよう)します。シンプルなプロジェクトに適(てき)しています。

# pip install litellm
from litellm import completion

# OpenAI呼び出し
response = completion(
    model="gpt-4o",
    messages=[{"role": "user", "content": "Hello!"}]
)

# Anthropic呼び出し(同じ形式!)
response = completion(
    model="anthropic/claude-sonnet-4-20250514",
    messages=[{"role": "user", "content": "Hello!"}]
)

# Google Gemini呼び出し(同じ形式!)
response = completion(
    model="gemini/gemini-2.0-flash",
    messages=[{"role": "user", "content": "Hello!"}]
)

1.2 Proxyモード(サーバー)

独立(どくりつ)サーバーとして実行(じっこう)し、すべてのアプリケーションが1つのエンドポイントを使用(しよう)します。チーム/組織(そしき)に適(てき)しています。

# プロキシサーバー起動
litellm --config config.yaml --port 4000
# どの言語でもOpenAI SDK形式で呼び出し
import openai

client = openai.OpenAI(
    api_key="sk-litellm-your-virtual-key",
    base_url="http://localhost:4000"
)

response = client.chat.completions.create(
    model="gpt-4o",
    messages=[{"role": "user", "content": "Hello!"}]
)

1.3 SDK vs Proxy比較(ひかく)

項目(こうもく)SDKモードProxyモード
使用方式(しようほうしき)PythonパッケージインポートHTTPサーバー(REST API)
言語(げんご)サポートPythonのみ全言語(OpenAI SDK互換(ごかん))
チーム管理(かんり)不可(ふか)仮想(かそう)キーでチーム別管理
予算(よさん)管理基本的(きほんてき)高度(こうど)(チーム別/キー別)
ロードバランシングコードで直接設定(せってい)ファイルで自動(じどう)
適(てき)した場合(ばあい)個人(こじん)プロジェクトチーム/組織、プロダクション

2. SDK使用法(しようほう):多様(たよう)なLLM統合呼(よ)び出(だ)し

2.1 Chat Completion

LiteLLM SDKの核心機能(かくしんきのう)です。100以上(いじょう)のモデルを同一(どういつ)のインターフェースで呼(よ)び出(だ)します。

from litellm import completion
import os

# 環境変数でAPIキー設定
os.environ["OPENAI_API_KEY"] = "sk-..."
os.environ["ANTHROPIC_API_KEY"] = "sk-ant-..."
os.environ["GEMINI_API_KEY"] = "AI..."

# 同じ関数、異なるモデル
models = [
    "gpt-4o",
    "anthropic/claude-sonnet-4-20250514",
    "gemini/gemini-2.0-flash",
    "groq/llama-3.1-70b-versatile",
    "mistral/mistral-large-latest",
]

for model in models:
    response = completion(
        model=model,
        messages=[
            {"role": "system", "content": "You are a helpful assistant."},
            {"role": "user", "content": "Explain quantum computing in 2 sentences."}
        ],
        temperature=0.7,
        max_tokens=200,
    )
    print(f"[{model}]: {response.choices[0].message.content}")

2.2 ストリーミング応答(おうとう)

from litellm import completion

response = completion(
    model="anthropic/claude-sonnet-4-20250514",
    messages=[{"role": "user", "content": "Write a short poem about coding."}],
    stream=True,
)

for chunk in response:
    if chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="", flush=True)

2.3 Embedding呼(よ)び出(だ)し

from litellm import embedding

# OpenAI Embedding
response = embedding(
    model="text-embedding-3-small",
    input=["Hello world", "How are you?"]
)

# Cohere Embedding(同じ形式!)
response = embedding(
    model="cohere/embed-english-v3.0",
    input=["Hello world", "How are you?"]
)

print(f"Embedding dimension: {len(response.data[0]['embedding'])}")

2.4 画像生成(がぞうせいせい)

from litellm import image_generation

response = image_generation(
    model="dall-e-3",
    prompt="A futuristic city powered by AI, digital art style",
    n=1,
    size="1024x1024",
)

print(f"Image URL: {response.data[0]['url']}")

2.5 非同期呼(よ)び出(だ)し

import asyncio
from litellm import acompletion

async def generate_responses():
    tasks = [
        acompletion(
            model="gpt-4o-mini",
            messages=[{"role": "user", "content": f"Tell me fact #{i} about space."}]
        )
        for i in range(5)
    ]
    responses = await asyncio.gather(*tasks)
    for i, resp in enumerate(responses):
        print(f"Fact #{i}: {resp.choices[0].message.content[:100]}")

asyncio.run(generate_responses())

3. プロキシサーバー設定(せってい)

3.1 基本設定(きほんせってい)ファイル(config.yaml)

model_list:
  - model_name: gpt-4o
    litellm_params:
      model: openai/gpt-4o
      api_key: os.environ/OPENAI_API_KEY

  - model_name: claude-sonnet
    litellm_params:
      model: anthropic/claude-sonnet-4-20250514
      api_key: os.environ/ANTHROPIC_API_KEY

  - model_name: gemini-flash
    litellm_params:
      model: gemini/gemini-2.0-flash
      api_key: os.environ/GEMINI_API_KEY

  - model_name: llama-local
    litellm_params:
      model: ollama/llama3.1:70b
      api_base: http://localhost:11434

litellm_settings:
  drop_params: true
  set_verbose: false
  num_retries: 3
  request_timeout: 120

general_settings:
  master_key: sk-master-key-1234
  database_url: os.environ/DATABASE_URL

3.2 Dockerで開始(かいし)する

# Docker Composeファイル
cat > docker-compose.yaml << 'EOF'
version: "3.9"
services:
  litellm:
    image: ghcr.io/berriai/litellm:main-latest
    ports:
      - "4000:4000"
    volumes:
      - ./config.yaml:/app/config.yaml
    command: ["--config", "/app/config.yaml", "--port", "4000"]
    environment:
      - OPENAI_API_KEY
      - ANTHROPIC_API_KEY
      - GEMINI_API_KEY
      - DATABASE_URL=postgresql://user:pass@db:5432/litellm
    depends_on:
      - db

  db:
    image: postgres:16
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: pass
      POSTGRES_DB: litellm
    volumes:
      - pgdata:/var/lib/postgresql/data

volumes:
  pgdata:
EOF

# 起動
docker compose up -d

3.3 プロキシサーバーテスト

# ヘルスチェック
curl http://localhost:4000/health

# Chat Completion呼び出し
curl -X POST http://localhost:4000/v1/chat/completions \
  -H "Authorization: Bearer sk-master-key-1234" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-4o",
    "messages": [{"role": "user", "content": "Hello!"}]
  }'

# モデル一覧照会
curl http://localhost:4000/v1/models \
  -H "Authorization: Bearer sk-master-key-1234"

4. サポート提供者(ていきょうしゃ)とモデル

LiteLLMは100以上(いじょう)のLLM提供者(ていきょうしゃ)をサポートしています。主要(しゅよう)な提供者(ていきょうしゃ)をまとめます。

4.1 主要提供者一覧(いちらん)

┌────────────────────┬──────────────────────────────────────┐
│ 提供者              │ サポートモデル(例)                   │
├────────────────────┼──────────────────────────────────────┤
OpenAI             │ gpt-4o, gpt-4o-mini, o1, o3-mini    │
Anthropic          │ claude-opus-4, claude-sonnet, haiku  │
Google (Gemini)    │ gemini-2.0-flash, gemini-1.5-pro    │
AWS BedrockClaude, Titan, Llama via BedrockAzure OpenAI       │ gpt-4o (Azureホスティング)Mistral AI         │ mistral-large, mistral-small         │
Groq               │ llama-3.1-70b, mixtral-8x7b         │
Together AI        │ llama-3.1, CodeLlama, QwenOllama (ローカル)  │ llama3.1, codellama, mistral等      │
vLLM (自己ホスト)  │ すべてのHuggingFaceモデル           │
Cohere             │ command-r-plus, embedモデル          │
Deepseek           │ deepseek-chat, deepseek-coder        │
Fireworks AI       │ llama, mixtral等                    │
Perplexity         │ pplx-70b-online等                   │
└────────────────────┴──────────────────────────────────────┘

4.2 AWS Bedrock設定

model_list:
  - model_name: bedrock-claude
    litellm_params:
      model: bedrock/anthropic.claude-3-sonnet-20240229-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

  - model_name: bedrock-llama
    litellm_params:
      model: bedrock/meta.llama3-1-70b-instruct-v1:0
      aws_region_name: us-west-2

4.3 Azure OpenAI設定

model_list:
  - model_name: azure-gpt4
    litellm_params:
      model: azure/gpt-4o-deployment-name
      api_base: https://your-resource.openai.azure.com/
      api_key: os.environ/AZURE_API_KEY
      api_version: "2024-06-01"

4.4 Ollama(ローカルLLM)設定

model_list:
  - model_name: local-llama
    litellm_params:
      model: ollama/llama3.1:70b
      api_base: http://localhost:11434
      stream: true

  - model_name: local-codellama
    litellm_params:
      model: ollama/codellama:34b
      api_base: http://localhost:11434

5. モデルルーティング戦略(せんりゃく)

5.1 コストベースルーティング(最低(さいてい)コスト)

最(もっと)も安価(あんか)なモデルを自動選択(じどうせんたく)します。

router_settings:
  routing_strategy: cost-based-routing

model_list:
  - model_name: general-chat
    litellm_params:
      model: gpt-4o-mini
      # Input: $0.15/1M tokens, Output: $0.60/1M tokens

  - model_name: general-chat
    litellm_params:
      model: anthropic/claude-3-haiku-20240307
      # Input: $0.25/1M tokens, Output: $1.25/1M tokens

  - model_name: general-chat
    litellm_params:
      model: gemini/gemini-2.0-flash
      # Input: $0.075/1M tokens, Output: $0.30/1M tokens

上記(じょうき)の設定(せってい)でgeneral-chatを呼(よ)び出(だ)すと、Gemini Flashが最(もっと)も安価(あんか)なため自動選択(じどうせんたく)されます。

5.2 レイテンシベースルーティング(最低(さいてい)レイテンシ)

最(もっと)も速(はや)い応答時間(おうとうじかん)のモデルを選択(せんたく)します。

router_settings:
  routing_strategy: latency-based-routing
  routing_strategy_args:
    ttl: 60  # 60秒ごとにレイテンシを再測定

5.3 使用量(しようりょう)ベースルーティング

RPM(分当(ぷんあた)たりリクエスト数(すう))基準(きじゅん)で余裕(よゆう)のあるモデルにルーティングします。

router_settings:
  routing_strategy: usage-based-routing

model_list:
  - model_name: fast-model
    litellm_params:
      model: gpt-4o-mini
      rpm: 500  # 分当たり最大500リクエスト

  - model_name: fast-model
    litellm_params:
      model: gemini/gemini-2.0-flash
      rpm: 1000  # 分当たり最大1000リクエスト

6. ロードバランシングとフォールバック

6.1 ロードバランシング設定(せってい)

同(おな)じmodel_nameに複数(ふくすう)のデプロイメントを登録(とうろく)すると、自動的(じどうてき)にロードバランシングされます。

model_list:
  # 同じモデルの複数APIキーで分散
  - model_name: gpt-4o
    litellm_params:
      model: openai/gpt-4o
      api_key: sk-key-1
      rpm: 100

  - model_name: gpt-4o
    litellm_params:
      model: openai/gpt-4o
      api_key: sk-key-2
      rpm: 100

  # 異なる提供者間で分散
  - model_name: fast-model
    litellm_params:
      model: openai/gpt-4o-mini
      rpm: 500

  - model_name: fast-model
    litellm_params:
      model: anthropic/claude-3-haiku-20240307
      rpm: 300

router_settings:
  routing_strategy: simple-shuffle  # ラウンドロビン方式
  allowed_fails: 3  # 3回失敗でデプロイメント無効化
  cooldown_time: 60  # 60秒後に再有効化

6.2 フォールバックチェーン設定

主(しゅ)モデルが失敗(しっぱい)した場合(ばあい)、代替(だいたい)モデルに自動切(き)り替(か)えします。

litellm_settings:
  fallbacks:
    - model_name: gpt-4o
      fallback_models:
        - anthropic/claude-sonnet-4-20250514
        - gemini/gemini-1.5-pro

    - model_name: claude-sonnet
      fallback_models:
        - gpt-4o
        - gemini/gemini-1.5-pro

  # コンテンツポリシー違反時に他のモデルへ
  content_policy_fallbacks:
    - model_name: gpt-4o
      fallback_models:
        - anthropic/claude-sonnet-4-20250514

  # コンテキストウィンドウ超過時により大きいモデルへ
  context_window_fallbacks:
    - model_name: gpt-4o-mini
      fallback_models:
        - gpt-4o
        - anthropic/claude-sonnet-4-20250514

6.3 フォールバック動作(どうさ)フロー

ユーザーリクエスト: "gpt-4o"でChat Completion
    |
    v
[1] gpt-4o呼び出し試行
    |
    +-- 成功 --> 応答返却
    |
    +-- 失敗 (429 Rate Limit / 500 Error)
        |
        v
[2] claude-sonnet-4呼び出し試行(1次フォールバック)
    |
    +-- 成功 --> 応答返却
    |
    +-- 失敗
        |
        v
[3] gemini-1.5-pro呼び出し試行(2次フォールバック)
    |
    +-- 成功 --> 応答返却
    |
    +-- 失敗 --> エラー返却

7. 仮想(かそう)キーとチーム管理(かんり)

7.1 仮想キー生成(せいせい)

# マスターキーで新しい仮想キーを生成
curl -X POST http://localhost:4000/key/generate \
  -H "Authorization: Bearer sk-master-key-1234" \
  -H "Content-Type: application/json" \
  -d '{
    "key_alias": "frontend-team-key",
    "duration": "30d",
    "max_budget": 100.0,
    "models": ["gpt-4o", "claude-sonnet"],
    "max_parallel_requests": 10,
    "tpm_limit": 100000,
    "rpm_limit": 100,
    "metadata": {
      "team": "frontend",
      "environment": "production"
    }
  }'

7.2 チーム作成(さくせい)と管理(かんり)

# チーム作成
curl -X POST http://localhost:4000/team/new \
  -H "Authorization: Bearer sk-master-key-1234" \
  -H "Content-Type: application/json" \
  -d '{
    "team_alias": "ml-engineering",
    "max_budget": 500.0,
    "models": ["gpt-4o", "claude-sonnet", "gemini-flash"],
    "members_with_roles": [
      {"role": "admin", "user_id": "user-alice@company.com"},
      {"role": "user", "user_id": "user-bob@company.com"}
    ]
  }'

# チームにキーを割り当て
curl -X POST http://localhost:4000/key/generate \
  -H "Authorization: Bearer sk-master-key-1234" \
  -H "Content-Type: application/json" \
  -d '{
    "team_id": "team-ml-engineering-id",
    "key_alias": "ml-team-prod-key",
    "max_budget": 200.0
  }'

8. 予算(よさん)管理(かんり)とコスト追跡(ついせき)

8.1 グローバル予算設定(せってい)

general_settings:
  max_budget: 10000.0  # 月間総予算 $10,000
  budget_duration: 1m   # 月次リセット

8.2 キー別/チーム別予算

# キー予算更新
curl -X POST http://localhost:4000/key/update \
  -H "Authorization: Bearer sk-master-key-1234" \
  -H "Content-Type: application/json" \
  -d '{
    "key": "sk-virtual-key-xxx",
    "max_budget": 50.0,
    "budget_duration": "1m",
    "soft_budget": 40.0
  }'

soft_budgetに到達(とうたつ)するとアラートが送信(そうしん)され、max_budgetに到達(とうたつ)するとリクエストがブロックされます。

8.3 コスト追跡(ついせき)API

# 総支出照会
curl http://localhost:4000/spend/logs \
  -H "Authorization: Bearer sk-master-key-1234" \
  -G \
  -d "start_date=2025-01-01" \
  -d "end_date=2025-01-31"

# モデル別コスト照会
curl http://localhost:4000/spend/tags \
  -H "Authorization: Bearer sk-master-key-1234" \
  -G \
  -d "group_by=model"

# チーム別コスト照会
curl http://localhost:4000/spend/tags \
  -H "Authorization: Bearer sk-master-key-1234" \
  -G \
  -d "group_by=team"

8.4 予算(よさん)アラートWebhook

general_settings:
  alerting:
    - slack
  alerting_threshold: 300
  alert_types:
    - budget_alerts
    - spend_reports
    - failed_tracking

environment_variables:
  SLACK_WEBHOOK_URL: os.environ/SLACK_WEBHOOK_URL

9. レート制限(せいげん)

9.1 キーレベルレート制限

curl -X POST http://localhost:4000/key/generate \
  -H "Authorization: Bearer sk-master-key-1234" \
  -H "Content-Type: application/json" \
  -d '{
    "key_alias": "rate-limited-key",
    "rpm_limit": 60,
    "tpm_limit": 100000,
    "max_parallel_requests": 5
  }'

9.2 モデルレベルレート制限

model_list:
  - model_name: gpt-4o
    litellm_params:
      model: openai/gpt-4o
      api_key: os.environ/OPENAI_API_KEY
      rpm: 200    # このデプロイメントの分当たり最大リクエスト
      tpm: 400000 # このデプロイメントの分当たり最大トークン

10. Guardrails:PIIマスキングとコンテンツフィルタリング

10.1 PII(個人情報(こじんじょうほう))マスキング

litellm_settings:
  guardrails:
    - guardrail_name: pii-masking
      litellm_params:
        guardrail: presidio
        mode: during_call
        output_parse_pii: true
# PIIを含むリクエスト
response = client.chat.completions.create(
    model="gpt-4o",
    messages=[{
        "role": "user",
        "content": "My email is john@example.com and phone is 555-123-4567"
    }],
    extra_body={
        "metadata": {
            "guardrails": ["pii-masking"]
        }
    }
)
# LLMには "My email is [EMAIL] and phone is [PHONE]" として送信される

10.2 コンテンツフィルタリング

litellm_settings:
  guardrails:
    - guardrail_name: content-filter
      litellm_params:
        guardrail: lakera
        mode: pre_call
        api_key: os.environ/LAKERA_API_KEY

10.3 カスタムGuardrail

# custom_guardrail.py
from litellm.proxy.guardrails.guardrail_hooks import GuardrailHook

class CustomContentFilter(GuardrailHook):
    def __init__(self):
        self.blocked_words = ["harmful", "dangerous", "illegal"]

    async def pre_call_hook(self, data, call_type):
        user_message = data.get("messages", [])[-1].get("content", "")
        for word in self.blocked_words:
            if word.lower() in user_message.lower():
                raise ValueError(f"Blocked content detected: {word}")
        return data

11. ロギングとモニタリング

11.1 Langfuse連携(れんけい)

litellm_settings:
  success_callback: ["langfuse"]
  failure_callback: ["langfuse"]

environment_variables:
  LANGFUSE_PUBLIC_KEY: os.environ/LANGFUSE_PUBLIC_KEY
  LANGFUSE_SECRET_KEY: os.environ/LANGFUSE_SECRET_KEY
  LANGFUSE_HOST: https://cloud.langfuse.com

11.2 Prometheusメトリクス

litellm_settings:
  success_callback: ["prometheus"]
  failure_callback: ["prometheus"]

主要(しゅよう)メトリクス:

# リクエスト数
litellm_requests_total
litellm_requests_failed_total

# レイテンシ
litellm_request_duration_seconds_bucket
litellm_request_duration_seconds_sum

# コスト
litellm_spend_total

# トークン
litellm_tokens_total
litellm_input_tokens_total
litellm_output_tokens_total

12. キャッシング

12.1 Redisキャッシング

litellm_settings:
  cache: true
  cache_params:
    type: redis
    host: redis-host
    port: 6379
    password: os.environ/REDIS_PASSWORD
    ttl: 3600  # 1時間キャッシュ

    supported_call_types:
      - acompletion
      - completion

12.2 インメモリキャッシング

litellm_settings:
  cache: true
  cache_params:
    type: local
    ttl: 600  # 10分キャッシュ

13. プロダクション展開(てんかい)

13.1 Kubernetesデプロイメント

# litellm-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: litellm-proxy
  labels:
    app: litellm
spec:
  replicas: 3
  selector:
    matchLabels:
      app: litellm
  template:
    metadata:
      labels:
        app: litellm
    spec:
      containers:
        - name: litellm
          image: ghcr.io/berriai/litellm:main-latest
          ports:
            - containerPort: 4000
          args: ["--config", "/app/config.yaml", "--port", "4000"]
          volumeMounts:
            - name: config
              mountPath: /app/config.yaml
              subPath: config.yaml
          env:
            - name: OPENAI_API_KEY
              valueFrom:
                secretKeyRef:
                  name: litellm-secrets
                  key: openai-api-key
            - name: ANTHROPIC_API_KEY
              valueFrom:
                secretKeyRef:
                  name: litellm-secrets
                  key: anthropic-api-key
            - name: DATABASE_URL
              valueFrom:
                secretKeyRef:
                  name: litellm-secrets
                  key: database-url
          resources:
            requests:
              cpu: "500m"
              memory: "512Mi"
            limits:
              cpu: "2000m"
              memory: "2Gi"
          livenessProbe:
            httpGet:
              path: /health/liveliness
              port: 4000
            initialDelaySeconds: 30
            periodSeconds: 10
          readinessProbe:
            httpGet:
              path: /health/readiness
              port: 4000
            initialDelaySeconds: 10
            periodSeconds: 5
      volumes:
        - name: config
          configMap:
            name: litellm-config
---
apiVersion: v1
kind: Service
metadata:
  name: litellm-service
spec:
  selector:
    app: litellm
  ports:
    - port: 80
      targetPort: 4000
  type: ClusterIP
---
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: litellm-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: litellm-proxy
  minReplicas: 2
  maxReplicas: 10
  metrics:
    - type: Resource
      resource:
        name: cpu
        target:
          type: Utilization
          averageUtilization: 70

13.2 プロダクションチェックリスト

Production Deployment Checklist
================================
[ ] PostgreSQL DB設定および接続確認
[ ] Master Keyを強力なランダム値に設定
[ ] すべてのAPIキーを環境変数/シークレットで管理
[ ] HTTPS/TLS設定
[ ] レプリカ2つ以上設定
[ ] HPA設定
[ ] Liveness/Readiness Probe設定
[ ] Prometheus + Grafanaモニタリング設定
[ ] Slack/PagerDutyアラート設定
[ ] Redisキャッシュ設定(オプション)
[ ] 予算およびレート制限設定
[ ] Guardrails設定(必要に応じて)
[ ] ロギング(Langfuse/LangSmith)設定
[ ] バックアップおよびリカバリ戦略策定
[ ] ロードテスト完了

14. LiteLLM vs 代替(だいたい)ソリューション比較(ひかく)

14.1 LiteLLM vs OpenRouter

項目LiteLLMOpenRouter
ホスティングセルフホスティングクラウドサービス
データプライバシー完全(かんぜん)制御(せいぎょ)第三者(だいさんしゃ)サーバー経由(けいゆ)
コストオープンソース無料(むりょう)APIマージン追加(ついか)
チーム管理仮想キー/チーム/予算限定的(げんていてき)
カスタマイズ完全(かんぜん)カスタマイズ限定的
セットアップ難易度(なんいど)中程度(ちゅうていど)(Docker/K8s必要)簡単(かんたん)(APIキーのみ)
ローカルモデルサポート(Ollama/vLLM)非(ひ)サポート

14.2 選択(せんたく)ガイド

状況別推奨ソリューション
================================

「素早く始めたい」
  -> OpenRouter(サインアップ後すぐ使用可能)

「データセキュリティが重要」
  -> LiteLLM(セルフホスティング、完全制御)

「チーム/組織管理が必要」
  -> LiteLLMまたはPortkey

「ローカルモデルも使用する」
  -> LiteLLM(Ollama/vLLMネイティブサポート)

「エンタープライズ機能が必要」
  -> LiteLLM EnterpriseまたはPortkey Enterprise

クイズ

学習(がくしゅう)した内容(ないよう)を確認(かくにん)しましょう。

Q1. LiteLLMの2つの使用モードは何で、それぞれどのような状況に適していますか?

A1. SDKモードとProxyモードがあります。

  • SDKモード:Pythonパッケージを直接インポートして使用。個人プロジェクトやプロトタイプに適しています。
  • Proxyモード:独立HTTPサーバーとして実行。チーム/組織環境、マルチ言語クライアント、仮想キー管理、予算管理が必要なプロダクションに適しています。

核心的な違いは、Proxyモードが仮想キー、チーム管理、予算管理、ロギングなどのエンタープライズ機能を提供することです。

Q2. モデルフォールバック(Fallback)とは何で、LiteLLMはどのような種類のフォールバックをサポートしていますか?

A2. モデルフォールバックは、主モデルが失敗した際に自動的に代替モデルに切り替えるメカニズムです。

LiteLLMは3種類のフォールバックをサポートしています。

  • 一般フォールバック(fallbacks):モデル呼び出し失敗時(429、500エラーなど)に代替モデルに切り替え
  • コンテンツポリシーフォールバック(content_policy_fallbacks):コンテンツポリシー違反時に他のモデルに切り替え
  • コンテキストウィンドウフォールバック(context_window_fallbacks):入力がモデルのコンテキストウィンドウを超過した際により大きいモデルに切り替え
Q3. LiteLLMのコストベースルーティングはどのように動作しますか?

A3. 同じmodel_nameに複数の提供者のモデルを登録し、routing_strategyをcost-based-routingに設定すると、LiteLLMが各モデルのinput/outputトークン価格を比較して、最も安価なモデルに自動的にルーティングします。

例えば、GPT-4o-mini、Claude Haiku、Gemini Flashを同じ名前で登録すると、トークン単価が最も低いモデルが自動選択されます。

Q4. 仮想キー(Virtual Keys)の役割と主要機能を説明してください。

A4. 仮想キーはLiteLLMプロキシが生成するAPIキーです。実際のLLM提供者のAPIキーを公開せずに多様な制御機能を提供します。

主要機能:

  • 予算制限:キー別の最大予算設定(max_budget)
  • モデルアクセス制御:特定モデルのみ使用可能に制限
  • レート制限:RPM、TPM、同時リクエスト数の制限
  • チーム連結:キーをチームに割り当ててチーム単位で管理
  • 期間設定:キーの有効期間を指定
  • 使用量追跡:キー別のコスト、トークン、リクエスト数を追跡
Q5. LiteLLMをプロダクションにデプロイする際に必ず考慮すべき項目5つは?

A5. プロダクションデプロイ時に必ず考慮すべき項目:

  1. データベース:PostgreSQL接続必須(仮想キー、コスト追跡、チーム管理データの保存)
  2. セキュリティ:Master Keyを強力なランダム値に設定、すべてのAPIキーをシークレットで管理、HTTPS/TLS適用
  3. 高可用性:レプリカ2つ以上、HPA設定、Liveness/Readiness Probe構成
  4. モニタリング:Prometheusメトリクス収集、Grafanaダッシュボード、Slack/PagerDutyアラート設定
  5. コスト制御:グローバル予算、チーム別/キー別予算、ソフト予算アラート、レート制限設定

参考資料(さんこうしりょう)

  1. LiteLLM公式ドキュメント - https://docs.litellm.ai/
  2. LiteLLM GitHub - https://github.com/BerriAI/litellm
  3. LiteLLM Proxy Serverクイックスタート - https://docs.litellm.ai/docs/proxy/quick_start
  4. LiteLLMサポート提供者一覧 - https://docs.litellm.ai/docs/providers
  5. LiteLLM仮想キーガイド - https://docs.litellm.ai/docs/proxy/virtual_keys
  6. LiteLLMルーティング戦略 - https://docs.litellm.ai/docs/routing
  7. LiteLLM予算管理 - https://docs.litellm.ai/docs/proxy/users
  8. LiteLLM Guardrails - https://docs.litellm.ai/docs/proxy/guardrails
  9. LiteLLM Kubernetesデプロイ - https://docs.litellm.ai/docs/proxy/deploy
  10. OpenRouter公式サイト - https://openrouter.ai/
  11. Portkey AI公式サイト - https://portkey.ai/
  12. Langfuse LLM Observability - https://langfuse.com/
  13. LiteLLM vs 代替ソリューション - https://docs.litellm.ai/docs/proxy/enterprise
  14. Prometheusモニタリング - https://prometheus.io/