From 48c5db3b856fa7ebd0a43f61a741e6df5fdfe88a Mon Sep 17 00:00:00 2001 From: OoO Date: Sun, 24 May 2026 17:46:30 +0800 Subject: [PATCH] Promote Mustela lotion identity anchor --- config.py | 2 +- docs/AI_INTELLIGENCE_MODULE_SOT.md | 2 +- docs/memory/history_logs.md | 1 + services/marketplace_product_matcher.py | 3 +++ tests/test_marketplace_product_matcher.py | 21 ++++++++++++++++++++- 5 files changed, 26 insertions(+), 3 deletions(-) diff --git a/config.py b/config.py index d0c1041..af41f13 100644 --- a/config.py +++ b/config.py @@ -325,7 +325,7 @@ YOUTUBE_API_KEY = os.getenv('YOUTUBE_API_KEY', '') # ========================================== # 系統版本與路徑 # ========================================== -SYSTEM_VERSION = "V10.439" +SYSTEM_VERSION = "V10.440" LOG_FILE_PATH = os.path.join(BASE_DIR, 'logs/system.log') public_url = PUBLIC_URL # 用於模板顯示 diff --git a/docs/AI_INTELLIGENCE_MODULE_SOT.md b/docs/AI_INTELLIGENCE_MODULE_SOT.md index 27a8d9c..aa075c1 100644 --- a/docs/AI_INTELLIGENCE_MODULE_SOT.md +++ b/docs/AI_INTELLIGENCE_MODULE_SOT.md @@ -2,7 +2,7 @@ > **最後更新**: 2026-05-24 (台北時間) > **狀態**: 🟢 四 AI Agent 自動化閉環已落地;LLM 路由紅線升級為 Ollama-first 三主機級聯,Gemini 備援預設關閉 -> **適用版本**: V10.439 +> **適用版本**: V10.440 --- diff --git a/docs/memory/history_logs.md b/docs/memory/history_logs.md index 6b3e560..dca17d7 100644 --- a/docs/memory/history_logs.md +++ b/docs/memory/history_logs.md @@ -13,6 +13,7 @@ ## 📅 詳細更新日誌 (考古存檔) ### 2026-05-24:PChome 近門檻身份回收第二輪 +- **V10.440 Mustela 爽身潤膚乳同款 anchor**: marketplace matcher 新增 `慕之幼爽身潤膚乳` identity anchor,並讓標題中插入「加量版」時仍可抽出同一身份詞;正式樣本 `【Mustela 慕之恬廊】慕之幼 加量版爽身潤膚乳 500mlX2入` vs `【慕之恬廊】慕之幼爽身潤膚乳(500毫升X2入)` 由 0.741 提升到 0.801,維持 `hard_veto=false`、人工 review 型態,不放寬全域門檻、不寫正式 `competitor_prices`。 - **V10.439 外部 BI / 資料協作入口收斂**: `/metabase`、`/grist` 保持在 momo-pro 內部診斷 bridge,不再出現空白頁或錯連其他專案;`.env.example` 與 bi profile 的 Grist 預設 URL 改為 `https://mo.wooo.work/grist` / `GRIST_APP_HOME_URL`,測試同步守住 `grist.wooo.work` 與 `awoooi` 不再回到 app/template/env/compose 導覽設定。外部工具頁 H1 移除 viewport font scaling,改用新版 token 與手機 media query。 - **V10.438 PPT QA 失敗重跑精準化**: `/observability/ppt_audit_history` 的 QA 失敗與 issue triage 卡片會從 PPT 檔名前綴推回原始 `report_type`,不再把所有視覺 QA 失敗硬編成 daily 重跑;單筆「重跑」會以 `force=true` 呼叫補齊 API,並在產生前只失效同一 `report_type + parameters` 的 active `ppt_reports` cache,避免重新產出仍命中舊簡報。頁面也把 audit lane 的預覽按鈕補上,讓失敗檔案可直接站內回放 PDF/PPTX 預覽。 - **V10.437 業績圖表載入韌性與 QA 升級**: `analysis-chart-theme.js` 的 Chart.js loader 加入 4.5 秒 timeout 與 jsDelivr → unpkg → cdnjs 三來源 fallback;若外部 CDN 卡住或失敗,`/daily_sales`、`/growth_analysis` 會切到既有 HTML snapshot / fallback 圖表,不再留下空白圖表框。`check_sales_charts_runtime.js` 也從「canvas 有墨點」升級為檢查非零 dataset、可見元素、彩色資料筆跡與 canvas ink,避免只有座標軸的假通過。 diff --git a/services/marketplace_product_matcher.py b/services/marketplace_product_matcher.py index 5f497c2..5298b87 100644 --- a/services/marketplace_product_matcher.py +++ b/services/marketplace_product_matcher.py @@ -336,6 +336,7 @@ SEARCH_IDENTITY_ANCHORS = ( "經典旋轉眉筆", "3d造型眉彩餅補充芯", "止汗爽身乳液", + "慕之幼爽身潤膚乳", "精油芬香護手霜", "持久植物香氛精油", "口袋雙色修容打亮盤", @@ -2611,6 +2612,8 @@ def _extract_anchor_phrases(token: str) -> list[str]: phrases.append("蜂王玫瑰瑰泌霜") if "瞬效" in cleaned and "b5" in cleaned and "玻尿酸" in cleaned and "精華" in cleaned: phrases.append("瞬效b5玻尿酸精華") + if "慕之幼" in cleaned and "爽身潤膚乳" in cleaned: + phrases.append("慕之幼爽身潤膚乳") for anchor in SEARCH_IDENTITY_ANCHORS: anchor_phrase = _clean_search_phrase(anchor) if not anchor_phrase or anchor_phrase not in cleaned: diff --git a/tests/test_marketplace_product_matcher.py b/tests/test_marketplace_product_matcher.py index 5c11850..82ebc44 100644 --- a/tests/test_marketplace_product_matcher.py +++ b/tests/test_marketplace_product_matcher.py @@ -1759,16 +1759,35 @@ def test_marketplace_matcher_promotes_safe_exact_spec_near_threshold(): "【Mustela 慕之恬廊】慕之幼 爽身潤膚乳500mlX2", "Mustela慕之恬廊 慕之幼爽身潤膚乳500mlX2", ) + mustela_lotion_2pack_production_title = score_marketplace_match( + "【Mustela 慕之恬廊】慕之幼 加量版爽身潤膚乳 500mlX2入(寶寶 嬰兒乳液 公司貨 台灣獨家總代理)", + "【慕之恬廊】慕之幼爽身潤膚乳(500毫升X2入)", + momo_price=1390, + competitor_price=1210, + ) herbacin_hand_cream = score_marketplace_match( "【Herbacin 德國小甘菊】小甘菊1號護手霜20ml", "Herbacin 小甘菊經典護手霜20ml", ) - for diagnostics in (opi, mustela, romand, muji_hand_cream, mustela_lotion_2pack, herbacin_hand_cream): + for diagnostics in ( + opi, + mustela, + romand, + muji_hand_cream, + mustela_lotion_2pack, + mustela_lotion_2pack_production_title, + herbacin_hand_cream, + ): assert diagnostics.score >= 0.76 assert diagnostics.hard_veto is False assert "strong_exact_spec_match" in diagnostics.reasons + assert any( + reason.startswith("shared_identity_anchor") + for reason in mustela_lotion_2pack_production_title.reasons + ) + assert muji_brandless_hand_cream.score >= 0.76 assert muji_brandless_hand_cream.hard_veto is False assert "focused_exact_identity_muji_aroma_hand_cream_brandless" in muji_brandless_hand_cream.reasons