OoO
bd32e04dad
CD Pipeline / deploy (push) Successful in 3m2s
feat(p25): 反饋環深化 — caller-level quality 趨勢追蹤 + ROI 月報整合
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
..
2026-04-19 01:21:13 +08:00
2026-05-03 23:05:38 +08:00
2026-04-29 23:29:45 +08:00
2026-04-30 10:32:43 +08:00
2026-04-29 23:57:36 +08:00
2026-05-03 23:04:58 +08:00
2026-04-19 01:21:13 +08:00
2026-04-29 23:10:27 +08:00
2026-05-03 23:31:30 +08:00
2026-04-30 10:12:43 +08:00
2026-04-29 23:02:06 +08:00
2026-05-01 16:34:13 +08:00
2026-05-04 10:27:35 +08:00
2026-05-01 14:46:49 +08:00
2026-05-03 23:31:30 +08:00
2026-05-02 23:44:01 +08:00
2026-05-01 20:56:17 +08:00
2026-04-30 14:45:40 +08:00
2026-05-04 10:27:35 +08:00
2026-04-30 23:53:23 +08:00
2026-04-30 14:29:40 +08:00
2026-05-01 14:09:54 +08:00
2026-04-30 13:59:12 +08:00
2026-04-19 01:21:13 +08:00
2026-04-19 01:21:13 +08:00
2026-04-29 23:26:02 +08:00
2026-04-19 01:21:13 +08:00
2026-05-04 11:12:52 +08:00
2026-05-02 15:01:55 +08:00
2026-05-01 21:13:18 +08:00
2026-04-29 22:37:20 +08:00
2026-04-30 14:12:21 +08:00
2026-04-30 14:12:21 +08:00
2026-04-30 00:06:24 +08:00
2026-05-01 16:34:13 +08:00
2026-04-19 01:21:13 +08:00
2026-05-02 15:01:55 +08:00
2026-04-29 22:37:20 +08:00
2026-05-04 09:16:39 +08:00
2026-05-04 10:54:12 +08:00
2026-05-04 10:27:35 +08:00
2026-05-04 09:34:21 +08:00
2026-04-30 14:07:10 +08:00
2026-05-02 12:00:34 +08:00
2026-04-19 01:21:13 +08:00
2026-04-29 22:56:00 +08:00
2026-05-03 23:05:38 +08:00
2026-04-19 01:21:13 +08:00
2026-04-30 10:24:15 +08:00
2026-05-03 23:05:11 +08:00
2026-05-04 10:07:33 +08:00
2026-05-02 12:01:04 +08:00
2026-05-02 16:13:43 +08:00
2026-05-02 12:01:04 +08:00
2026-05-03 23:30:47 +08:00
2026-05-03 23:05:38 +08:00
2026-05-03 23:05:38 +08:00
2026-05-02 15:01:55 +08:00
2026-05-02 15:01:55 +08:00
2026-04-29 22:37:20 +08:00
2026-05-01 14:46:49 +08:00
2026-05-04 10:27:35 +08:00
2026-05-01 14:46:49 +08:00
2026-05-01 20:48:28 +08:00
2026-05-03 23:56:12 +08:00
2026-05-03 23:56:12 +08:00
2026-04-19 01:21:13 +08:00
2026-05-04 11:04:14 +08:00
2026-05-02 15:01:55 +08:00
2026-05-02 12:01:04 +08:00
2026-05-03 23:04:58 +08:00
2026-05-02 15:59:54 +08:00
2026-04-19 01:21:13 +08:00