Files
ewoooc/docs/adr/ADR-030-frontier-multi-vendor-strategy.md
OoO d3d90121cf docs(adr): ADR-030 Frontier 多供應商策略 — Anthropic + Google + OpenRouter
Operation Ollama-First v5.0 / Phase 12 / Phase 7 落地後追認

Phase 7 引入 Anthropic Claude(Opus 4.7 接 Code Review)後,
戰役有 2 家 Frontier 供應商,需明確治理準則:

決策矩陣(與 ADR-028 鎖定 7 場景對齊):
- 場景 #5 Code Review : Claude Opus 4.7 (Arena Elo 1548)
  → Gemini 2.5 Flash → ElephantAlpha 49B (3 層 fallback)
- 其他 6 場景維持 Gemini 主鏈

Prompt cache 戰術:
- Anthropic 5min ephemeral:Code Review 命中率預估 80%+,省 ~90% 成本
- Google Gemini:隱式 server-side cache,不可預測

預估月成本:~$32 USD
- Claude $10 + Gemini $8 + NIM $5×2 + OpenRouter $3 + Ollama $0.02

新增供應商 SOP:
1. service wrapper 加 feature flag + is_available() 檢查
2. budget 種子 + ai_calls.provider 白名單
3. unit test (fallback 鏈 + cache hit/miss)
4. 獨立 ADR

對齊:
- migration 024(claude in provider 白名單)
- migration 025(claude $10/月 budget 種子)
- ai_call_logger COST_TABLE(claude-opus/sonnet/haiku 三模型)
- services/anthropic_service.py(Phase 7 落地)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-03 23:42:36 +08:00

8.8 KiB
Raw Permalink Blame History

ADR-030: Frontier 多供應商策略 — Anthropic + Google + OpenRouter

  • Status: Accepted
  • Date: 2026-05-03
  • Decision Maker: 統帥
  • Author: Operation Ollama-First v5.0Phase 7 落地後追認)
  • Supersedes: 無
  • Related: ADR-028LLM 路由統一準則、ADR-029Hermes-First 雙塔分工、ADR-027Primary Ollama on GCP

Context

戰役 v5.0 Wave 1 完成後commits 4648673~943de84momo-pro 的 LLM 治理已具備:

  • 三主機 Ollama 級聯Primary/Secondary/Fallback
  • 13 caller 接入 ai_call_logger
  • 7 場景鎖定 Gemini不可走 Ollama
  • ADR-029 Hermes-First 雙塔分工

Phase 7 升級Claude Opus 4.7 接 Code Review 引入了第二家 Frontier 供應商Anthropic戰役需要明確的多供應商治理準則

  1. 何時用 Anthropic vs Google — 兩家都是 Frontier但能力分布不同
  2. Prompt cache 戰術 — Anthropic 5min ephemeral / Google 隱式,省成本邏輯不同
  3. 配額 / 帳單 / 失敗鏈 — 多家供應商需獨立 budget 與 fallback 順序
  4. OpenRouter 角色 — 既有 PPT deepseek-v3.2 鏈為何不丟掉?

