ストーリー
田
田中VPoE
サービングインフラの基本がわかったところで、AI API Gatewayの詳細設計に入ろう。ルーティング、フォールバック、キャッシュの具体的な実装方法を見ていく
あなた
LiteLLMを導入する方針ですが、実際にどう設定すればいいですか?
あ
田
田中VPoE
LiteLLMはOpenAI互換のAPIインターフェースを提供するプロキシだ。設定ファイル1つで複数プロバイダへのルーティングやフォールバックを実現できる。具体的なコードを見ながら理解しよう
AI API Gatewayの詳細設計
ルーティング設計
ユースケースの特性に応じて最適なモデルにルーティングします。
| ルーティング基準 | 説明 | 例 |
|---|
| ユースケース別 | サービスの要件に応じたモデル選択 | CS-AI→GPT-4o、FAQ Bot→Claude |
| 複雑度別 | リクエストの複雑さで振り分け | 簡単な質問→mini、複雑な分析→フルモデル |
| コスト別 | 予算制約に応じたモデル選択 | 月末予算残少→低コストモデル |
| レイテンシ別 | 応答速度要件で振り分け | リアルタイム→高速モデル |
# LiteLLM ルーティング設定
model_list:
# CS-AI用: 高品質モデル
- model_name: cs-ai-primary
litellm_params:
model: openai/gpt-4o
api_key: os.environ/OPENAI_API_KEY
max_tokens: 4096
temperature: 0.3
# CS-AI用: フォールバック
- model_name: cs-ai-fallback
litellm_params:
model: anthropic/claude-3-5-sonnet-20241022
api_key: os.environ/ANTHROPIC_API_KEY
# FAQ Bot用
- model_name: faq-bot-primary
litellm_params:
model: anthropic/claude-3-5-sonnet-20241022
api_key: os.environ/ANTHROPIC_API_KEY
# 簡易応答用(低コスト)
- model_name: lightweight
litellm_params:
model: openai/gpt-4o-mini
api_key: os.environ/OPENAI_API_KEY
router_settings:
routing_strategy: "least-busy"
num_retries: 2
timeout: 60
retry_after: 5
フォールバック設計
フォールバックチェーン
フォールバックチェーン設計:
リクエスト到着
│
▼
Primary Model (GPT-4o)
│ 成功 → レスポンス返却
│ 失敗(タイムアウト/エラー/レート制限)
▼
Secondary Model (Claude 3.5 Sonnet)
│ 成功 → レスポンス返却(フォールバック使用をログ記録)
│ 失敗
▼
Tertiary Model (GPT-4o-mini)
│ 成功 → レスポンス返却(品質低下の可能性をログ記録)
│ 失敗
▼
Degraded Mode
│ キャッシュ応答があれば返却
│ なければ定型エラーメッセージ
▼
Error Response
│ 「現在サービスを利用できません」
└── インシデントアラート発報
フォールバック設定
# フォールバック設定例
router_settings:
fallbacks:
- model_name: cs-ai-primary
fallback_models:
- cs-ai-fallback
- lightweight
# コンテキストウィンドウ超過時のフォールバック
context_window_fallbacks:
- model_name: cs-ai-primary # 128K tokens
fallback_models:
- cs-ai-long-context # より大きなコンテキスト対応モデル
# コンテンツフィルタ発動時のフォールバック
content_policy_fallbacks:
- model_name: cs-ai-primary
fallback_models:
- cs-ai-fallback # 別プロバイダで再試行
| フォールバック条件 | 対応 |
|---|
| HTTPエラー (5xx) | 即座に次のモデルへ |
| タイムアウト | 設定値超過で次のモデルへ |
| レート制限 (429) | バックオフ後にリトライ、それでも失敗なら次へ |
| コンテキスト超過 | より大きなコンテキストのモデルへ |
| コンテンツフィルタ | 別プロバイダで再試行 |
キャッシュ設計
キャッシュ戦略
| キャッシュ種別 | 説明 | ヒット率の目安 |
|---|
| 完全一致キャッシュ | 同一プロンプト+パラメータのキャッシュ | 5-15% |
| セマンティックキャッシュ | 意味的に類似したリクエストのキャッシュ | 15-30% |
| RAGコンテキストキャッシュ | 検索結果のキャッシュ(LLM呼び出し前) | 20-40% |
キャッシュの判定フロー:
リクエスト到着
│
▼
┌─────────────────┐ ヒット
│ 完全一致キャッシュ │ ────────→ キャッシュ応答を返却
│ チェック │
└────────┬────────┘
│ ミス
▼
┌─────────────────┐ ヒット
│ セマンティック │ ────────→ キャッシュ応答を返却
│ キャッシュチェック │ (類似度スコアも記録)
└────────┬────────┘
│ ミス
▼
LLM API呼び出し
│
▼
キャッシュに保存
キャッシュ設定
# Redis キャッシュ設定
litellm_settings:
cache: true
cache_params:
type: redis
host: redis-cluster.internal
port: 6379
# 完全一致キャッシュ
ttl: 3600 # 1時間
# セマンティックキャッシュ(オプション)
similarity_threshold: 0.95 # 類似度95%以上でヒット
# キャッシュ除外条件
cache_control:
no_cache_services:
- "cs-ai" # 顧客対応は常に最新応答
no_cache_params:
temperature_gt: 0.5 # temperature > 0.5はキャッシュしない
| 設計ポイント | 説明 |
|---|
| TTL設計 | ユースケースに応じてTTLを調整。FAQ→長め、CS→短めまたはキャッシュなし |
| キャッシュキー | モデル名+プロンプト+主要パラメータのハッシュ |
| 除外条件 | パーソナライズが必要な応答、高temperatureのリクエストは除外 |
| 容量管理 | LRU(Least Recently Used)で古いエントリを自動削除 |
レート制限と優先度制御
サービス別レート制限
# レート制限設定
general_settings:
master_key: os.environ/LITELLM_MASTER_KEY
# グローバル制限
max_parallel_requests: 200
# サービス別の予算・制限
internal_user_budget:
cs-ai:
max_budget: 500000 # 月50万円
max_parallel_requests: 100
tpm_limit: 1000000 # 100万トークン/分
faq-bot:
max_budget: 250000 # 月25万円
max_parallel_requests: 50
tpm_limit: 500000
code-review:
max_budget: 350000 # 月35万円
max_parallel_requests: 30
tpm_limit: 300000
優先度キューイング
| 優先度 | サービス | 制限到達時の挙動 |
|---|
| Critical | CS-AI | 他サービスを制限してでもリソース確保 |
| High | FAQ Bot | キューイングして順次処理 |
| Normal | Code Review | キューイング、必要に応じて遅延許容 |
| Low | バッチ処理 | 空きリソースがあるときのみ処理 |
監視と可視化
Gateway メトリクス
| メトリクス | 説明 | アラート閾値 |
|---|
| リクエスト数 | 単位時間あたりのリクエスト数 | 急増/急減を検知 |
| エラー率 | 4xx/5xxの割合 | > 5% |
| レイテンシ P95 | 95パーセンタイルの応答時間 | > 10秒 |
| キャッシュヒット率 | キャッシュから応答した割合 | < 10%(想定以下) |
| フォールバック率 | フォールバックが発動した割合 | > 10% |
| トークン使用量 | 入出力トークンの合計 | 日次予算の80%到達 |
まとめ
| ポイント | 内容 |
|---|
| ルーティング | ユースケース・複雑度・コスト・レイテンシに応じてモデルを振り分ける |
| フォールバック | Primary→Secondary→Tertiary→Degradedの段階的フォールバックを設計する |
| キャッシュ | 完全一致+セマンティックキャッシュでコスト削減とレイテンシ改善を両立 |
| レート制限 | サービス別の予算・並列数・TPM制限で公平なリソース配分を実現する |
チェックリスト
推定読了時間: 30分