- Authors

- Name
- Youngju Kim
- @fjvbn20031
- はじめに:なぜLiteLLMなのか?
- 1. LiteLLMアーキテクチャ:SDK vs Proxy
- 2. SDK使用法(しようほう):多様(たよう)なLLM統合呼(よ)び出(だ)し
- 3. プロキシサーバー設定(せってい)
- 4. サポート提供者(ていきょうしゃ)とモデル
- 5. モデルルーティング戦略(せんりゃく)
- 6. ロードバランシングとフォールバック
- 7. 仮想(かそう)キーとチーム管理(かんり)
- 8. 予算(よさん)管理(かんり)とコスト追跡(ついせき)
- 9. レート制限(せいげん)
- 10. Guardrails:PIIマスキングとコンテンツフィルタリング
- 11. ロギングとモニタリング
- 12. キャッシング
- 13. プロダクション展開(てんかい)
- 14. LiteLLM vs 代替(だいたい)ソリューション比較(ひかく)
- クイズ
- 参考資料(さんこうしりょう)
はじめに:なぜ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│ │ Google │
│ GPT-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 Bedrock │ Claude, Titan, Llama via Bedrock │
│ Azure OpenAI │ gpt-4o (Azureホスティング) │
│ Mistral AI │ mistral-large, mistral-small │
│ Groq │ llama-3.1-70b, mixtral-8x7b │
│ Together AI │ llama-3.1, CodeLlama, Qwen │
│ Ollama (ローカル) │ 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
| 項目 | LiteLLM | OpenRouter |
|---|---|---|
| ホスティング | セルフホスティング | クラウドサービス |
| データプライバシー | 完全(かんぜん)制御(せいぎょ) | 第三者(だいさんしゃ)サーバー経由(けいゆ) |
| コスト | オープンソース無料(むりょう) | 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. プロダクションデプロイ時に必ず考慮すべき項目:
- データベース:PostgreSQL接続必須(仮想キー、コスト追跡、チーム管理データの保存)
- セキュリティ:Master Keyを強力なランダム値に設定、すべてのAPIキーをシークレットで管理、HTTPS/TLS適用
- 高可用性:レプリカ2つ以上、HPA設定、Liveness/Readiness Probe構成
- モニタリング:Prometheusメトリクス収集、Grafanaダッシュボード、Slack/PagerDutyアラート設定
- コスト制御:グローバル予算、チーム別/キー別予算、ソフト予算アラート、レート制限設定
参考資料(さんこうしりょう)
- LiteLLM公式ドキュメント - https://docs.litellm.ai/
- LiteLLM GitHub - https://github.com/BerriAI/litellm
- LiteLLM Proxy Serverクイックスタート - https://docs.litellm.ai/docs/proxy/quick_start
- LiteLLMサポート提供者一覧 - https://docs.litellm.ai/docs/providers
- LiteLLM仮想キーガイド - https://docs.litellm.ai/docs/proxy/virtual_keys
- LiteLLMルーティング戦略 - https://docs.litellm.ai/docs/routing
- LiteLLM予算管理 - https://docs.litellm.ai/docs/proxy/users
- LiteLLM Guardrails - https://docs.litellm.ai/docs/proxy/guardrails
- LiteLLM Kubernetesデプロイ - https://docs.litellm.ai/docs/proxy/deploy
- OpenRouter公式サイト - https://openrouter.ai/
- Portkey AI公式サイト - https://portkey.ai/
- Langfuse LLM Observability - https://langfuse.com/
- LiteLLM vs 代替ソリューション - https://docs.litellm.ai/docs/proxy/enterprise
- Prometheusモニタリング - https://prometheus.io/