Files
ewoooc/docs/adr/ADR-029-hermes-first-twin-tower.md
OoO 3ea7004a6f refactor(p4)+docs(p5+p6): Meta 降頻 + LOCKED-GEMINI + ADR-028/029
Phase 4 A10 — OpenClaw 雙塔重劃
- run_scheduler.py: Meta 自審 cron 6h → 每日 12:00(月省 2.25M Gemini, +20% 達標)
- scheduler.py: 移除 icaim 內 2 處 inline meta 觸發
- openclaw_strategist 抽 _push_report_with_charts (call×3) + _collect_mcp_intel (call×2)
- 行數目標 -25% 未達(4 報告函數結構差異大,A10 採保守抽出避險)
- 主戰果:Meta 降頻月呼叫 300 → 30(-90%)

Phase 5 — 5 處 LOCKED-GEMINI 註解(涵蓋鎖定 7 場景)
- services/mcp_collector_service.py:32 (場景 #1: Google Search Grounding)
- services/openclaw_strategist_service.py:40 (場景 #2/3/4: 週/月/年報)
- services/code_review_pipeline_service.py:46 (場景 #5: 100K+ token diff)
- services/elephant_alpha_orchestrator.py:88 (場景 #6: EA HITL)
- routes/openclaw_bot_routes.py:98 (場景 #7: PPT 簡報)

Phase 6 A12 — 憲法級 ADR 三份
- ADR-028「LLM 路由統一準則」(269 行)
  - 5 大支柱:三主機級聯 / Ollama 優先 / 雙塔分工 / Gemini 鎖 7 場景 / 可觀測性
  - 8 個 provider 白名單(DB CHECK 對齊)
  - 30+ caller 名單分「已實作 / 規劃中」
- ADR-029「Hermes-First 雙塔分工」(222 行)
  - 12 項職責重劃表 + A7/A8/A10 落地對照
  - Gemini 月支出 -23.5%(critic 第 3 輪 B5 算術修正)
- ADR-027 附錄(+69 行)
  - 三主機架構(Primary/Secondary/Fallback)
  - 4 條獨立 fallback 鏈
  - 廢止「188 Ollama」概念
- README 索引更新

A11 critic 第 3 輪修補:5 BLOCKER 全清
- B1: 行數 1831 → 2677 (含 baseline 對照)
- B2: 場景 #4 行號 759/1267 → 1102/1628 + annual 不存在註明
- B3: 虛構 caller 改實存(ea_hitl_prefetch → ea_engine 等)
- B4: 白名單三層對齊(DB 8 = ADR 8 = token_report 補 ollama_secondary)
- B5: KPI 算術 50→38 = -23.5% 重核

services/telegram_templates.py: A5 daily_token_report() 函數
services/mcp_collector_service.py: 加 LOCKED-GEMINI 註解
services/elephant_alpha_orchestrator.py: 加 LOCKED-GEMINI 註解

103/103 unit test 全綠(zero regression)

Operation Ollama-First v5.0 / Phase 4 A10 + Phase 5 + Phase 6 A12

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

12 KiB
Raw Permalink Blame History

ADR-029: Hermes-First 雙塔分工

  • Status: Accepted
  • Date: 2026-05-03
  • Decision Maker: 統帥
  • Author: Operation Ollama-First v5.0Codex / A12 planner
  • Related: ADR-001三 Agent 自主學習分工、ADR-002pgvector、ADR-018四 Agent 控制面、ADR-019Telegram Agentic Layer、ADR-027Primary Ollama on GCP、ADR-028LLM 路由統一準則)

Context

ADR-001 / ADR-018 把 Hermes 定位為「L1 Observer / Embedding」、OpenClaw 定位為「L3 Strategist」但實作上的權重失衡與成本失衡讓「分工」變成「OpenClaw 全包」。

失衡證據(戰役 v5.0 Phase 0 audit

  1. 程式碼體積失衡

    • services/openclaw_strategist_service.py2677 行HEAD 起 1831 行 + Phase 3/4 增量 846 行)
    • services/hermes_analyst_service.py607 行
    • 比率 4.4×,但 Hermes 的呼叫頻率高 OpenClaw 約 100 倍
  2. 成本失衡

    • OpenClaw 月燒 Gemini ≈ 50M tokens(估算依 phase0 audit caller 流量推算)
    • Hermes 月燒 Ollama ≈ 30M tokens,邊際成本 $0
    • 換句話說Hermes 跑了 60% 流量 = $0OpenClaw 跑了 40% 流量 = 全部 Gemini 帳單
  3. 使用者主入口 = Telegram但 Telegram NL 走 OpenClaw

    • 統帥每日數十次答題從 Telegram 走 routes/openclaw_bot_routes.py:6784-6843 三層 fallbackOllama → Gemini → NIM
    • audit ID #29/30/31 顯示 OpenClaw Bot Q&A 是 Gemini 月支出第二大來源
    • ADR-019 的 Agent-First Conversation Layer 把所有用戶輸入導向 openclaw_decide(),更放大 OpenClaw 流量
  4. 戰略 / 戰術層職責混雜

    • 「每日營運摘要」是高頻戰術(每日 09:00卻走 OpenClaw Gemini → 成本最高頻率最高
    • 「KPI 計算」是規則引擎可解的純運算,卻丟給 LLM 寫敘事
    • 「Q&A」涵蓋從「上週業績多少」戰術到「下季品類布局建議」戰略全部走同條鏈
  5. Phase 3 A7 已局部驗證

    • 戰役 v5.0 Phase 3 已把 OpenClaw Q&A 第一響應切到 qwen3:14bfeature flag保留 Gemini 作 fallback
    • 該變更顯示「Hermes-tier 模型接戰術 Q&A」是技術可行的

ADR-018 已定四 Agent 角色,但未量化「誰處理高頻流量、誰處理低頻戰略」;本 ADR 是 ADR-018 的成本驅動補述,把 Hermes 從「Observer」升格為「主入口」OpenClaw 縮回「鎖定戰略場景的副引擎」。


Decision — 雙塔分工Twin-Tower

Hermes 主塔L1 戰術 / 高頻 / Ollama-only

  • 定位:所有 Telegram NL / 競價偵測 / 日常摘要 / KPI 計算 / 第一響應 Q&A 的單一入口
  • 資源:三主機 Ollama 級聯ADR-028 支柱 1邊際成本 0
  • 模型hermes3:latest(意圖分類 / 競價)+ qwen3:14bQ&A 第一響應Phase 3 已切)
  • 降級Ollama 失敗 → 規則引擎兜底ADR-004 已定)→ 模板化回應,不直接升 Gemini
  • 不可越界:不寫戰略長文(≤ 200 字)、不做 Web Grounding、不做 vision

OpenClaw 副塔L3 戰略 / 低頻 / 鎖定 5 個 Gemini 場景)

  • 定位:產生月/年報敘事、PPT 顧問深度分析、Code Review 高階評估、EA HITL pre-fetch、複雜 SKU 推理
  • 資源Gemini 2.5 Flash 主NIM llama-3.3-nemotron-super-49b-v1.5 fallbackADR-004
  • 觸發頻率:日報 1×/日 / 週報 1×/週 / 月報 1×/月 / Code Review 部署觸發 / EA HITL escalation 觸發
  • 不可越界:不接 Telegram 第一響應(一律先過 Hermes信心 < threshold 才升級)

升級條件Hermes → OpenClaw

由 Hermes 主塔判定是否需要升級:

  1. 意圖分類為「戰略性問題」如「明年品類規劃」「Q3 競品深度分析」)
  2. 複雜 SKU 推理且信心分數 < 0.65Hermes self-assessment
  3. 使用者明確要求「深度報告」Telegram menu 點 cmd:strategy / cmd:annual / cmd:competitor
  4. EA escalation 事件ADR-021 已定)

