補齊 OpenClaw 市場策略 action 相容

This commit is contained in:
OoO
2026-05-31 12:26:17 +08:00
parent 998e0da9b4
commit 291cdf019f
6 changed files with 27 additions and 7 deletions

View File

@@ -4,6 +4,7 @@
================================================================================
【已完成】
- V10.490 新增市場情報 MCP Fetch Result Parser Review 安全預覽 gate只審核操作員貼回的 parser 結構化摘要,對齊 receipt source/path、候選必要欄位、公開 URL、小批次上限與 raw HTML/secret/side-effect 風險API 不讀 artifact、不執行 parser CLI、不抓外站、不寫 DB、不掛 scheduler。
- V10.489 補 PChome 低分同款人工覆核回收與 gate-pass 風險邊界TS6 超美白香氛誘霜 120g/ml、W 修護保養蝸牛特潤修護面膜 6 片、Derma 大地 Eco 植萃護膚油 2 入,從低信心升成 `identity_review` 人工覆核候選Clarins 輕盈美體護理油 vs 身體調和護理油、台塑生醫嬰兒沐浴/洗髮組合數量反轉、isLeaf 私密慕絲香型數量不一致改 hard vetoHOOOME 大理石暖燈 vs 泛稱經典款改留 `variant_selection_review`。正式價差表仍需人工採用才會寫入。Production 已部署 `/health=V10.489`500 筆 read-only audit 由 V10.486 基線 `gate_pass=129 / identity_veto=1 / still_low=370` 收斂為 `gate_pass=124 / identity_veto=4 / still_low=372`。測試:完整 `pytest` 1289 passed / 9 skipped。
- V10.488 新增市場情報 MCP Fetch Run Receipt 安全預覽 gate只審核操作員 dry-run receipt不執行 CLI、不抓外站、不寫 DB。
- V10.486 補 PChome near-threshold 風險邊界NEW DIRECTIONS 甜杏仁油 vs 酪梨油直接 `core_ingredient_line_conflict` hard vetoCOCODOR 經典擴香瓶多款任選 vs generic、KAMERIA 足膜任選三款 vs 單一涼感足膜、Hakugen 白元入浴劑橘盒/綠盒不同變體都保留 `variant_selection_review`,不進可採用 gate。Production 已部署 `/health=V10.486`240 筆 near-threshold audit `gate_pass 83→79`、`identity_veto 0→1`、`still_low 157→160`。測試:`tests/test_marketplace_product_matcher.py`、`tests/test_competitor_match_attempts_persistence.py`、`tests/test_competitor_match_attempt_rescore_audit.py` 通過。
@@ -1183,3 +1184,15 @@ gcloud compute ssh momo-server --zone=asia-east1-a \
* Top 3 商業洞察卡片。
* 點擊卡片後的詳細列表 (Modal)。
* 詳細列表的 Excel 匯出。
================================================================================
【V10.490 OpenClaw 舊策略 Action 相容修補】
================================================================================
2026-05-31:
- 正式日誌觀察到 ElephantAlpha 執行器收到 `agent=openclaw action=generate_market_strategy` 時,被誤判為未知步驟。
- 本次修補將 `generate_market_strategy` 納入既有 OpenClaw advisory no-op 清單,與 `generate_resource_optimization_strategy` 一致:
* 只記錄 skipped warning
* 不觸發 circuit breaker
* 不執行外部策略動作
* 不變更任何價格或正式候選資料
- 已補測試:舊策略 action 可安全跳過,未知 action 仍維持 fail-fast。

View File

@@ -350,7 +350,7 @@ YOUTUBE_API_KEY = os.getenv('YOUTUBE_API_KEY', '')
# ==========================================
# 系統版本與路徑
# ==========================================
SYSTEM_VERSION = "V10.489"
SYSTEM_VERSION = "V10.490"
LOG_FILE_PATH = os.path.join(BASE_DIR, 'logs/system.log')
public_url = PUBLIC_URL # 用於模板顯示

View File