單一供應商風險(戰役 v3.0 起的核心觀察Gemini 月用量 50M tokens若 Google 端配額爆 / 政策變更 / API key 撤銷 → 全系統癱瘓。多供應商提供工程級 fault tolerance。


Decision

1. 三家 Frontier 供應商角色定位

供應商 模型 適用場景 計費模式
Anthropic Claude Opus 4.7 / Sonnet 4.6 / Haiku 4.5 程式碼推理 + agentic 工具 + 長 context (200K) metered / prompt cache 5min ephemeral
Google Gemini 2.5 Flash / 2.5 Pro Search Grounding + 繁中商業文體 + 多模態 metered
OpenRouter DeepSeek V3.2 / 其他 PPT 簡報降級 + 實驗性多供應商 passthrough metered

2. 場景對應決策矩陣(與 ADR-028 鎖定 7 場景對齊)

ADR-028 場景 主供應商 備援供應商 依據
#1 MCP 即時情報 Gemini 2.5 Pro Grounding Gemini 1.5 Flash Grounding 唯一聯網 groundingPhase 10 將補 mcp-omnisearch
#2/3/4 OpenClaw 週/月/年報 Gemini 2.5 Flash NIM llama-3.3-70b 長 context + 繁中商業文體
#5 Code Review Claude Opus 4.7 Gemini 2.5 Flash → ElephantAlpha 49B Arena code Elo 1548程式碼 #1+ 200K context
#6 EA HITL Gemini 2.0 Flash Hermes Ollama 預跑 統帥決策時效
#7 PPT 簡報 Gemini 2.0 Flash Ollama qwen2.5-coder:7b → DeepSeek V3.2 5K rows 長 context

#5 Code Review 是 Phase 7 主要升級點

  • Claude Opus 4.7 程式碼能力 Arena Elo 1548 vs Gemini 2.5 Flash ~1450+7%
  • 200K context 支援全 repo diffGemini Flash 限 1M 但實測響應品質下降)
  • Prompt cache 對 Code Review 的「固定 system_prompt + 變動 diff」場景命中率預估 80%+,省 ~90% 成本
  • 預估月成本Opus 4.7 $25 vs Gemini 2.5 Flash $5差 $20但 +7% 品質 + 主權冗餘值得)

3. Prompt Cache 戰術

Anthropic5 分鐘 ephemeral

# services/anthropic_service.py 已實作
kwargs["system"] = [
    {"type": "text", "text": system_prompt,
     "cache_control": {"type": "ephemeral"}}
]

適用場景Code Reviewsystem_prompt 固定、diff 變動)、相同 caller 5 分鐘內多次調用。

省成本估算

  • 第一次調用input_tokens 全價 + cache_creation 收費(同 input
  • 第 2-N 次5min 內cache_read 0.1× input 價格 → 省 90%

Google Gemini隱式 server-side cache

  • 無顯式 API依靠 Google 內部優化
  • 不可預測,不納入成本估算

4. Budget 與告警(與 migration 025 種子對齊)

Provider 月預算 種子位置 告警閾值
claude $10 ai_call_budgets 80%
gemini $8 同上 80%
nim $5 同上 80%
nim_via_elephant $5 同上 80%
openrouter $3 同上 80%
gcp_ollama $0.01 同上(異常激增告警) 100%
ollama_111 $0.01 同上 100%

戰役 v5.0 月成本上限~$32 USDvs 戰前估算 ~$25 + Phase 7 升級增量 $20 - Hermes-first 攔截 -$13

5. Fallback 鏈規範

Code Review (Phase 7 落地)

L0: Claude Opus 4.7 (CODE_REVIEW_USE_CLAUDE=true)
   ↓ 失敗 / SDK 不可用
L1: Gemini 2.5 Flash (REVIEW_MODEL)
   ↓ 失敗
L2: ElephantAlpha NIM 49B (services/elephant_service.py)

EA HITL(依 ADR-029 雙塔分工):

L0: Gemini 2.0 Flash (orchestrator)
   ↓ 信心度不足
L1: Hermes Ollama 預跑5s timeout免費
   ↓ 0 threats
L2: short-circuit 不送(避免空泛訊息)⭐ commit 56504ed 修補

新增供應商規則

  • 任何新 Frontier 供應商引入需獨立 ADR如 Phase 7 引入 Claude
  • service wrapper 必加 feature flag + is_available() 檢查
  • 必加 cost budget 種子 + ai_calls.provider 白名單
  • 必有對應 unit testfallback 鏈 + cache hit/miss

Alternatives Considered

方案 否決理由
A. 單一 Frontier (只用 Gemini) 單供應商風險API 撤銷 / 配額爆 / 政策變更全系統癱瘓
B. 全 Frontier 多家互通all-providers fallback 模型輸出格式差異大tool_calls schema、temperature 行為),統一介面工程量 > ROI
C. 自建 Code Review 用 OllamaDeepSeek-V3 A2 web research 紅燈Ollama deepseek-r1 chat template tools 假支援GitHub Issue #10935
D. 等 Gemini 3.0 Pro GA 再升級 Anthropic Claude Opus 4.7 已驗 Arena Elo 1548 程式碼 #1等待無價值
E. 用 OpenRouter 統一接入所有家 增加中間層延遲 + 失去 Anthropic prompt cache 優勢