升級時 OpenClaw 必須拿到 Hermes 已有的 context意圖 / 信心 / 既有摘要),不重複呼叫 Ollama。


職責重劃表(戰前 vs 戰後)

# 任務 戰前 戰後 對應戰役 task
1 競價威脅偵測(每 4h Hermes Ollama Hermes Ollama 維持
2 意圖分類Telegram NL Hermes Ollama Hermes Ollama 維持
3 每日營運摘要 OpenClaw Gemini每日 1× Hermes 模板 + Gemini 200 字洞察 A8
4 KPI 計算(業績 / 庫存 / 達成率) OpenClaw Gemini Hermes 規則引擎(純運算) A8
5 Q&A 第一響應Telegram OpenClaw Gemini → NIM → 字面 fallback Hermes qwen3:14b → 信心低升 Gemini A7已落地
6 複雜 SKU 推理 OpenClaw Gemini Hermes 信心 < 0.65 → OpenClaw Gemini A7 條件分支
7 PPT 簡報深度分析 OpenClaw Gemini OpenClaw Gemini 鎖定
8 週/月/年報敘事 OpenClaw Gemini OpenClaw Gemini 鎖定
9 Code Review 高階評估 OpenClaw Gemini OpenClaw Gemini 鎖定
10 EA HITL pre-fetch Hermes OllamaADR-021 Hermes Ollama 維持escalation 走 OpenClaw Gemini
11 Meta 自審 OpenClaw 每 6h OpenClaw 每 24h(降頻 4× A10
12 規則引擎兜底 HermesADR-004 Hermes 維持

淨效果critic-A11 B5 修補:算術重核):

  • 任務 3/4/5 從 OpenClaw Gemini 遷移至 Hermes Ollama → 月省 ~9.5M Gemini tokensA7+A8 試算)
  • 任務 11 降頻Meta 自審 6h → 12:00→ 月省 ~2.25M Gemini tokensA10 實測超預估)
  • 合計月省 ~11.75M tokens50M → 38.25M = -23.5%
  • Hermes 流量從 ~30M tokens/月 → 預估 ~120M tokens/月(+400%,成本不變

A7 / A8 / A10 落地對照

Task 範圍 狀態 對應檔案
A7 OpenClaw Q&A → qwen3:14bfeature flag Phase 3 完成,待 Phase 4 黃金集 A/B 驗證 services/openclaw_strategist_service.py Q&A 入口
A8 Hermes daily 摘要 + KPI 規則引擎 規劃中Phase 4 services/hermes_analyst_service.py 新增 daily_summary / kpi_compute 方法
A10 OpenClaw Meta 自審降頻 + 程式瘦身 -29% 規劃中Phase 7-8 services/openclaw_strategist_service.py 拆出戰術層遷移至 Hermes

預期效益(量化)

指標 戰前 戰後 變化
Gemini 月支出tokens ~50M ~38.25M -23.5%
OpenClaw 程式碼行數 2677HEAD 1831 + Phase 3/4 增量) Phase 4 +18 行A10 保守抽出) Phase 4 行數目標未達;主戰果 = Meta 降頻
Hermes 流量tokens ~30M ~120M +400%$0
Telegram NL 第一響應延遲 p50 ~2.5sGemini ~1.2sOllama 本地) -52%(待 ai_calls 實測)
戰術層 fallback 鏈深度 3Gemini→NIM→字面 2Hermes→規則引擎 -33%
月成本Gemini API baseline -23.5% 戰役 v5.0 KPI

