型付き辺: 出 9 / 入 0
ADR-0033: Decision Pipeline LLM モデルのアップグレード (Gate 1 / Gate 3 GPT / Gate 4)
- Status: Accepted
- Mode: Critical
- Kruchten Type: Executive/Property
- Scope: platform
- Implementation Status: Done (PR #674, deployed 2026-05-13)
- 起案者: [email protected]
- 起案日時 (JST): 2026-05-13 20:41
- 承認日時 (JST): 2026-05-13 20:50
- Deciders: [email protected] (単独)
1. コンテキスト
1.1 背景 (Background)
Decision Pipeline (ADR-0019 で採用、LangGraph TS on Cloudflare Workers + LiteLLM Gateway) の各 Gate に異なる LLM を割り当てている (drp/src/llm/gateway.ts:32-42):
| Gate | 役割 | 現行モデル |
|---|---|---|
| Gate 0 (Triage) | 分類 (ADR-worthy + Mode 判定) | gemini-flash |
| Gate 1 (Socratic) | 5 項目充足チェック + 判定 | gemini-flash |
| Gate 2 (Consistency) | 過去 ADR 整合性 | claude-opus-4-7 |
| Gate 3 (Parallel Review) | 3 LLM 並列レビュー | gemini-pro + claude-opus + gpt-4.1 |
| Gate 4 (Scoring) | 10 軸数値評価 | gpt-4.1 |
| body_generation | ADR 本文生成 | claude-opus-4-7 |
| slug | kebab-case 変換 | gemini-flash |
| Policy Alignment | 会社方針照合 | claude-opus-4-7 |
うち 3 か所 (太字) が中堅モデル (gemini-flash / gpt-4.1) で運用されており、フロンティアモデル (claude-opus-4-7 / claude-sonnet-4-6 / gpt-5) へのアップグレード余地がある。
1.2 現状 (Current State / As-Is)
本日 (2026-05-13) Pipeline 経由で起案した ADR 5 本の Gate 1 / Gate 4 通過状況:
| ADR | Gate 1 (Socratic) | Gate 4 (Scoring) |
|---|---|---|
| ADR-0028 | 一発通過 | Critical 通過 |
| ADR-0029 | 一発通過 | 43→48 (再投入で +5 改善、Critical 閾値 45 跨ぐ) |
| ADR-0030 | 5 リトライで stuck (curl 投入)、Web UI 投入で通過 | Standard 46/50 通過 |
| ADR-0031 | 一発通過 | Critical 47/50 通過 |
| ADR-0032 | 一発通過 | Standard 通過 |
- Gate 1 で stuck したのは ADR-0030 起案時、context 強化版 v3-v6 を投入しても gemini-flash が同じ質問を堂々巡りで再生 (LLM 非決定性 + flash 判定の精度不足が原因)
- Gate 4 で採点ブレ ±5 点 (ADR-0029 で 43→48) が観測され、Critical 閾値 (45) を跨ぐ
- Parallel Review の GPT-4.1 (技術視点) は 2026-05 時点で 1 世代古いモデル、GPT-5 リリース済
1.3 課題 (Problem)
- Gate 1 過剰判定: gemini-flash は分類タスクには十分だが「5 項目充足判定」のような微細な品質評価には弱い。LLM 非決定性で同じ質問を再生し、context 強化しても通過しないループに陥る (ADR-0030 起案で 5 リトライ、機会費用 [MASKED:AMOUNT] + LLM API $1.5)
- Gate 4 スコアブレ: gpt-4.1 は LMSYS Chatbot Arena の LLM-as-judge カテゴリで Claude Opus に劣る。10 軸 × 5 段階の多基準評価で採点一貫性が不足 (±5 点ブレ)、Critical 閾値 (45) を跨ぐ判定ブレで再投入が発生 (年 12 件想定 = [MASKED:AMOUNT]k 機会費用)
- Gate 3 (Parallel Review GPT) の世代遅れ: gpt-4.1 は GPT-5 リリース (2026-Q1) で中堅化、技術視点レビューの精度向上余地あり
1.4 制約・要件 (Constraints & Requirements)
- LiteLLM Gateway 経由で 3 か所のモデル alias を変更するだけで実装可能 (
gateway.tsの 3 行変更) - Adaptive Thinking (Extended Thinking) は Claude Opus 4.7 で 2025-Q4 から GA、API パラメータ
thinking: { type: 'enabled', budget_tokens: N }で有効化 - Parallel Review の 3 LLM 多様性は維持 (Gemini + Claude + GPT の構成は変えず、GPT 系を 4.1 → 5 にスロット内 upgrade)
- 月 100 ADR 想定で年間 LLM コスト増 ≤ $500
1.5 目標 (Goals / To-Be)
- Gate 1 (Socratic) を claude-sonnet-4-6 に変更、過剰判定ループを解消 (1 回目通過率 90% 以上)
- Gate 4 (Scoring) を claude-opus-4-7 (Adaptive Thinking, thinking_budget=8192) に変更、採点ブレを ±2 点以内に
- Gate 3 (Parallel Review GPT スロット) を gpt-5 に変更、技術視点レビューの精度向上 + 3 LLM 多様性維持
- 再投入率を 50% → 20% 以下に下げる (現行 ADR-0029 / ADR-0030 で発生したループ・差し戻しを構造的に削減)
2. 決定
drp/src/llm/gateway.ts の MODELS オブジェクトで以下の 3 か所を同時アップグレードする: Gate 1 (Socratic) を gemini-flash → claude-sonnet-4-6、Gate 3 (Parallel Review GPT スロット) を gpt-4.1 → gpt-5、Gate 4 (Scoring) を gpt-4.1 → claude-opus-4-7 + Adaptive Thinking (thinking_budget=8192) とする。Parallel Review の 3 LLM 多様性 (Gemini + Claude + GPT) はスロット内 upgrade で維持。LiteLLM Gateway 経由で 3 行変更 + scoring.ts への thinking パラメータ追加で完結し、変更直後の 5 ADR で旧構成と A/B 比較し、1 ヶ月後 (2026-06-13) に Review After で撤退条件発火を判定する。
2.1 3 か所のモデル切替
// Before
socratic: 'gemini-flash', // Gate 1
scoring: 'gpt-4.1', // Gate 4
reviewGpt4: 'gpt-4.1', // Gate 3 技術視点
// After (本 ADR)
socratic: 'claude-sonnet', // Gate 1: claude-sonnet-4-6 (判定一貫性向上)
scoring: 'claude-opus', // Gate 4: claude-opus-4-7 + Adaptive Thinking
reviewGpt4: 'gpt-5', // Gate 3 技術視点: GPT-5 (3 LLM 多様性維持)
2.2 Adaptive Thinking の有効化 (Gate 4)
scoring.ts の createLlm(env, MODELS.scoring, 0.0) 呼び出し時に thinking_budget: 8192 を渡す:
const llm = createLlm(env, MODELS.scoring, 0.0, { thinking_budget: 8192 });
LiteLLM v1.50+ で Anthropic Extended Thinking パラメータをサポート済。
2.3 LiteLLM Gateway 設定
以下のモデル alias が LiteLLM config.yaml に登録されている必要がある:
claude-sonnet→anthropic/claude-sonnet-4-6(Gate 1)claude-opus→anthropic/claude-opus-4-7(Gate 4 / 既存運用中)gpt-5→openai/gpt-5oropenai/gpt-5-thinking(Gate 3)
未登録の場合は LiteLLM 設定追加 (推定 15 分)。
2.4 A/B 比較計画
マージ後、次の 5 ADR で:
- 旧構成 (gemini-flash / gpt-4.1 / gpt-4.1) と新構成 (claude-sonnet / claude-opus + thinking / gpt-5) で並行 Pipeline 実行
- 採点差 ±2 点以内 / Gate 1 一発通過率 90% 以上で新構成定着
- Review After 1 ヶ月で結果を
docs/_internal/changelog.mdに記録
3. 検討した代替案 (Alternatives Considered)
案 A (採用): 3 か所同時アップグレード (Gate 1: claude-sonnet / Gate 3 GPT: gpt-5 / Gate 4: claude-opus + Adaptive Thinking)。
- Good: 全 Gate に最適モデル配置、LLM-as-judge ベンチマーク準拠。
- Good: Parallel Review の 3 LLM 多様性維持 (Gemini + Claude + GPT)。
- Good: Gate 1 過剰判定ループ + Gate 4 採点ブレを同時解消、再投入率 50% → 20% 想定。
- Good: 1 PR で完結、運用変更コスト最小。
- Bad: 月 LLM コスト +$65 (年 +$780)、ただし削減効果で年 [MASKED:AMOUNT] 純減。
- Bad: 3 か所同時変更で A/B 比較が複雑 (各 Gate 個別のベースライン記録必須)。
案 B (不採用): Gate 4 のみ変更 (Scoring を claude-opus + Adaptive Thinking)。
- Good: 変更範囲最小、A/B 比較もシンプル。
- 不採用理由: Gate 1 過剰判定ループ (ADR-0030 実例) は未解消、Parallel Review の世代遅れも残る。
案 C (不採用): 段階的アップグレード (まず Gate 4、1 ヶ月後 Gate 1、3 ヶ月後 Gate 3)。
- Good: A/B 比較がシンプル。
- 不採用理由: 3 ヶ月間に Gate 1 ループ [MASKED:AMOUNT] 機会費用が継続。各 Gate の ADR を独立に起案するコスト ([MASKED:AMOUNT] × 3) が発生。
案 D (不採用): 全 Gate を claude-opus に統一。
- Good: モデル統一で運用シンプル。
- 不採用理由: Parallel Review の多様性が消失 (3 LLM 並列レビューの本質を破壊)。Gate 0 / slug には Opus がオーバースペック、月 $200 超の無駄。
案 E (不採用): GPT-5 統一 (全 Gate を GPT-5 / GPT-5-mini に統一)。
- Good: OpenAI 単一ベンダーで管理シンプル。
- 不採用理由: LLM-as-judge / 長文判定で Claude が優位、Scoring 精度低下。日本語技術文書理解で Claude > GPT-5、Gate 2 で精度低下リスク。
4. コスト試算
4.1 初期投資 (1 回限り)
| 項目 | 工数 | 金額 |
|---|---|---|
| gateway.ts の 3 行変更 + scoring.ts に thinking パラメータ追加 | 0.5 時間 | $0 |
| LiteLLM Gateway モデル alias 確認 + 必要なら追加登録 | 0.25 時間 | $0 |
| 動作確認 (テスト ADR 1 本投入で 3 Gate 全て新モデル動作確認) | 0.5 時間 | LLM API 約 $1 |
| Decision Pipeline 投入 + Accepted 化 + マージ (本 ADR 自身) | 0.75 時間 | LLM API $3 |
| 初期投資合計 | 約 2 時間 | 約 $4 (≈ [MASKED:AMOUNT]) |
4.2 月次運用コスト増 (継続)
| Gate | 現行 model 単価 (per call) | 新 model 単価 (per call) | 月 100 ADR × call 数 | 月次差分 |
|---|---|---|---|---|
| Gate 1 (Socratic) | gemini-flash $0.001 | claude-sonnet $0.05 | 100 × 1 = 100 calls | +$5 |
| Gate 3 (Parallel Review GPT) | gpt-4.1 $0.05 | gpt-5 $0.30 | 100 × 1 = 100 calls | +$25 |
| Gate 4 (Scoring) | gpt-4.1 $0.05 | claude-opus + thinking $0.40 | 100 × 1 = 100 calls | +$35 |
| 合計 | +$65/月 (年 +$780, ≈ [MASKED:AMOUNT]) |
4.3 削減効果 (継続)
- Gate 1 過剰判定ループ削減: 月 2 件想定 (ADR-0030 で 5 リトライ実例) × [MASKED:AMOUNT] 機会費用 + $5 LLM = 月 [MASKED:AMOUNT] + $10
- Gate 4 採点ブレ削減: 月 1 件再投入想定 × [MASKED:AMOUNT] 機会費用 + $3 LLM = 月 [MASKED:AMOUNT] + $3
- 合計: 月 [MASKED:AMOUNT] + $13 削減 = 年 [MASKED:AMOUNT] + $156 削減 (約 [MASKED:AMOUNT] 削減)
4.4 純効果
年間: [MASKED:AMOUNT] 削減 - [MASKED:AMOUNT] LLM コスト増 = 約 [MASKED:AMOUNT] 純減。投資回収期間: 約 5 ヶ月。
5. 影響 (Consequences)
5.1 正の影響 (Good)
- Existence: Adaptive Thinking (thinking_budget=8192) を Gate 4 に導入、思考プロセスを経た採点で一貫性向上。
- Property: Gate 1 過剰判定ループの構造的解消 (1 回目通過率 90% 以上目標)、ADR-0030 のような 5 リトライ stuck を回避。
- Property: Gate 4 採点ブレ ±5 → ±2 点以内に縮小、Critical 閾値 (45) 跨ぐ判定ブレを解消。
- Property: Parallel Review の 3 LLM 多様性維持 (Gemini + Claude + GPT)、GPT スロットを 5 にスロット内 upgrade で技術視点精度向上。
- Executive: 1 PR で 3 か所完結、運用変更コスト最小。年 [MASKED:AMOUNT] 純減、投資回収 5 ヶ月。
- Property: 再投入率 50% → 20% 以下、起案者の試行錯誤負荷を削減。
5.2 負の影響 (Bad)
- Executive: 月 LLM コスト +$65 (年 +$780, ≈ [MASKED:AMOUNT]) 増加。月次 LiteLLM 請求の継続的モニタリングが必要。
- Property: 3 か所同時変更により A/B 比較が複雑化、各 Gate 個別のベースライン記録 (Gate 1 通過率 / Gate 4 採点ブレ / Gate 3 一致率) が必須となり、Review After 集計工数が増える。
- Executive: Anthropic / OpenAI 2 ベンダー依存度が増加 (gemini-flash → claude-sonnet で Anthropic 比重増)、Anthropic Tier rate limit に Parallel Review と合算で抵触するリスク。
- Executive: Adaptive Thinking はトークン課金倍率変動の影響を受けるため、thinking_budget 増加でコスト想定が崩れる可能性。
- Property: claude-sonnet が逆方向に厳しめ判定する場合、Gate 1 通過率が想定より低くなる可能性 (撤退条件で escalate 経路あり)。
Status / Mode / Scope は 2026-06-11 に遡及追加 (ADR-0031 corrigendum パターン)。出典: Status = 旧形式「## ステータス」節の機械転記 / Mode = 旧 README §既存 ADR 一覧の推定値 (git 履歴) / Scope = ADR-0049 4 層分類の遡及付与 (PR レビューで確定)。
5.3 中立・トレードオフ (Neutral / Trade-offs)
- Gate 0 / Gate 2 / body / slug / Policy Alignment は変更なし (既に最適配置)。
- Parallel Review の GPT スロットを残すか Claude 統一にするかは案 D で検討済、多様性維持を選択。
- thinking_budget=8192 は初期値、Review After で 16384 への増加も選択肢。
- gpt-5 応答時間が長い場合は gpt-5-mini へのダウンサイズ経路あり (撤退条件)。
- GPT-6 / Opus 5 リリース時に 6 ヶ月後 Review After で再評価。
6. 完了条件
- gateway.ts の 3 か所変更:
grep -E "socratic:.*claude-sonnet|scoring:.*claude-opus|reviewGpt4:.*gpt-5" drp/src/llm/gateway.ts→ 3 match - scoring.ts に thinking パラメータ追加:
grep -c "thinking_budget\|thinking:" drp/src/nodes/scoring.ts→ >= 1 - LiteLLM Gateway に 3 モデル alias 登録済 (
config.yamlに claude-sonnet / claude-opus / gpt-5 が存在) - テスト ADR 1 本投入で 3 Gate 全て新モデルで実行成功
- 本 ADR を自身が 3 Gate 新構成で Scoring 通過 (dogfooding)
- CI markdown-link-check PASS
7. 影響範囲
drp/src/llm/gateway.ts: MODELS の 3 行変更 (+3/-3)drp/src/nodes/scoring.ts: createLlm に thinking パラメータ追加 (+2 行)drp/litellm/config.yaml(必要なら): モデル alias 追加 (claude-sonnet / gpt-5)- 既存 Gate 0 / Gate 2 / body / slug / Policy Alignment: 変更なし (既に Claude Opus または Gemini Flash で運用、最適配置)
8. 長期影響
6 ヶ月後の負債化リスク:
- Anthropic / OpenAI のモデル価格改定 → 月次 LiteLLM 請求でアラート設定 (月 $130 超で通知)
- Adaptive Thinking のコスト変動 (thinking_budget 増加で output token 倍率変動) → Scoring 1 回あたり $0.50 超でアラート
- GPT-5 → GPT-6 (or Claude Opus 5) リリース時の再評価が必要
- LiteLLM Gateway の rate limit (Anthropic Tier 制限) → 月 100 ADR + parallel review で合算負荷 monitoring
観測指標 (月次):
- Gate 1 一発通過率: 目標 90% 以上 (現状不明、claude-sonnet で計測開始)
- Gate 4 採点ブレ (同一 ADR 2 回投入差分): 目標 ±2 点以内
- Gate 3 Parallel Review の 3 LLM 一致率: 現状ベースライン測定
- 月次 LLM 総コスト: 目標 < $100
- Pipeline 応答時間 (中央値): 目標 < 45 秒 (Adaptive Thinking 含む)
Review After:
- 1 ヶ月後 (2026-06-13): A/B 比較結果集計、撤退条件発火判定
- 3 ヶ月後 (2026-08-13): モデル精度・コスト・応答時間の月次トレンド
- 6 ヶ月後 (2026-11-13): フロンティアモデル (Opus 5 / GPT-6) への再評価
Spike Results
実装中に判明した外部ライブラリの挙動。同じ罠を踏まないための記録。
| 確認項目 | 結果 | 確認日 | 備考 |
|---|---|---|---|
claude-opus-4-7 + thinking: { type: 'enabled', budget_tokens: N } | ❌ Anthropic 400 | 2026-05-13 | 4-7 は enabled 非対応。adaptive を使う |
claude-opus-4-7 + output_config: { effort: 'max' } (LiteLLM main-stable) | ❌ LiteLLM 500 | 2026-05-13 | LiteLLM が claude-opus-4-6 のみ許可するバグ。_is_opus_4_6_model を patch して回避 |
claude-opus-4-7 + thinking: { type: 'adaptive' } + output_config: { effort } | ❌ LiteLLM HTML エラー | 2026-05-13 | LiteLLM が adaptive を未処理でクラッシュ |
claude-opus-4-7 + reasoning_effort: 'max' (LiteLLM main-stable + patch) | ✅ 動作 | 2026-05-13 | LiteLLM の _map_reasoning_effort 経由で thinking + output_config に変換される |
Gemini Pro (gemini-pro) の thinking 深度設定 | ✅ -1 で動的 MAX | 2026-05-13 | LiteLLM が budget_tokens: -1 を thinkingConfig に変換。Gemini 3.1 Pro 推奨値 |
GEMINI_API_KEY の Cloud Run マウント | ❌ 未設定でデプロイすると Gate 3 が 500 | 2026-05-13 | Secret Manager に登録必須。deploy-cloudrun.sh の事前チェックで検出可能 |
撤退条件 (Rollback Plan)
| 判定指標 | 閾値 | 判定タイミング | 対応 |
|---|---|---|---|
| Gate 1 (claude-sonnet) で過剰判定継続 | 1 ヶ月の集計で 1 回目通過率 < 80% | 1 ヶ月後 Review After | claude-opus に escalate or system prompt 緩和 |
| Gate 4 (claude-opus + thinking) でも採点ブレ大 | 1 ヶ月の A/B 比較で平均ブレ > ±3 点 | 1 ヶ月後 Review After | thinking_budget 8192 → 16384 増加 or temperature 厳格化 |
| Gate 3 (gpt-5) で応答時間 > 60s | Pipeline 中央値 60s 超 | 月次 Pipeline ログ | gpt-5 → gpt-5-mini にダウンサイズ |
| LLM コスト超過 | 月 LLM 請求 > 想定 2 倍 ($130 超) | 月次 LiteLLM ログ | 各 Gate を 1 段下げ (Sonnet → Haiku, Opus → Sonnet, GPT-5 → GPT-4.1 復帰) |
| いずれかのモデルが deprecated | Anthropic / OpenAI アナウンス | 公式情報 | 後継モデル (Opus 5 / Sonnet 5 / GPT-6) にアップグレード |
Confirmation (準拠確認 / Fitness Function)
本セクションは ADR-0036 (Accepted 2026-05-14) で遡及追加された。ADR-0031 パターン (業界標準準拠メタデータ後付け = 誤字修正範疇) に準拠する遡及で本文の意思決定内容は不変。
- 検証手段: Pipeline Gate 2 (consistency) + LiteLLM ログ集計
- 実行頻度: PR ごと
- 違反時の対応: 自動 fail
参照 (References)
- 関連 ADR: ADR-0019 (Decision Pipeline 採用), ADR-0024 (§1/§5 サブ見出し構造), ADR-0028 / ADR-0029 / ADR-0030 / ADR-0031 / ADR-0032 (Pipeline 運用実績データ提供元), ADR-0030 (Kruchten Type 必須化), ADR-0032 (Implementation Status 必須化)
- 関連 PR/Issue: -(要追記)
- 外部資料: LMSYS Chatbot Arena (LLM-as-judge カテゴリ), Anthropic Extended Thinking 公式ドキュメント, LiteLLM v1.50+ Anthropic thinking パラメータサポート