Consequences

正面5

  1. 單供應商風險解除Code Review 從 Gemini 唯一改 Claude L0戰時可一鍵切回 Gemini L1
  2. Code Review 品質 +7%Arena Elo 1548 vs ~1450
  3. Prompt cache 隱性節省Code Review 重跑命中率 80%+,省 ~90% Claude 成本
  4. Frontier 配額分散Claude $10 + Gemini $8 + 其他 = 不會卡單一家配額
  5. 未來新增供應商 SOP 化feature flag + budget + ADR 三件套

負面3

  1. 月成本 +$20Claude Opus 4.7 對 Code Review 升級)
  2. 依賴 Anthropic SDK版本升級需追蹤requirements.txt anthropic>=0.40.0
  3. 多供應商除錯複雜度↑:故障時要追三家失敗鏈

風險4

  1. Anthropic API key 洩漏:與 Gemini 同等保護(.env + Gitea Secret
  2. Claude Opus 4.7 模型下架CLAUDE_MODEL env 可即時切 sonnet-4-6 不需改 code
  3. Cache hit 不如預期:監控 ai_calls.cache_read_tokens 比例,<40% 觸發 INFO 告警
  4. 多家帳單分散觀測token 日報 Section 4「成本拆解」需明確分家統計已就位

Verification

V1service wrapper 可用性

from services.anthropic_service import anthropic_service
print(anthropic_service.is_available())  # True if ANTHROPIC_API_KEY set
print(anthropic_service.check_connection())  # True if Claude API responds

V2Code Review 切換驗證

# 戰前CODE_REVIEW_USE_CLAUDE=false
# ai_calls 應只有 provider='gemini' for code_review_openclaw

# 戰後CODE_REVIEW_USE_CLAUDE=true
# ai_calls 應有 provider='claude' + cache_read_tokens > 05min 內第二次)

V3Prompt cache 命中率

SELECT
  AVG(CASE WHEN cache_hit THEN 1.0 ELSE 0.0 END) * 100 AS cache_hit_pct
FROM ai_calls
WHERE provider = 'claude'
  AND called_at > NOW() - INTERVAL '7 days';
-- 期望 ≥ 60% (首次 + 5min 內後續)

V4月成本對齊預算

SELECT provider, SUM(cost_usd) AS month_cost
FROM ai_calls
WHERE called_at > date_trunc('month', NOW())
GROUP BY provider
ORDER BY month_cost DESC;
-- 期望: claude < $10, gemini < $8, total < $32

Migration Plan

Phase 工作 狀態
7.1 Anthropic SDK 包裝 + COST_TABLE commit 943de84
7.2 code_review_pipeline 加 L0 Claude 路由 commit 943de84
7.3 feature flag CODE_REVIEW_USE_CLAUDE 預設 OFF commit 943de84
7.4 requirements.txt + .env.example commit 943de84
7.5 統帥手動:.env 加 ANTHROPIC_API_KEY + 翻 ON
7.6 觀察 1-2 週 cache hit rate + 成本
7.7 達標後寫 ADR-031同類 SOP 用於其他升級) 後續

References

  • Anthropic Prompt Caching
  • Arena Code LLM Leaderboard — Claude Opus 4.7 Elo 1548
  • ADR-028LLM 路由統一準則)
  • ADR-029Hermes-First 雙塔分工)
  • migration 024/025ai_calls + budgets schema
  • services/anthropic_service.pyPhase 7 落地)
  • services/code_review_pipeline_service.py:46-58feature flag