OoO
c2124dce00
CD Pipeline / deploy (push) Successful in 2m53s
feat(p11+): RAG worker cron — promotion_gate / awaiting_review / expire
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
..
2026-04-28 15:26:20 +08:00
2026-05-03 13:10:15 +08:00
2026-04-19 01:21:13 +08:00
2026-05-01 14:02:37 +08:00
2026-04-29 23:41:03 +08:00
2026-04-29 23:57:36 +08:00
2026-05-03 23:31:30 +08:00
2026-04-19 01:21:13 +08:00
2026-04-29 22:56:00 +08:00
2026-05-01 16:34:13 +08:00
2026-04-25 03:30:14 +08:00
2026-05-03 23:05:11 +08:00
2026-05-03 23:31:30 +08:00
2026-04-29 23:41:03 +08:00
2026-05-01 16:34:13 +08:00
2026-04-29 21:35:56 +08:00
2026-05-02 14:34:30 +08:00
2026-05-03 23:31:30 +08:00
2026-05-01 20:56:17 +08:00
2026-04-19 01:21:13 +08:00
2026-04-28 13:57:44 +08:00
2026-04-28 15:37:07 +08:00
2026-04-27 21:28:23 +08:00
2026-05-02 13:07:30 +08:00
2026-04-22 01:12:23 +08:00
2026-05-02 13:09:34 +08:00
2026-05-03 23:26:18 +08:00
2026-05-03 23:06:08 +08:00
2026-04-30 13:59:12 +08:00
2026-04-30 09:33:39 +08:00
2026-05-02 15:01:55 +08:00
2026-04-19 01:21:13 +08:00
2026-04-27 21:11:52 +08:00
2026-05-03 23:56:12 +08:00
2026-05-03 13:10:55 +08:00
2026-04-28 19:42:05 +08:00
2026-05-04 09:11:27 +08:00
2026-04-27 21:28:23 +08:00
2026-05-03 23:06:08 +08:00
2026-04-25 01:42:40 +08:00
2026-04-19 01:21:13 +08:00
2026-04-19 01:21:13 +08:00
2026-05-03 23:28:45 +08:00
2026-04-29 22:48:24 +08:00
2026-04-29 22:37:20 +08:00
2026-05-04 08:56:38 +08:00
2026-04-29 23:10:27 +08:00
2026-05-02 13:04:18 +08:00
2026-05-03 23:56:12 +08:00
2026-04-19 01:21:13 +08:00
2026-04-20 06:09:33 +08:00
2026-04-19 01:21:13 +08:00
2026-04-22 01:12:23 +08:00
2026-05-03 13:10:15 +08:00
2026-05-02 12:00:34 +08:00
2026-05-03 23:56:12 +08:00
2026-04-27 21:28:23 +08:00
2026-05-03 00:03:38 +08:00
2026-05-03 23:56:12 +08:00
2026-05-02 12:01:04 +08:00
2026-05-03 23:04:58 +08:00
2026-04-19 01:21:13 +08:00
2026-04-19 01:21:13 +08:00
2026-04-27 20:34:15 +08:00
2026-04-19 01:21:13 +08:00
2026-05-01 14:20:09 +08:00