@@ -154,6 +154,7 @@ SQL漏斗(~300筆)
- ElephantAlpha L3 HITL 只允許發送有實證、可審核、可行動的升級告警;價格類 trigger 無 Hermes 具體威脅時,只記錄 suppressed escalation telemetry 與 cooldown不寫 pending `human_review`,不發 Telegram 空告警。
- ElephantAlpha 價格類 trigger 的 HITL / 決策 prefetch 必須先使用觸發 SQL 與 `competitor_prices` / `price_records` 的 DB 實證生成 SKU、MOMO / PChome 價差與建議 action lines完整 Hermes LLM prefetch 預設關閉(`ELEPHANT_ALPHA_HERMES_LLM_PREFETCH_ENABLED=false`),避免 5s timeout 後落入無實證摘要或雲端備援。若無 DB 實證,只記錄 suppressed telemetry / cooldown不發 Telegram 空告警。
- ElephantAlpha 協調器收到非純 JSON、fenced JSON 或混文字 JSON 時,必須先做容錯抽取;仍無法解析時,只能使用 DB/Hermes 實證生成保守 HITL fallback。fallback 不得放入 OpenClaw `generate_*` 類舊策略步驟,也不得暗示已自動調價。
- ElephantAlpha 執行器若遇到舊版 OpenClaw strategy 類步驟(含 `generate_market_strategy` / `generate_resource_optimization_strategy`),只能記錄為 advisory skipped不得觸發 circuit breaker也不得轉成實際排程、外部呼叫或價格行動。
- `resource_optimization` 不再交給 LLM 生成「預期效益 / 已執行」敘事,顯示名稱統一為「資源壓力治理」。此 trigger 必須先由程式量測 `action_plans` backlog、P1/P2 數、pending_review、逾時項目與 CPU load只有 CPU 達門檻、P1/P2 積壓或逾時積壓才發 Telegram「資源壓力告警」。單純 queue 大但 CPU 正常只記錄 telemetry不派發 Hermes/NemoTron、不宣稱 48 小時效益Telegram 段落使用「系統處置紀錄」而非泛稱「已執行」,避免暗示 AI 已完成未經驗證的外部動作。
- `resource_optimization` 的 Telegram 必須包含 `decision_envelope` 區塊,標明 `source_agent=elephant_alpha`、資料品質、量測證據、`can_auto_execute=false` 與 deterministic trace此路徑不呼叫 Gemini、不呼叫 Hermes/NemoTron也不得把 queue backlog 翻譯成主機資源耗盡。
- `resource_optimization` 會先執行 `ActionPlanHygieneService` 清理過期噪音:只關閉超過 72 小時的 `code_review_fix` / `openclaw_recommendation` 類 advisory action_plans以及 NemoTron `direct_response/reply_simple` 舊聊天回覆計畫;將狀態改為 `auto_disabled``rejected` 並寫入 `metadata_json.hygiene_history`。不刪資料,也不碰 NemoTron human_review / pricing / tool action 類業務行動。

View File

@@ -85,6 +85,7 @@
- 2026-05-29 起,`V10.486` 補 PChome near-threshold 風險邊界NEW DIRECTIONS 甜杏仁油 vs 酪梨油直接 hard vetoCOCODOR 經典擴香瓶多款任選、KAMERIA 足膜任選三款、Hakugen 白元入浴劑橘盒/綠盒不同變體都保留 `variant_selection_review`,不進可採用 gate。Production 已部署 `/health=V10.486`240 筆 near-threshold audit `gate_pass 83→79``identity_veto 0→1``still_low 157→160`
- 2026-05-29 起,`V10.488` 新增市場情報 MCP Fetch Run Receipt 安全預覽 gate只審核操作員 dry-run receipt不執行 CLI、不抓外站、不寫 DB。
- 2026-05-29 起,`V10.489` 補 PChome 低分同款人工覆核回收與 gate-pass 風險邊界TS6 超美白香氛誘霜 120g/ml、W 修護保養蝸牛特潤修護面膜 6 片、Derma 大地 Eco 植萃護膚油 2 入,從低信心升成 `identity_review` 候選Clarins 輕盈美體護理油 vs 身體調和護理油、台塑生醫嬰兒沐浴/洗髮組合數量反轉、isLeaf 私密慕絲香型數量不一致改 hard vetoHOOOME 大理石暖燈 vs 泛稱經典款只留 `variant_selection_review`,不進 total-price accepted。Production 已部署 `/health=V10.489`500 筆 read-only audit 由 V10.486 基線 `gate_pass=129 / identity_veto=1 / still_low=370` 收斂為 `gate_pass=124 / identity_veto=4 / still_low=372`,三應用容器 healthy、`momo-db` 未 recreate。
- 2026-05-31 起,`V10.490` 補 ElephantAlpha / OpenClaw 舊策略 action 相容:正式日誌觀察到 `agent=openclaw action=generate_market_strategy` 被當未知步驟丟錯;此類 OpenClaw strategy 產生步驟已定義為 advisory skipped只記 warning不觸發 circuit breaker、不執行外部策略、不影響價格行動。測試覆蓋 `generate_market_strategy``generate_resource_optimization_strategy`,未知 action 仍維持 fail-fast。
## 3. 12 Agent 決策信封整合

View File

@@ -727,6 +727,7 @@ class ElephantAlphaAutonomousEngine:
if agent_type == "openclaw" and action in {
"generate_strategic_analysis",
"generate_market_analysis",
"generate_market_strategy",
"generate_pricing_strategy",
"generate_resource_optimization_strategy",
"weekly_strategy",

View File

@@ -64,17 +64,21 @@ def test_execute_step_routes_price_adjustment_to_human_review(monkeypatch):
assert calls[0]["parameters"]["recommended_price"] == 1280
def test_execute_step_skips_legacy_openclaw_resource_strategy():
def test_execute_step_skips_legacy_openclaw_strategy_actions():
from services.elephant_alpha_autonomous_engine import ElephantAlphaAutonomousEngine
engine = ElephantAlphaAutonomousEngine()
result = asyncio.run(engine._execute_step({
"agent": "openclaw",
"action": "generate_resource_optimization_strategy",
}))
for action in {
"generate_market_strategy",
"generate_resource_optimization_strategy",
}:
result = asyncio.run(engine._execute_step({
"agent": "openclaw",
"action": action,
}))
assert result is None
assert result is None
def test_autoheal_derives_python_exception_from_traceback():