上述數字為 Phase 0 audit 推算Phase 5 報表上線後以 ai_calls 實測值修訂。


Alternatives Considered

方案 不採用原因
A. 維持 ADR-018 現狀OpenClaw 全包) Gemini 月支出無上限增長Telegram NL 延遲 p50 ≥ 2.5s 體驗差Hermes 程式碼長期被冷凍
B. OpenClaw 全切 Ollama廢 Gemini 月/年報品質下降 10-20%phase0_research Section 1Code Review / PPT vision 補不齊繁中商業敘事短板TMMLU+ 論文)
C. 把 Hermes 升格 L3、廢 OpenClaw OpenClaw 已有 KM 沉澱 / Meta 自審 / 戰略架構,砍掉等於拋棄 1.8% → 80% 觀測能力ADR-019ADR-018 四 Agent 控制面被破壞
D. 引入第五個 Agent 接戰術層 增加心智負擔Hermes 已是現成 L1 Observer升格成本最低統帥 FinOps 視角不偏好新增複雜度
E. 全部走 NIM避開 Gemini 帳單) NIM 80 calls/day 配額硬限,月/年報已經會爆NIM 模型品質 < Gemini 2.5 Flash

Consequences

正面

  1. 成本下降 23%:戰役 v5.0 KPI 第一目標達成。
  2. Telegram NL 延遲減半:本地 Ollama 三主機級聯 vs Gemini API round-trip。
  3. Hermes 體質升級從「Observer」升「主入口」未來 Phase 11 RAG 攔截可直接接 Hermes 流量。
  4. 程式碼瘦身A10 採保守抽出2 個 helper行數 -25% 目標未達;主戰果為 Meta 降頻(月省 2.25M tokens。深度瘦身延至 Phase 7+。
  5. ADR-019 真正落地openclaw_decide() 第一響應改走 Hermesagent suggestion shortcut 不再 = OpenClaw 全包。

負面

  1. A7 切換有黃金集 A/B 風險qwen3:14b 繁中短板若實測差距 > 30%,需走 Plan BLlama-3-Taiwan-70B 或退回 Gemini 加 prompt cache
  2. A10 重構工程量大A10 已執行Phase 4採保守抽出避險4 個報告函數結構差異大深度瘦身daily_summary / kpi_compute 遷移至 Hermes需獨立 Phaserefactor-specialist 範圍。
  3. Hermes 變主入口後故障半徑放大:原本 Hermes 掛 = 規則引擎兜底;現在掛 = 60% Telegram NL 體驗劣化。需強化 mark_unhealthy + 三主機級聯ADR-027 / ADR-028

風險與緩解

風險 機率 緩解
qwen3:14b 繁中黃金集 A/B 紅燈 Phase 4 跑 50 題繁中商業 Q&A 黃金集;< 0.75 BERTScore 自動 fallback Gemini
Hermes 故障 = NL 體驗崩 三主機級聯 + mark_unhealthy 30sADR-028 支柱 1規則引擎兜底ADR-004
A8 daily 摘要品質 < 戰前 Hermes 模板 + Gemini 200 字洞察混合;不是純 Hermes 全自動
OpenClaw 重構引入 regression A10 走 refactor-specialist + 完整 regression testfeature flag 灰度

降級策略

  • A7 feature flag off → 退回 OpenClaw Gemini Q&A
  • A8 Hermes daily 失敗 → 走原 OpenClaw Gemini daily保留代碼路徑直至 Phase 8 確認穩定)
  • 三主機全掛 → 規則引擎兜底 + Telegram 模板化告警

