OoO
|
4e6e9bfe5d
|
綁定自動匯入日期查詢參數
|
2026-05-13 10:28:48 +08:00 |
|
OoO
|
5625032a8d
|
記錄 AI caller registry 匯入失敗
CD Pipeline / deploy (push) Successful in 57s
|
2026-05-13 10:04:45 +08:00 |
|
OoO
|
0a75d11a28
|
記錄 Claude 成本節流檢查失敗
CD Pipeline / deploy (push) Successful in 59s
|
2026-05-13 10:03:13 +08:00 |
|
OoO
|
f49413e78a
|
記錄 EA short-circuit 遙測失敗
CD Pipeline / deploy (push) Successful in 56s
|
2026-05-13 10:01:46 +08:00 |
|
OoO
|
c300e496c5
|
記錄 ROI 月報反饋區塊失敗
CD Pipeline / deploy (push) Successful in 55s
|
2026-05-13 10:00:04 +08:00 |
|
OoO
|
ba8510eac7
|
補齊 MCP 早退狀態
CD Pipeline / deploy (push) Successful in 57s
|
2026-05-13 09:40:55 +08:00 |
|
OoO
|
d15b2215f1
|
細分 MCP 呼叫遙測狀態
CD Pipeline / deploy (push) Has been cancelled
|
2026-05-13 09:35:27 +08:00 |
|
OoO
|
2068a3719d
|
修正 Telegram 分類按鈕預設 callback
CD Pipeline / deploy (push) Successful in 55s
|
2026-05-13 09:27:34 +08:00 |
|
OoO
|
44eb36992e
|
補上 MCP filesystem 唯讀白名單
CD Pipeline / deploy (push) Successful in 55s
|
2026-05-13 09:26:12 +08:00 |
|
OoO
|
36d0e5d5f3
|
標記 RAG 命中節省 LLM 呼叫
CD Pipeline / deploy (push) Successful in 56s
|
2026-05-13 09:21:50 +08:00 |
|
OoO
|
f2b91beb61
|
記錄 RAG 人工審核者 hash
CD Pipeline / deploy (push) Successful in 58s
|
2026-05-13 09:13:29 +08:00 |
|
OoO
|
8087d13e31
|
補上 MCP DB writer 失敗診斷
CD Pipeline / deploy (push) Successful in 57s
|
2026-05-13 09:10:28 +08:00 |
|
OoO
|
4f62480bdb
|
串接 AutoHeal 共用 SSH helper
CD Pipeline / deploy (push) Successful in 56s
|
2026-05-12 23:53:32 +08:00 |
|
OoO
|
c4d39cf544
|
串接 AiderHeal 共用 SSH helper
CD Pipeline / deploy (push) Has been cancelled
|
2026-05-12 23:52:28 +08:00 |
|
OoO
|
83e7e0cceb
|
移除誤入 UI commit 的非前端檔案
CD Pipeline / deploy (push) Has been cancelled
|
2026-05-12 23:52:25 +08:00 |
|
OoO
|
eb9cac0d19
|
改善活動看板手機導覽排版
CD Pipeline / deploy (push) Successful in 57s
|
2026-05-12 23:50:18 +08:00 |
|
OoO
|
caa6263872
|
同步 incidents 相容欄位寫入
CD Pipeline / deploy (push) Successful in 56s
|
2026-05-12 23:31:33 +08:00 |
|
OoO
|
14c5349b69
|
補齊 AI 觀測表 ORM 與 embedding 簽名
CD Pipeline / deploy (push) Successful in 56s
|
2026-05-12 23:13:20 +08:00 |
|
OoO
|
fccc80858d
|
修復 Wave 0 阻塞與 market intel 入庫
|
2026-05-12 22:49:56 +08:00 |
|
OoO
|
30a173cf69
|
統一全站暖色視覺與市場情報骨架
CD Pipeline / deploy (push) Successful in 58s
|
2026-05-06 20:24:46 +08:00 |
|
OoO
|
153e4c9734
|
fix(observability): revert unrelated quick review commit files
CD Pipeline / deploy (push) Successful in 58s
|
2026-05-06 19:50:52 +08:00 |
|
OoO
|
308efdce25
|
chore(observability): clarify quick review completion copy
CD Pipeline / deploy (push) Successful in 1m4s
|
2026-05-06 19:49:28 +08:00 |
|
OG T
|
0904a60237
|
fix(scheduler): quiet cold-start noise gates
CD Pipeline / deploy (push) Successful in 1m29s
|
2026-05-06 00:31:30 +08:00 |
|
OG T
|
f6a2a05e3f
|
fix(aiops): treat openclaw strategy actions as advisory
CD Pipeline / deploy (push) Has been cancelled
|
2026-05-05 13:49:36 +08:00 |
|
OoO
|
7a10d27d61
|
feat(p53): K8s Nginx Proxy 支援 — host_label/provider_tag 補完
CD Pipeline / deploy (push) Has been cancelled
問題:
K8s 內網無法直連 GCP 公網 11434,所以 110 跳板架了 Nginx Proxy
轉發 11435/11436 到 GCP-A/GCP-B。但 services/ollama_service.py 的
get_host_label() 只看 IP substring(34.143.170.20 / 34.21.145.224),
K8s 環境會 fallback 到「未知」造成觀測台主機標籤錯亂。
修補:
- services/ollama_service.py::get_host_label
新增:
192.168.0.110:11435 → "GCP-SSD(via Nginx 110)"
192.168.0.110:11436 → "GCP-SSD-2(via Nginx 110)"
保留:直連 GCP / 111 / 188 / localhost 既有判斷
- services/ollama_service.py::get_provider_tag(新函式)
統一 provider 標籤判斷(之前散落 code_review_pipeline 等多處重寫):
GCP 直連 + Nginx 11435 → 'gcp_ollama'
GCP-B 直連 + Nginx 11436 → 'ollama_secondary'
111 → 'ollama_111'
其他 → 'ollama_other'
跨環境統一:ai_calls.provider 在 docker-compose / K8s 都記同一 tag,
跨環境統計不分裂。
- services/code_review_pipeline_service.py:233
改用統一 get_provider_tag(),移除原本 hardcode 的 if/else IP 判斷。
- k8s/02-configmap.yaml(user 已改)
OLLAMA_HOST_PRIMARY = http://192.168.0.110:11435 (Nginx → GCP-A)
OLLAMA_HOST_SECONDARY = http://192.168.0.110:11436 (Nginx → GCP-B)
OLLAMA_HOST_FALLBACK = http://192.168.0.111:11434 (內網)
driver test:
http://34.143.170.20:11434 → GCP-SSD / gcp_ollama
http://192.168.0.110:11435 → GCP-SSD(via Nginx 110)/ gcp_ollama
http://192.168.0.111:11434 → 111 備援 / ollama_111
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
2026-05-05 01:09:56 +08:00 |
|
OoO
|
822789c810
|
feat(p49): Telegram 補完 9 頁對應 + daily summary 加商業面未跟進警示
CD Pipeline / deploy (push) Successful in 2m58s
M-B: Telegram 對應從 6/9 → 9/9
新增 3 個 cmd handler,對應 Phase 45-48 的 3 個新觀測頁:
- cmd:obs_overview — 一頁式總覽(三主機 24h + AI 呼叫 + 月成本 + 待審 episode)
- cmd:obs_orchestration — Agent 編排矩陣(4 Agent × Models 24h 數字)
本地 Ollama % / RAG 命中 % / 錯誤率 + cost
- cmd:obs_business — 商業面 × AI(價格決策 7d by strategy
+ 未跟進機會 + Outcomes verdict 30d)
services/openclaw_bot/menu_keyboards.py::_submenu_observability 升級為 9 項
M-C: daily summary(每日 09:30)加商業面警示
- 從 ai_price_recommendations × action_plans 跨表 JOIN
偵測 high-confidence (≥0.7) 卻無對應 action_plan 的「機會流失」
- 7d 內若有未跟進,daily summary 自動標 ⚠️ 警示
- 對應 Phase 48 business_intel 頁同個邏輯,閉環推送
inline keyboard 升級:日報附 6 個入口(總覽/編排/商業面/主機/AI/預算),
不再只有 4 個
Phase 38→49 累計 14 commits。觀測台戰役完整收官:
- 9 頁全部對應 Telegram cmd
- DB 22/22 = 100% 全覆蓋
- 6 個 L2 一鍵 + 3 種主動推送(即時/異常/日常)
- 日報含商業面警示
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
2026-05-04 20:00:15 +08:00 |
|
OoO
|
5935a6512c
|
feat(p38): Telegram 補 4 個 AI 觀測台命令(B-3 完成)
CD Pipeline / deploy (push) Successful in 2m31s
統帥盤點要求:6 個觀測頁是否都有 Telegram 對應?
盤點結果:promotion_review 已有 (pg_ok/pg_no inline button),剩 4 個缺。
新增 4 個 cmd handler 對應 4 個觀測頁面:
1. cmd:obs_ai_calls — AI 呼叫總覽(24h)
- 總呼叫 / Token / cost / errors / RAG 命中 / cache 命中
- Top 5 provider 分組
2. cmd:obs_health — 主機健康監控
- 三主機 GCP-A / GCP-B / 111 即時 HTTP probe
- 過去 24h uptime % + 平均 response_ms(讀 host_health_probes)
3. cmd:obs_budget — 預算控管
- 當月 spent vs budget 各 provider
- 超 alert_pct 自動標記 ⚠️ / 超 100% 標記 🚨
4. cmd:obs_quality — Caller 反饋趨勢
- 過去 30 日 avg_score 最低 8 名
- 含 thumbs_up/down + trend 圖示
- 含 智能建議(feedback_quality_tracker)
UI/UX:
- main_menu_keyboard 加「🛰 AI 觀測台」入口
- 新 _submenu_observability() 在 menu_keyboards.py
- _SUBMENUS 註冊 'observability' key
- titles 映射加 observability 標題
- 4 個命令 cross-link(彼此互通 + 返回主選單)
Telegram 6/6 對應達成:
- promotion_review: pg_ok/pg_no inline button (既有)
- ai_calls: cmd:obs_ai_calls (新增)
- host_health: cmd:obs_health (新增)
- budget: cmd:obs_budget (新增)
- quality_trend: cmd:obs_quality (新增)
- ppt_audit: 既有「有 issues 才推 Telegram」推送行為(不需查詢命令)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
2026-05-04 18:58:30 +08:00 |
|
OoO
|
0b13055466
|
feat(p38): host_health + ppt_audit DB 持久化(B-1 + B-2)
統帥要求:
1. 所有 6 個觀測頁的功能和數據都要完整寫入資料庫儲存
2. Ollama 切 GCP 順序 GCP-A → GCP-B → 111
盤點結果:
- 4/6 頁面已有 DB 表(ai_calls / learning_episodes / rag_query_log / ai_call_budgets)
- 2/6 頁面是即時查詢無歷史:host_health(HTTP probe)、ppt_audit(os.listdir)
- Ollama 99% 已合規,僅 1 處過時註解
修補(B-1):
- services/code_review_pipeline_service.py:207 註解更新
「直呼內網 Ollama (192.168.0.188)」→ 「走 resolve_ollama_host 三主機級聯 ADR-027」
新增(B-2):
- migrations/029_create_host_health_probes.sql
- 三主機健康歷史表(label/url/healthy/response_ms/error_msg)
- 索引:probed_at / (host_label, probed_at)
- 30 天保留(cron 清理)
- migrations/030_create_ppt_audit_results.sql
- PPT 視覺審核結果表(status/issues_count/issues_found JSONB/confidence)
- 索引:audited_at / pptx_filename / failed-only partial
- routes/admin_observability_routes.py:host_health_dashboard
- 每次 probe 寫入 host_health_probes(失敗安全)
- 新增 24h 健康趨勢卡片(uptime % / 平均 ms)
- routes/admin_observability_routes.py:ppt_audit_history
- 從 ppt_audit_results 讀過去 7 日 audit 紀錄
- 顯示審核時間/檔名/結果/問題數/信心度/耗時
- services/ppt_vision_service.py:check_ppt_file
- 新增 _persist_audit_result() 跑完寫入 DB(status/issues/confidence/duration)
- 失敗安全:DB 寫入失敗只 log warning,不擋主流程
- templates/admin/host_health.html + ppt_audit_history.html
- 新增「24h 健康趨勢」card(host_health)
- 新增「視覺審核歷史紀錄」card(ppt_audit)
DoD:
- 程式碼語法 ✓
- Jinja 平衡 ✓
- 失敗安全(DB 寫入或讀取失敗都不擋頁面渲染)✓
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
2026-05-04 18:55:39 +08:00 |
|
OoO
|
72a7c385d5
|
feat(p26): PPT 視覺審核 daily 22:00 cron — minicpm-v 自動掃當天新生 .pptx
CD Pipeline / deploy (push) Successful in 2m54s
Operation Ollama-First v5.0 / Phase 26 — PPT 自我審視整合
services/ppt_vision_service.py 擴充:
- check_ppt_file(pptx_path, max_slides=5) — 整檔視覺檢查
• LibreOffice headless 轉每張 slide 為 png
• 對前 N 張跑 check_image
• 彙總 issues + 平均 confidence
• fail-safe:LibreOffice 不在 / 轉檔失敗 → 回 skip 不阻擋
- audit_recent_ppts(reports_dir, hours=24, max_files=10)
• 掃 reports/ 過去 24h 新生 .pptx(getmtime filter)
• 對每個檔跑 check_ppt_file
• 彙總總 issues
- push_ppt_audit_to_telegram(summary)
• 有 issues 才推 Telegram(避免「無問題」洗版)
• 每檔最多 3 張 slide / 每張 2 個 issue 列出
run_scheduler.py — 每日 22:00 cron
- run_ppt_vision_audit task wrapper
- PPT_VISION_ENABLED=false 時 service 內部 skip(不打 LLM)
設計哲學:
不動既有 5 個 prs.save() 呼叫點(risk 高)→ 改寫獨立 daily cron 集中處理
零侵入 PPT 生成主流程 / 零 risk regression / feature flag OFF 預設
部署需求:
LibreOffice headless(apt install libreoffice)— 不在則 cron task 自動 skip + log
tests/test_ppt_vision_audit.py (9 tests 全綠)
- flag OFF skip / 目錄不存在 / 無 .pptx
- 舊檔(>hours)filter / LibreOffice 不在 fail-safe
- check_ppt_file flag/missing 容錯
- Telegram 推播:無 issues 不推 / 有 issues 推
regression: ppt_vision_service 既有 6 tests 全綠
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
2026-05-04 11:16:11 +08:00 |
|
OoO
|
bd32e04dad
|
feat(p25): 反饋環深化 — caller-level quality 趨勢追蹤 + ROI 月報整合
CD Pipeline / deploy (push) Successful in 3m2s
Operation Ollama-First v5.0 / Phase 25 — 反饋環自主學習深化
services/feedback_quality_tracker.py (180+ 行)
- 純 SQL 統計,零 LLM 成本
- 4 個閾值常數(demote 👎×5/avg<2.5 / promote 👍×10/avg>=4.5)
- compute_caller_quality_trend(days=7) — 取近 N 日各 caller 反饋
- get_caller_recommendations() — 給 token 日報/ROI 月報用
• 規則 1: 👎 ≥ 5 次 → review
• 規則 2: avg < 2.5 + 樣本足 → review
• 規則 3: 👍 ≥ 10 + avg ≥ 4.5 → promote(建議關閉 Gemini fallback)
- should_demote_caller(caller) — 自動降權判斷(戰役預設不啟用)
- render_quality_summary() — 給訊息用 emoji 摘要
ROI 月報整合(services/roi_report_service.py):
- 加 Section 「💬 Caller 反饋趨勢(30 日)」TOP 10 by 最低 avg
- 加 Section 「🔮 智能建議」最多 3 條(review / promote)
- 失敗 swallow 不影響月報主流程
訊息範例:
💬 Caller 反饋趨勢(30 日)
⚠️ openclaw_qa: avg 1.85/5 (👍2 👎8 n=12)
➖ hermes_analyst: avg 3.10/5 (👍5 👎3 n=10)
✅ ppt_gemini: avg 4.75/5 (👍12 👎0 n=15)
🔮 智能建議
⚠️ openclaw_qa: 近 30 日 👎 反饋 8 次 (avg 1.85/5) — 建議統帥檢視 prompt 或切換 model
✅ ppt_gemini: 近 30 日 👍 反饋 12 次 — 可考慮關閉 Gemini fallback 純走 Ollama
tests/test_feedback_quality_tracker.py (10 tests 全綠)
- 4 閾值常數 / DB fail 安全 / 空 trends 容錯
- demote 規則(👎 多次)/ promote 規則(👍 多次)/ neutral 不觸發
- should_demote_caller 樣本不足保護
- trend 分類(positive/negative/neutral/no_data)正確
依 ADR-032 RAG 自主學習迴圈 + ADR-033 護欄 #1
不直接改 caller 行為(避循環自動修正失控),只產出建議給統帥審視。
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
2026-05-04 11:12:52 +08:00 |
|
OoO
|
0476d3ae4e
|
feat(p24): ROI 月報生成器 — 每月 1 日 09:00 推 Telegram
CD Pipeline / deploy (push) Successful in 2m49s
Operation Ollama-First v5.0 / Phase 24 — 戰役 ROI 自動量化
services/roi_report_service.py (200+ 行)
- BASELINE 戰前估算(gemini 50M/$20、nim 5.8M、ollama 30M、total $25/月)
- query_last_month_stats() — SQL 查上月 ai_calls + mcp_calls + rag_query_log
- render_roi_report(stats) — HTML 訊息(含 5 區塊:成本攔截/provider 分布/RAG/MCP+Cache/KPI)
- generate_and_send_roi_report() — 主入口,推 Telegram + 寫 ai_insights 長期記錄
- 達標標記:Gemini -23.5% ✅ / RAG 命中 ≥25% ✅
Telegram 訊息範例:
📊 ROI 月報 2026年04月
💰 成本攔截
Gemini: 35,000,000 tokens / $14.00
vs 戰前: 50,000,000 / $20.00
✅ 攔截: 15,000,000 tokens / $6.00 (30.0%)
🤖 Provider 分布
🧠 RAG 自主學習(含 saved_call / 反饋分數)
🔧 MCP + Cache
📈 戰役 v5.0 KPI ✅ 達標
run_scheduler.py — 每日 09:00 跑(內部判斷月初第 1 日才送)
- run_roi_monthly_report_if_new_month task wrapper
- 失敗 swallow log,不影響其他排程
tests/test_roi_report_service.py (7 tests 全綠)
- BASELINE 必要欄位 / 月份範圍計算 (1月→去年12月)
- 達標訊息含 ✅ + 攔截數字
- 未達標訊息含 ⚠️
- 空 stats 容錯 / DB fail 回空 dict 不 raise
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
2026-05-04 11:04:14 +08:00 |
|
OoO
|
1da7564567
|
feat(p22+23): caller 整合 model_router (sales_copy) + cost_throttle (claude)
CD Pipeline / deploy (push) Has been cancelled
Operation Ollama-First v5.0 / Phase 22.1 + Phase 23 — 路由治理整合
Phase 22.1: services/ollama_service.py generate_sales_copy
- 短文 < 100 字(estimated_length = product_name × 5)→ 走 model_router
- model_router 推算 → 短文 gemma3:4b / 長文 llama3.1:8b
- MODEL_ROUTER_ENABLED=false 時 select_model 直接回 self.model(向下相容)
- router 失敗 swallow(fallback self.model 不影響主流程)
Phase 23: services/anthropic_service.py is_available()
- 新增 cost_throttle 整合:claude provider throttle 時 is_available=False
- caller 看到 False 自動走 Gemini fallback,不送 Claude 請求
- COST_THROTTLE_ENABLED=false 時不影響(戰役預設 OFF)
- cost_throttle 不可用時 try/except 不阻擋(向下相容)
行為對照:
戰前:sales_copy 永遠用 self.model (llama3.1:8b)
戰後(flag OFF):完全相同
戰後(flag ON):商品名 < 20 字 → gemma3:4b 短文,提速 50%
戰前:Claude 燒到月底超預算才告警,無自動節流
戰後(throttle flag OFF):完全相同
戰後(throttle flag ON):claude 月底推估 > 110% → is_available=False
→ caller fallback Gemini 自動省錢
regression: 既有 retry_chain / anthropic / model_router test 全綠
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
2026-05-04 11:00:04 +08:00 |
|
OoO
|
390c32b05d
|
feat(p21): Caller × Context 動態 Model Router + ADR-034
CD Pipeline / deploy (push) Successful in 2m45s
Operation Ollama-First v5.0 / Phase 21 — 動態路由治理
services/llm_model_router.py (160+ 行)
- 純規則引擎,零 LLM 成本(Python lambda predicate)
- 6 caller × 12 條路由規則:
• sales_copy: 短文 < 100 字 → gemma3:4b / 長文 → llama3.1:8b
• hermes_analyst: gap > 20% 或銷量 < -50% → qwen3:14b / 預設 hermes3
• aider_heal: diff > 200 行 → qwen2.5-coder:32b / 預設 7b
• openclaw_qa: query > 200 字或 multi_turn → qwen3:14b / 預設 qwen2.5:7b-instruct
• ppt_vision: minicpm 不健康 → llava / 預設 minicpm-v
• ea_engine: require_chain_of_thought → deepseek-r1:14b / 預設 Gemini
- feature flag MODEL_ROUTER_ENABLED 預設 OFF(向下相容)
- 失敗安全:predicate 例外 skip 到下一條
tests/test_llm_model_router.py (18 tests 全綠)
- T1 flag OFF 不路由
- T2 sales_copy 短/長文路由
- T3 hermes 簡單/複雜 SKU
- T4 aider_heal 簡單/重構
- T5 ppt_vision 主備援
- T6 ea_engine CoT 路由
- T7 predicate 例外容錯
- T8 utility 函數
ADR-034 — Caller × Context 動態 Model Router
- 6 caller 路由規則對應表
- 5 段否決方案(LLM-based / hardcode / 配置檔 / 統一升級)
- Phase 21.2-21.6 戰略性遷移計畫
- V1-V3 驗收 SQL(caller 整合後 model 分布觀察)
關聯:Primary + Secondary 兩台 GCP 已備齊 10 模型(67GB 對稱)支援所有
路由規則;caller 整合可分階段進行(Phase 21.2-21.5)。
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
2026-05-04 10:54:12 +08:00 |
|
OoO
|
002e498648
|
feat(p20+): COST_TABLE 確認 4 新 Ollama 模型(GCP Primary+Secondary 已拉)
CD Pipeline / deploy (push) Successful in 2m52s
Operation Ollama-First v5.0 / Phase 20+ 完整啟動
Primary + Secondary 兩台 GCP 完整對稱(10 模型 / ~67GB 各):
✅ bge-m3:latest 1.2GB Embedding
✅ hermes3:latest 4.7GB Hermes 戰術
✅ qwen2.5-coder:7b 4.7GB AiderHeal 既有
✅ qwen2.5-coder:32b 19.0GB ⭐ AiderHeal 32B 升級
✅ qwen2.5:7b-instruct 4.7GB Q&A 預設
✅ qwen3:14b 9.3GB Q&A / Nemotron 升級
✅ deepseek-r1:14b 9.0GB ⭐ 推理鏈備援
✅ minicpm-v:latest 5.5GB PPT vision 主
✅ llava:latest 4.7GB ⭐ Vision 備援
✅ gemma3:4b 3.3GB ⭐ 輕量任務
ai_call_logger COST_TABLE 確認 4 新模型 + 2 重命名(minicpm-v / llava)
- 解 logger 「unknown model cost」誤報
- 預期啟用:
- qwen2.5-coder:32b → AiderHeal 大型重構(call site 將擴展)
- deepseek-r1:14b → EA HITL 推理(取代部分 Gemini Pro)
- llava:latest → minicpm-v 失敗備援
- gemma3:4b → sales_copy < 100 字輕量任務
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
2026-05-04 10:48:22 +08:00 |
|
OoO
|
c13dc22639
|
feat(p20)+docs: cost auto-throttle + LLM 模型完整評估
CD Pipeline / deploy (push) Successful in 2m44s
Operation Ollama-First v5.0 / Phase 20 + LLM 模型治理
services/cost_throttle_service.py (新檔, 200+ 行)
- evaluate_throttle_status() 每小時 cron 跑
- 查 ai_call_budgets monthly × 累計 spent → 月底線性外推
- 推估 > 預算 110% → 標 throttled(hysteresis:降到 95% 才解除)
- _push_throttle_alerts: 狀態變化推 Telegram
- is_provider_throttled(provider) public API(給 anthropic/gemini caller 啟動 check)
- COST_THROTTLE_ENABLED 預設 OFF(避免戰時誤節流)
run_scheduler.py 加 2 cron + task wrapper
- 每 1 小時:cost_throttle_evaluate
- 每日 00:05:cost_throttle_reset_if_new_month
docs/llm_model_full_evaluation_20260504.md (260+ 行)
- 場景 × 模型對應矩陣(4 大層次)
戰術層 / 戰略層 / 多模態 / 雲端 API
- 本次啟動的追加 4 模型(qwen2.5-coder:32b / deepseek-r1:14b /
llava / gemma3:4b)— Primary + Secondary 並行拉
- Phase 21 路由優化建議(context size + complexity 動態選 model)
- Phase 22 多供應商編排 + cost throttle 整合
- 儲存 / RAM / 延遲評估
- 模型治理 SOP(新增 / 替換 / 淘汰)
- COST_TABLE 對齊(含 deepseek 直連價格)
啟用前置(待統帥):
1. Primary + Secondary 4 模型拉完(背景進行中)
2. .env: COST_THROTTLE_ENABLED=true(觀察 1 週後)
3. ANTHROPIC_API_KEY 設後 Code Review 自動切 Claude Opus 4.7
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
2026-05-04 10:36:56 +08:00 |
|
OoO
|
98063059c2
|
feat(p14-18): PPT vision + DeepSeek 直連 + caller_registry + Hermes 強化 + postmortem
CD Pipeline / deploy (push) Successful in 2m50s
Operation Ollama-First v5.0 / Phase 14-18 全套(statesman 批准全部)
Phase 14 — services/ppt_vision_service.py (新檔, 200+ 行)
- minicpm-v:latest(GCP Primary 已拉 5.5GB,代替 qwen2-vl 不存在)
- check_image(image_path) → VisionResult.issues_found 視覺異常清單
- 走 resolve_ollama_host 三主機 retry + mark_unhealthy
- 繁中強制 system prompt + 結構化解析 ⚠️ marker
- feature flag PPT_VISION_ENABLED 預設 OFF
Phase 15 — services/deepseek_service.py (新檔, 170+ 行)
- DeepSeek API 直連 (api.deepseek.com/v1),OpenAI-compatible
- 取代部分 OpenRouter 路徑(直連便宜 ~30-50% + 延遲低)
- deepseek-chat ($0.014/$0.28) / deepseek-reasoner ($0.14/$2.19)
- feature flag DEEPSEEK_DIRECT_ENABLED 預設 OFF
- DeepSeekResponse 含 input_tokens/output_tokens/duration_ms
Phase 16 — services/llm_caller_registry.py (新檔, 130+ 行)
- CALLER_REGISTRY frozenset 集中管理 35+ 個 caller 名(ADR-028 白名單)
- assert_known_caller(strict=False) 整合到 ai_call_logger __init__
- 不在 registry → log warning(不 raise,保留擴展彈性)
- list_callers_by_service() 分組除錯
- 解 critic-A11 第 3 輪 L4 修補(命名分散三層)
Phase 17 — _is_low_quality_response 4 條新規則(A2 警訊深化)
- 規則 5:純英文回應(中文字元 < 30%)
- 規則 6:thinking-mode 漏洞(<think>...</think> 洩漏)
- 規則 7:重複迴圈偵測(前 50 字出現 ≥ 3 次)
- 規則 8:佔位符未填充({{var}} / [TODO] / <待填>)
Phase 18 — docs/operation_ollama_first_v5_postmortem.md (新檔)
- 戰役完整時間軸(Day 1-2)
- 3 大決策替代分析
- 4 個 critical hotfix 教訓
- Owen 三護欄落地對照
- KPI 達成度(Wave 1 提前 4 天 / Wave 2 提前 10 天)
- 統帥手動清單 + 7 條未來戰役教訓
Phase 13 補強(合併本 commit):
- ai_call_logger COST_TABLE 補 7 個新模型(qwen3:14b / qwen2.5:7b-instruct
/ qwen2.5-coder:32b / qwen2-vl:7b / deepseek-r1:14b / gemma3:4b / minicpm-v)
regression: 214 unit tests 全綠(4:02 跑完),2 skipped
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
2026-05-04 10:19:13 +08:00 |
|
OoO
|
942193db2a
|
feat(p13): OllamaResponse token 補欄 + COST_TABLE 補新模型 + retry 鏈 unit test
CD Pipeline / deploy (push) Successful in 2m41s
Operation Ollama-First v5.0 / Phase 13 補強
(A) services/ollama_service.py — OllamaResponse 加 input_tokens/output_tokens
- A4 Phase 1 已知 limitation 修補:openclaw_bot_main token=0 假數據誤導日報
- generate() 解 prompt_eval_count + eval_count 寫 OllamaResponse
- 影響:ai_call_logger 收到正確 token 數,token 日報 Ollama 占比準確
(B) services/ai_call_logger.py — COST_TABLE 補 GCP 已拉/候選模型
- qwen2.5:7b-instruct (Phase 3 A7 OpenClaw Q&A 預設)
- qwen3:14b (Phase 3 A9 Nemotron + A7 升級候選)
- qwen2.5-coder:32b (Phase 8 候選)
- qwen2-vl:7b (Phase 13+ PPT vision 候選)
- deepseek-r1:14b / gemma3:4b (推理增強 / 輕量)
- 全部 cost=0(Ollama 自架)
- 解 logger.warning「unknown model cost」誤報
(J) tests/test_ollama_retry_chain.py (10 unit tests) — 驗 hotfix e862a90/6572d52
- T1 self.host @property lazy resolve
- T2 explicit host 凍結不 retry
- T3 generate 第一台 timeout → 第二台成功(核心 retry 鏈)
- T4 三主機都失敗 → success=False
- T5 cache 卡同主機 → break 不無限迴圈
- T6 Phase 13 token 解析驗證
- T7-T9 generate_embedding 同類驗證
- T10 mark_unhealthy 清 resolve cache
regression: 全戰役 14 test 檔仍 zero regression
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
2026-05-04 10:07:33 +08:00 |
|
OoO
|
c1fd913a35
|
feat(p10.5): MCP Router 統一介面 + mcp_collector 接 omnisearch L0
CD Pipeline / deploy (push) Successful in 2m55s
Operation Ollama-First v5.0 / Phase 10.5 收尾(ADR-031 落地)
services/mcp_router.py(350 行)— 統一 MCP HTTP 路由
- MCPRouter.call(server, tool, args, caller) 主入口
- TOOL_REGISTRY 白名單:mcp_collector / hermes_analyst / openclaw_strategist
限制 caller × server × tool 組合,防 LLM 亂打
- 4 個 server endpoint env 配置(postgres:3001 / firecrawl:3002 /
omnisearch:3003 / filesystem:3004)對齊 docker-compose.mcp.yml
- 記憶體 cache(1h TTL + LRU 200 筆 + sha256[:16] key)
- fire-and-forget mcp_calls 寫入(async thread)
- PII 保護:input_args 只存 hash + keys 不存原文
- 大小護欄:> 64KB 截斷 + _truncated flag
- health_check() 4 server 狀態
- feature flag MCP_ROUTER_ENABLED 預設 OFF
services/mcp_collector_service.py — _search_topic 加 L0 omnisearch 路徑
- MCP_ROUTER_ENABLED=true 時優先走 self-hosted Tavily / Exa
- omnisearch 失敗自動 fallback 到既有 Gemini Grounding 鏈
- 完整 fallback 鏈(最終態):
L0: omnisearch tavily → omnisearch exa(取代 Gemini Grounding 主路徑)
L1: Gemini 2.0 Grounding(既有,保留為 fallback)
L2: Gemini 1.5 Grounding(既有)
L3: Ollama qwen2.5-coder:7b(既有)
L4: 靜態 fallback_topic_content(既有)
預期收益(mcp-stack deploy + flag ON 後):
- Gemini Grounding 月省 ~70% 成本
- Tavily 1000 free credits/月 + Exa 1000 free,月成本 $0
- ~180 calls/月使用率 18% 可承受 5x 增長
tests/test_mcp_router.py(8 tests 全綠):
- flag OFF 不打 HTTP / 白名單檢查 / cache 命中第二次 / timeout / 500 /
cache key 排序穩定 / health_check / 未知 server
啟用步驟(待統帥 deploy mcp-stack 後):
1. .env 加 MCP_ROUTER_ENABLED=true
2. docker compose -f docker-compose.mcp.yml up -d (188)
3. mcp_router.health_check() 全 200 OK 驗證
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
2026-05-04 09:34:21 +08:00 |
|
OoO
|
97c446303c
|
feat(p11.0): BGE-M3 跨主機一致性驗證 + 每週日 04:30 cron
CD Pipeline / deploy (push) Has been cancelled
Operation Ollama-First v5.0 / Phase 11.0 收尾(ADR-033 護欄 #3 完整落地)
services/rag_service.py 新增:
- verify_embedding_consistency() — 跨三主機 BGE-M3 embedding 一致性驗證
測試文字「momo電商競品分析測試向量一致性檢查」分別呼叫 GCP Primary /
Secondary / 111 三主機,計算兩兩 cosine 距離。
max_diff > 1e-4 視為不一致(模型版本漂移)→ logger.error。
- _cosine_distance() — 純 Python,不依賴 numpy
- fail-safe:< 2 主機可達也回 ok=True(戰時部分主機暫斷不算錯)
run_scheduler.py 新增:
- run_embed_consistency_check task wrapper
- schedule.every().sunday.at("04:30").do(...) — 每週一次足夠
(不需每次啟動驗證,過頻會打三主機 Ollama 浪費)
落地 ADR-033 護欄 #3 完整版:
簽名鎖定(migration 026 embedding_signature 欄位)✅ 既有
程式端簽名計算(rag_service.get_embedding_signature)✅ 既有
RAG 查詢時簽名比對過濾(rag_service._select_hits)✅ 既有
跨主機一致性驗證 cron ✅ 新增 ⭐
既有 14k+ 筆回填 ⏳ 待手動跑 enqueue_missing_insight_embeddings()
regression: 47 unit tests 全綠
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
2026-05-04 09:31:31 +08:00 |
|
OoO
|
84a8c07e4a
|
feat(p11.5): learning_episodes embedding 寫入 — 解鎖 Stage 3 dedup
CD Pipeline / deploy (push) Successful in 2m57s
Operation Ollama-First v5.0 / Phase 11.5 收尾(A4 已知 limitation 補完)
問題:Phase 11 A4 完成時揭露:
> Stage 3 dedup 需 episode 先 embed:目前 LearningPipeline.enqueue 寫入時
> embedding 為 NULL,所有 episode 都會略過 Stage 3 dedup
修補:
- learning_pipeline.enqueue 內 episode INSERT commit 後 enqueue embedding worker
- 用既有 _enqueue_embedding('learning_episodes', episode_id, distilled_text)
- ADR-007 retry queue worker 自動處理(_process_one_embedding 已動態 UPDATE
{target_table},已支援 learning_episodes 表)
- distilled_text 截 4000 字避免 retry queue 表膨脹
- 失敗 swallow,僅 log debug(不阻擋 episode_id 回傳)
落地 ADR-033 護欄 #1 完整版:
Stage 1: quality_score >= 0.7 ✅ 既有
Stage 2: 無幻覺檢測(規則引擎) ✅ 既有
Stage 3: 與既有 insight cosine < 0.95 ✅ 解鎖 ⭐
Stage 4: weight >= 0.8 必經 👍/👎 ✅ 既有
regression: 70 unit tests 全綠(含修正 test_enqueue_returns_id_on_success
配合新增 _enqueue_embedding 的 commit 計數變化)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
2026-05-04 09:16:39 +08:00 |
|
OoO
|
c2124dce00
|
feat(p11+): RAG worker cron — promotion_gate / awaiting_review / expire
CD Pipeline / deploy (push) Successful in 2m53s
Operation Ollama-First v5.0 / Phase 11+ 收尾(ADR-032/033 落地)
services/learning_pipeline.py 新增 2 個 worker 函數:
- process_pending_episodes(batch=50) — 批次處理 pending → can_promote → promote/reject/await
純規則引擎,不跑 LLM(Distiller 純 Hermes 規則)
- push_awaiting_reviews_to_telegram(batch=5) — 推 Stage 4 awaiting_review 到 Telegram
TELEGRAM_ADMIN_CHAT_ID 未設則跳過(fail-safe)
訊息含 episode_id + weight + quality + 600 字截斷文,附 promotion_review_keyboard 👍/👎
run_scheduler.py 加 3 個 cron + 對應 task wrapper:
- 每 5 分鐘 → run_promotion_gate_worker
- 每 30 分鐘 → run_awaiting_review_push
- 每 4 小時 → run_expire_stale_reviews(24h 無回應 → weight=0.5)
設計安全保證:
- RAG_ENABLED=false 時 learning_episodes 為空,3 個 worker 跑空 loop(無害)
- 所有 worker 例外完全吞掉,僅 log error,不影響其他排程
- promote 成功才回 stats['promoted']++,DB 失敗計 errors
完整 RAG 自主學習迴圈閉環:
LLM 結果 → Distiller → learning_episodes (pending)
↓ 每 5 分鐘 worker
PromotionGate 4 階段
↓ approved → 寫 ai_insights → RAG 可檢索
↓ awaiting_review → 每 30 分鐘推 Telegram
↓ 24h 無回應 → 每 4h expire → weight=0.5
↓ 👍 callback → promote → ai_insights
↓ 👎 callback → rejected_human → 永不晉升
仍待 Phase 12+ 完成:
- learning_episodes.embedding 寫入路徑(Stage 3 dedup 解鎖)
- RAG_ENABLED=true 灰度啟用條件(需 100+ episodes + ANTHROPIC_API_KEY)
regression: 70 unit tests 全綠
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
2026-05-04 09:11:27 +08:00 |
|
OoO
|
6572d521ba
|
fix(embed): generate_embedding 三主機 retry — 修同類「111 死則全死」bug
CD Pipeline / deploy (push) Successful in 2m42s
承前 commit e862a90(generate retry)的同類修補:
generate_embedding 之前邏輯:
target_host = host or env or resolve # 一次解析
try: post → mark_unhealthy + return [] # 失敗無 retry
修補後:
caller 顯式 host → 凍結不 retry(向下相容)
caller 走 lazy → 三主機 retry 鏈:
每次 self.host 走 resolve_ollama_host()
失敗 mark_unhealthy + cache 失效 + 取新主機
最多 3 次(避免同主機無限迴圈)
影響範圍:KM embedding worker / RAG query embedding / openclaw_learning
regression: 57 unit tests 全綠
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
2026-05-04 08:56:38 +08:00 |
|
OoO
|
e862a9040c
|
fix(ollama): 解「111 關機 → GCP 也斷」三主機 retry 鏈 + lazy host
CD Pipeline / deploy (push) Successful in 9m14s
統帥 2026-05-04 反饋:「111 關機後,兩台 GCP Ollama 也跟著斷線不可用」
根因(雙 bug 連動):
1. OllamaService.__init__ 凍結 self.host:
`self.host = host or resolve_ollama_host()` 是 instance 級凍結
容器啟動時若 GCP cold start 觸發 fallback 111 → self.host 永遠卡 111
即使 cache 過期,instance 不會重新 resolve
2. generate() 失敗無 retry 鏈:
原邏輯只 mark_unhealthy(self.host) + return failure
沒有「換下一台主機再試」邏輯 → 111 死則全死
修補(雙管齊下):
A. self.host 改 @property:每次存取走 resolve_ollama_host()
- caller 顯式指定(_explicit_host)才凍結
- 內部 _RESOLVE_TTL 120s cache 控制 HTTP probe 成本
B. generate() 三主機 retry 鏈:
for attempt in range(3):
current_host = self.host # property lazy resolve
if attempted → break (避免無限迴圈)
post → success ? return : mark_unhealthy + retry
mark_unhealthy 自動清空 resolve cache,下次 self.host 取新主機
行為對比:
戰前:GCP cold start 卡 111 → 111 關機 → 全部失敗
戰後:GCP cold start 卡 111 → 111 關機 → mark_unhealthy(111) →
self.host 重 resolve → GCP Primary(已暖機)→ 成功
generate_embedding 同類修補延後(caller 多走 explicit host 路徑風險較低)
regression: 36 unit tests 全綠(test_ollama_resolve + test_ai_call_logger)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
2026-05-04 08:42:52 +08:00 |
|
OoO
|
c7d6db31f2
|
feat(p11): RAG 自主學習 + Promotion Gate 4 階段護欄(feature flag OFF)
CD Pipeline / deploy (push) Has started running
Operation Ollama-First v5.0 / Phase 11 / RAG 自主學習迴圈
services/rag_service.py (532 行)
- RAGService.query() — bge-m3 embed + cosine 0.85 threshold + top_k=5
- get_embedding_signature() — v5.0 護欄 #3 一致性檢查 (SHA1[:12])
- fire-and-forget rag_query_log INSERT (不阻塞主流程)
- feedback() — Telegram 👍/👎 寫回 feedback_score
- RAG_ENABLED 預設 OFF(戰前行為不變)
services/learning_pipeline.py (750 行)
- Distiller — 純 Hermes 規則引擎,零 LLM 成本
Quality 規則:MCP >200 字 0.8 / LLM JSON ok 0.9 / TextRank 0.6 / 👍 1.0 / 👎 0.0
- PromotionGate — Owen v5.0 護欄 #1 鐵律
Stage 1: quality_score >= 0.7
Stage 2: 無幻覺檢測(規則引擎,零 LLM)
Stage 3: 與既有 insight 相似度 < 0.95(Stage 3 在 episode embed 後啟用)
Stage 4: weight >= 0.8 必經 Telegram 👍/👎
- expire_stale_reviews() — 24h 無回應自動降級 weight=0.5
- hash_human_approver — Telegram username SHA1[:8] PII 保護
services/hermes_analyst_service.py — 新增 analyze() RAG-first
- RAG hit → return synthesize(不燒 LLM)
- RAG miss → 既有 LLM 路徑 + enqueue learning_episodes
services/openclaw_strategist_service.py — Q&A 入口接 RAG-first
- 不動週/月/年報(敘事報告 RAG hit 機率低)
services/telegram_templates.py
- rag_feedback_keyboard() — 👍/👎 inline keyboard
- promotion_review_keyboard() — Stage 4 人工驗收按鈕
routes/openclaw_bot_routes.py — 3 組 callback handler
- rag_fb:{id}:{score} → rag_service.feedback()
- pg_ok:{episode_id} → PromotionGate.promote()
- pg_no:{episode_id} → PromotionGate.reject()
70 unit tests 全綠 + 全戰役 196 tests zero regression(4:17 跑完)
剩餘 limitations(Phase 12+ 補):
1. learning_episodes.embedding 寫入路徑(Stage 3 dedup 暫 skip)
2. PromotionGate worker cron 未掛
3. Telegram awaiting_review 推播未接(callback handler 已就位)
灰度開啟條件(建議 1 週後):
- ANTHROPIC_API_KEY 設定 + RAG_ENABLED=true + threshold=0.90 保守
- feedback_score >= 4 比率 > 70% → threshold 降至 0.85
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
2026-05-03 23:56:12 +08:00 |
|
OoO
|
943de8466c
|
feat(p7): Anthropic SDK + Claude Opus 4.7 接 Code Review (feature flag OFF)
CD Pipeline / deploy (push) Has been cancelled
Operation Ollama-First v5.0 / Phase 7 Frontier 升級
services/anthropic_service.py (新檔, 226 行)
- AnthropicService 包裝 + ClaudeResponse dataclass
- Ephemeral prompt cache 5 分鐘 TTL(重複 system_prompt 省 90% 成本)
- usage 解析 input/output/cache_creation/cache_read 四欄位
- ANTHROPIC_API_KEY 未設或 SDK 缺失時 is_available()=False 靜默退化
code_review_pipeline_service.py — _openclaw_assess 加 L1 Claude 分支
- CODE_REVIEW_USE_CLAUDE flag (預設 OFF,等 ANTHROPIC_API_KEY 設定後翻 ON)
- 路由:Claude Opus 4.7 (Arena code Elo 1548) → Gemini → ElephantAlpha 三層
- request_id 串鏈不變
ai_call_logger.py COST_TABLE 補 3 個 Claude 模型:
- claude-opus-4-7: $15/$75 per M tokens (程式碼 #1)
- claude-sonnet-4-6: $3/$15 per M tokens (agentic 平衡)
- claude-haiku-4-5: $0.8/$4 per M tokens (輕量快速)
requirements.txt: 加 anthropic>=0.40.0
.env.example: 加 ANTHROPIC_API_KEY / CODE_REVIEW_USE_CLAUDE / CLAUDE_MODEL
52 unit tests 全綠(22 logger + 18 anthropic + 5 routing + 7 security)
啟用步驟(待統帥手動):
1. .env 加 ANTHROPIC_API_KEY=sk-ant-...
2. CODE_REVIEW_USE_CLAUDE=true + restart momo-app
3. 觀察 ai_calls.cache_read_tokens > 0 確認 cache 生效
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
2026-05-03 23:31:30 +08:00 |
|
OoO
|
6aa5bcab88
|
fix(ollama-first): 3 個 feature flag 翻 ON — Ollama 優先、Gemini 殿後
CD Pipeline / deploy (push) Has been cancelled
統帥 2026-05-03 23:30 指令:「免費的優先!最後才是 Gemini」
3 個 flag 預設 false → true(GCP Primary qwen3:14b 已拉好,無阻擋):
1. OPENCLAW_QA_OLLAMA_FIRST=true
→ Telegram 戰略 Q&A 走 qwen3:14b(繁中強制 prompt + Gemini fallback)
→ 預期月省 ~6.7M Gemini tokens(戰前 8.4M × 80%)
2. OPENCLAW_DAILY_HERMES_TEMPLATE=true
→ 日報走 Hermes 模板 + Gemini 200 字洞察(28K → 8K, -71%)
→ 預期月省 ~600K Gemini tokens
3. NEMOTRON_OLLAMA_FIRST=true
→ 威脅分派走 GCP qwen3:14b → NIM 備援 → ADR-004 規則引擎兜底
→ 預期月省 ~5M NIM tokens(解配額痛點)
合計月省 ~12M tokens(與 ADR-029 預估 -23.5% 對齊)
緊急停用:env 變數設 false 即可(保留 fail-safe)
品質風險:A7 Q&A 有 _is_low_quality_response 守門 → 低品質自動 fallback Gemini
Operation Ollama-First v5.0 / Phase 6.5 hotfix #2 / 落地統帥指令
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
2026-05-03 23:28:45 +08:00 |
|
OoO
|
56504ed7c1
|
fix(ea): Hermes-first short-circuit + 消除 EA escalation LLM 幻覺訊息
CD Pipeline / deploy (push) Has started running
統帥 2026-05-03 23:30 反饋:「EA escalation 訊息空洞、浪費 Gemini API」
根因:
1. 燒錢:每個 trigger 先跑 Gemini orchestration,再 prefetch Hermes
Hermes 0 threats 時 → Gemini 已燒,訊息卻空泛幻覺
2. 空泛:fallback 路徑灌 OpenClaw plan 文字 + decision.reasoning
全是「312 SKU / 23% / 14 項任務」LLM 自由發揮,無 DB 鉤住
修補:
A. _execute_autonomous_decision 加 Hermes-first short-circuit
- 價格類 trigger 先跑 Hermes (5s timeout, 免費 Ollama)
- 0 threats → 直接 return,不燒 Gemini orchestration
- 預期 >70% trigger 在此階段攔截,月省 ~3-5M Gemini tokens
- prefetch 結果存入 trigger.conditions 給 orchestrator 用
(避免 orchestrator 又自己編 SKU 數字)
- log_ai_call 記 short_circuit=true 供 token report 統計
B. _escalate_to_human fallback 路徑改極簡訊息
- concrete=Hermes 實證 vs concrete=None 兩條路徑徹底分離
- 有實證 → 完整訊息(含 SKU 流失金額)
- 無實證 → 極簡訊息「⚠️ Hermes 即時數據不可用」+ SQL 查詢指引
不再灌 OpenClaw plan 文字 / decision.reasoning(幻覺源頭)
Operation Ollama-First v5.0 / Phase 6.5 hotfix / ADR-021 遵循收尾
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
2026-05-03 23:26:18 +08:00 |
|
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 |
|
OoO
|
838267c293
|
feat(p1+p3): logger 接 13 caller + Q&A/Nemotron/日報 feature flag 灰度
Phase 1 A4 — 13 個呼叫點接 ai_call_logger(覆蓋率 11.8% → 預估 50%+)
- TOP-1 nemoton_dispatcher: nemotron_dispatch caller (NIM 配額追蹤)
- TOP-2 openclaw_strategist: 4 reports (daily/weekly/monthly/meta) + qa caller
- TOP-3 hermes_analyst: hermes_analyst + hermes_intent (順修 commit 00591c5 殘留 bug)
- TOP-4 code_review_pipeline: code_review_hermes/openclaw/elephant 三鏈 (request_id 串)
- TOP-5 openclaw_bot_routes: openclaw_bot_main/gemini/nim 三層 fallback
Phase 3 A7 — OpenClaw Q&A → qwen3:14b(feature flag OFF)
- OPENCLAW_QA_OLLAMA_FIRST 灰度開關
- 繁中強制 system prompt + Gemini fallback chain
- _is_low_quality_response 品質守門(簡體字檢測 + 拒答訊號 + 結構分數)
- 黃金集 A/B 對照測試框架(10 樣本去 PII)
Phase 3 A8 — OpenClaw 日報 → Hermes 模板(feature flag OFF)
- OPENCLAW_DAILY_HERMES_TEMPLATE 灰度開關
- _compute_daily_kpi 純 SQL + Hermes 規則引擎
- _compute_gemini_insight 精簡 200 字洞察 prompt
- templates/daily_report_v2.j2 + _SafeUndefined 缺欄位優雅降級
- scripts/compare_daily_report_versions.py 雙版本盲測
Phase 3 A9 — Nemotron NIM → qwen3:14b(feature flag OFF)
- NEMOTRON_OLLAMA_FIRST 灰度開關(A2 紅燈:deepseek-r1 假支援,改 qwen3)
- _call_qwen3_dispatch + 既有 NIM tool_calls 解析共用
- 保留 ADR-004「🟡 [降級模式]」Hermes 規則引擎兜底
H6 PII fix — chat_id 進 ai_calls.meta 改 SHA1[:8](4 處 Bot Q&A)
Code Review pipeline — N3 動態 provider tag(gcp/secondary/111)+ A4 logger 三鏈
37 unit tests 全綠(routing 15 + golden 5 + qwen3 8 + daily template 8 + nemotron 1)
Operation Ollama-First v5.0 / Phase 1 A4 + Phase 3 A7+A8+A9
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
2026-05-03 23:05:38 +08:00 |
|
OoO
|
078bf2683c
|
fix(adr-027): Phase 2 — ADR-027 4 破洞修補 + 移除寫死 111
config.py — B1+B2 lazy resolve
- get_ollama_host() 取代 import-time freeze 的 OLLAMA_HOST
- get_embedding_host() 取代 EMBEDDING_HOST
- 主機切換時不需重啟 Python 進程
services/ollama_service.py — B3+B4 三主機級聯
- resolve_ollama_host(primary, secondary, fallback) 三主機級聯
- Primary: 34.143.170.20 (SSD) — GCP 主主機
- Secondary: 34.21.145.224 (SSD) — 同等效能備援
- Fallback: 192.168.0.111 (HDD) — 最後一道防線
- _is_reachable: HTTP /api/version probe 取代 TCP socket(防 process 卡死假活)
- mark_unhealthy(host) 即時失效 cache,30s 內跳過該主機
- 14 unit tests 全綠
services/aider_heal_executor.py — N2
- 移除寫死 192.168.0.111,改用 get_ollama_host()
- AiderHeal 終於遵循 ADR-027 GCP 優先策略
Operation Ollama-First v5.0 / Phase 2 A6
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
2026-05-03 23:05:11 +08:00 |
|