概要
Shannonは、以下に基づいて各タスクに最適なLLMモデルを自動的に選択します:- タスクの複雑さ(分解中に分析)
- 明示的なティアリクエスト(
model_tierパラメータ) - モデル/プロバイダーのオーバーライド(
model_override、provider_override) - 優先順位ランキング(
config/models.yamlで定義) - 予算制約およびトークン制限
モデルティア
Shannonはモデルを3つのティアに整理します:| ティア | 対象使用 | 特徴 | コスト範囲 |
|---|---|---|---|
| Small | 50% | 高速、コスト最適化、基本的な推論 | $0.0001-0.0002/1K入力 |
| Medium | 40% | バランスの取れた能力/コスト | $0.002-0.006/1K入力 |
| Large | 10% | 重い推論、複雑なタスク | $0.02-0.025/1K入力 |
選択フロー
優先順位ランキング
各ティア内で、モデルは優先順位によってランク付けされます(数字が小さいほど優先度が高い)。Shannonは、成功するまで優先順位順にモデルを試みます。config/models.yamlからの例:
- 優先順位1が失敗した場合(レート制限、APIエラー)、Shannonは優先順位2を試みます
- モデルが成功するまで続けるか、すべてのオプションが尽きるまで
- 失敗はオーケストレーターのログに記録されます
パラメータの優先順位
複数のパラメータがモデル選択を指定する場合、優先順位は次の通りです:model_override(最高優先度)→ 特定のモデルを強制provider_override→ 1つのプロバイダーのモデルに制限model_tier→ リクエストされたティアを使用- 自動検出された複雑さ(最低優先度)→ デフォルトの動作
トップレベルとコンテキストパラメータ
トップレベルのパラメータは常にコンテキストパラメータを上書きします:使用例
自動選択(デフォルト)
gpt-5-nano-2025-08-07を使用(Smallティアの優先順位1)
特定のティアを強制
gpt-5.1-2025-11-01(Largeティアの優先順位1)
特定のモデルにオーバーライド
プロバイダーを強制
claude-sonnet-4-5-20250929
Python SDKの例
コスト最適化戦略
1. 小さく始め、必要に応じてエスカレート
2. プロバイダー特有の最適化
3. セッションベースのエスカレーション
複雑性分析
Shannonはタスクの複雑性をいくつかの要因を用いて分析します:- クエリの長さと特異性
- 特定されたサブタスクの数
- ツール使用の要件
- 必要なコンテキストの深さ
- 推論の強度(「分析する」、「比較する」、「合成する」などのキーワード)
< 0.3→ 小さなティア(簡単なQ&A、基本的なタスク)0.3 - 0.7→ 中程度のティア(複数ステップ、中程度の推論)> 0.7→ 大きなティア(複雑な研究、重い推論)
監視とデバッグ
使用されたモデルの確認
Prometheusメトリクス
オーケストレーターのログ
"Model selected: gpt-5-nano-2025-08-07 (small tier, priority 1)""Falling back to priority 2: claude-haiku-4-5-20251001""Falling back to priority 3: grok-3-mini (xAI)""Tier override: user requested large → using gpt-5.1-2025-11-01"
設定
モデルのティアと優先順位はconfig/models.yaml に定義されています:
priority(デフォルト):優先順位順にモデルを試すround-robin:同じ優先順位のモデルに均等に負荷を分配least-cost:ティア内で常に最も安価なモデルを選択
トラブルシューティング
問題: 誤ったティアが選択された
症状: 中程度のティアが使用されているが、小さなティアを期待していた 解決策:- リクエストで
model_tier: "small"を明示的に設定 - オーケストレーターのログで複雑性スコアを確認
- クエリが複雑性のヒューリスティックを引き起こしていないか確認(「深く分析する」などの言葉を避ける)
問題: 特定のモデルが使用されない
症状:model_override: "gpt-5.1-2025-11-01" をリクエストしたが、異なるモデルが返される
解決策:
- モデルが
config/models.yamlのmodel_catalogにあることを確認 - プロバイダーのAPIキーが
.envに設定されているか確認(例:OPENAI_API_KEY,XAI_API_KEY) - モデルIDが標準名を使用しているか確認(エイリアスではなく)
- フォールバックメッセージのためにオーケストレーターのログを確認
- モデルがAPIプランで利用可能であることを確認(例: GPT-5.1は適切なティアが必要)
問題: 高コスト
症状: 予想以上のコスト 解決策:- Prometheusを通じて実際のティア分布を確認
- リクエストに明示的に
model_tier: "small"を追加 - 不要なエスカレーションのために
shannon_tier_drift_totalをレビュー - 予算を強制するために
.envにMAX_COST_PER_REQUESTを設定
問題: レート制限
症状: 頻繁に429エラー、遅いフォールバックカスケード 解決策:- ティア優先リストにプロバイダーを追加
- 負荷を分散するために
round-robinモードを有効にする - 影響を受けるプロバイダーの
RATE_LIMIT_WINDOWを増加 - フォールバックとして安価なプロバイダー(DeepSeek、Groq)を検討
ベストプラクティス
- 自動選択をデフォルトに: Shannonの複雑性分析を活用
- オーバーライドは控えめに: 必要な場合のみ
model_overrideを使用 - 小さく始める: コストに敏感なワークロードには
model_tier: "small"を設定 - 分布を監視: メトリクスを通じてティア使用を追跡
- フォールバックを設定: 各ティアに3つ以上のプロバイダーを確保
- 優先順位の順序をテスト: お気に入りのモデルが優先順位1であることを確認
- 予算の強制: 安全のために
MAX_COST_PER_REQUESTを設定