Verification

V1流量分布

-- Hermes vs OpenClaw 月流量比
SELECT
  CASE
    WHEN caller LIKE 'hermes%' THEN 'hermes'
    WHEN caller LIKE 'openclaw%' THEN 'openclaw'
    ELSE 'other'
  END AS tower,
  SUM(input_tokens + output_tokens) AS total_tokens,
  COUNT(*) AS calls,
  SUM(cost_usd) AS cost
FROM ai_calls
WHERE called_at >= NOW() - INTERVAL '30 days'
GROUP BY 1 ORDER BY total_tokens DESC;
-- 期望hermes tokens ≥ 4× openclaw tokensopenclaw cost > hermes costhermes = $0

V2A7 切換驗證

-- Q&A 第一響應應 ≥ 80% 走 Hermes / qwen3
SELECT model, COUNT(*) AS calls,
       ROUND(100.0 * COUNT(*) / SUM(COUNT(*)) OVER (), 1) AS pct
FROM ai_calls
WHERE caller IN ('openclaw_qa', 'hermes_qa', 'openclaw_bot_main')
  AND called_at >= NOW() - INTERVAL '7 days'
GROUP BY model ORDER BY calls DESC;
-- 期望qwen3:14b + hermes3 合計 ≥ 80%

V3Gemini 月支出

  • 每月 1 日 token report Section 4「by provider 月成本」對比 baseline 月份
  • 預期 gemini provider 月成本下降 ≥ 20%

V4A8 / A10 上線

  • Phase 4 後 caller='hermes_daily_summary' 應每日 1 筆出現於 ai_calls
  • Phase 8 後 services/openclaw_strategist_service.py 行數 ≤ 1300

References

  • ADR-001 三 Agent 自主學習分工戰役起點Hermes/NemoTron/OpenClaw 原始定義)
  • ADR-002 pgvector 唯一向量庫Hermes embedding 落點)
  • ADR-004 NemoTron fallback chainOpenClaw NIM 鏈來源)
  • ADR-018 四 Agent 控制面(本 ADR 細化的 L1/L3 角色)
  • ADR-019 Telegram Agentic LayerHermes 主入口落地路徑)
  • ADR-021 EA HITL pre-fetchHermes 預跑 5s timeout 設計)
  • ADR-027 Primary Ollama on GCPHermes 主塔的硬體依託)
  • ADR-028 LLM 路由統一準則(雙塔分工是支柱 3
  • docs/phase0_audit_report_20260503.md34 caller 流量分布)
  • docs/phase0_research_report_20260503.md Section 1qwen3:14b vs Gemini 品質評估)
  • 相關 memoryproject_three_agent_division.mdfeedback_agent_action_ladder.mdreference_telegram_endpoints_map.md