fix(ai): 讓 PixelRAG VLM receipt 自證 artifact write

This commit is contained in:
ogt
2026-07-09 23:48:30 +08:00
parent ab07eb903d
commit c82bfc1835
5 changed files with 12 additions and 5 deletions

View File

@@ -9,7 +9,7 @@
python scripts/ops/check_production_version_truth.py
目前最新版本仍以 production `https://mo.wooo.work/health` readback 為準。
本輪 source target 為 `V10.750`;部署完成前不得宣稱正式環境已是 `V10.750`。
本輪 source target 為 `V10.751`;部署完成前不得宣稱正式環境已是 `V10.751`。
舊 iCloud checkout 不是 Gitea dev worktree不得拿來當最新版本真相。
================================================================================
@@ -60,7 +60,7 @@ P0-2026-07-09. PixelRAG / MCP / RAG 全自動主線
- 已完成:多電商 PixelRAG visual evidence lane 與 external MCP/RAG integration readback。
- 已完成PixelRAG receipt → internal RAG candidate replay以及 OCR/VLM replay contract no-write readback。
- 已完成PixelRAG application portfolio把可整合/可運用場景整理成 API/CLI 可讀的 priority lane、status、next machine action 與 forbidden guardrail。
- 已完成PixelRAG Ollama-first VLM replay worker提供 dry-run/execute、artifact receipt、model_error receipt、blocked page guard、confidence/evidence validation且 DB write=0、primary human gate=0。
- 已完成PixelRAG Ollama-first VLM replay worker提供 dry-run/execute、自證 artifact receipt、model_error receipt、blocked page guard、confidence/evidence validation且 DB write=0、primary human gate=0。
- 進行中MCP/RAG runtime health → AI automation smoke。
- 未開始Ollama-first visual embedding benchmark、pgvector-compatible visual metadata、Coupang platform probe / structured API、跨平台 source contracts。
- 主線文件:`docs/guides/ai_automation_mainline_work_items.md`。

View File

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

View File

@@ -879,7 +879,7 @@ POSTGRES_HOST=momo-db
| 2026-07-09 | PixelRAG / external MCP/RAG 必須有 runtime monitoring 與 candidate replay | V10.746 起 `/api/ai-automation/smoke``/api/ai-automation/scheduled-health-summary` 必須輸出 `External MCP/RAG integration readback` / `external_mcp_rag_integration``PixelRAG RAG candidate replay` / `pixelrag_rag_candidate_replay`external MCP/RAG readback 回報 9 個 capability 的 absorbed / unresolved 與 `MCP_ROUTER_ENABLED``RAG_ENABLED` runtime flagsPixelRAG replay 只讀 visual receipt拆分 eligible / blocked / invalid並明確標記 blocked page 不是商品資料。此路徑不讀 secret、不呼叫外部網路、不寫 DB、不寫 `ai_insights`、不寫正式價格表eligible receipt 仍需 OCR/VLM replay、identity matcher replay、PromotionGate 與 embedding signature guard。 |
| 2026-07-09 | PixelRAG OCR/VLM replay contract 必須有 runtime monitoring | V10.747 起 `/api/ai-automation/pixelrag-ocr-vlm-replay``scripts/ops/report_pixelrag_ocr_vlm_replay.py``/api/ai-automation/smoke``/api/ai-automation/scheduled-health-summary` 必須輸出 no-write OCR/VLM replay contract / `pixelrag_ocr_vlm_replay` familyreadback 只讀 saved tiles 與 RAG candidate replay輸出 ready / blocked / invalid contracts、field schema、output schema、validation rules、Ollama-first route contract、blocked page guard 與 next machine action。此階段明確標記 `extraction_execution_performed=false``ocr_execution_performed=false``vlm_execution_performed=false``writes_database=false``writes_ai_insights=false``writes_price_tables=false``network_call=false``secret_read=false``primary_human_gate_count=0`ready receipt 才能進下一段 `run_ollama_first_vlm_replay_worker`blocked receipt 只能進 platform probe 或 structured API 策略。 |
| 2026-07-09 | PixelRAG application portfolio 必須把可整合場景轉成主線工作項目 | V10.748 起 `/api/ai-automation/pixelrag-application-portfolio``scripts/ops/report_pixelrag_application_portfolio.py` 必須輸出 PixelRAG 在 commerce、RAG、UX、ops、marketing、governance 的可整合/可運用 lanes每條 lane 需有 priority、status、integrates_with、use_cases、current_capability、next_machine_action、no-write 邊界與 forbidden guardrails。此 readback 依據 PixelRAG visual-RAG pattern、Google Merchant product data、Google Product structured data 與 Baymard product list UX 轉成內部工作項目;它不抓外站、不呼叫模型、不讀 secret、不寫 DB、不把像素結果當正式價格。 |
| 2026-07-09 | PixelRAG Ollama-first VLM replay worker 必須有 runtime monitoring | V10.750`/api/ai-automation/pixelrag-vlm-replay-worker``scripts/ops/run_pixelrag_vlm_replay_worker.py``/api/ai-automation/smoke``/api/ai-automation/scheduled-health-summary` 必須輸出 controlled VLM replay worker / `pixelrag_vlm_replay_worker` familyreadback 預設 dry-run不呼叫模型、不寫 artifactexecute 模式只讀 saved tiles、呼叫 approved Ollama VLM route、驗證 JSON field confidence/evidence refs並只寫 artifact receiptmodel_error 也必須寫 failure artifact receipt。此 worker 明確標記 `writes_database=false``writes_ai_insights=false``writes_price_tables=false``secret_read=false``primary_human_gate_count=0`blocked page 不得輸出商品欄位ready VLM 結果仍需 identity matcher replay 與 PromotionGate。 |
| 2026-07-09 | PixelRAG Ollama-first VLM replay worker 必須有 runtime monitoring | V10.751`/api/ai-automation/pixelrag-vlm-replay-worker``scripts/ops/run_pixelrag_vlm_replay_worker.py``/api/ai-automation/smoke``/api/ai-automation/scheduled-health-summary` 必須輸出 controlled VLM replay worker / `pixelrag_vlm_replay_worker` familyreadback 預設 dry-run不呼叫模型、不寫 artifactexecute 模式只讀 saved tiles、呼叫 approved Ollama VLM route、驗證 JSON field confidence/evidence refs並只寫 artifact receiptmodel_error 也必須寫 failure artifact receiptreceipt 檔內需自證 `artifact_write_performed=true``receipt_path`。此 worker 明確標記 `writes_database=false``writes_ai_insights=false``writes_price_tables=false``secret_read=false``primary_human_gate_count=0`blocked page 不得輸出商品欄位ready VLM 結果仍需 identity matcher replay 與 PromotionGate。 |
| 2026-06-29 | PChome DB apply 授權 lane 必須先通過 no-write guard / decision preflight / decision closeout / issuer gate / signing-decision preflight / signing-decision closeout / signing-issuer guard | V10.725 的 PChome mapping backlog auto-policy 已新增 `/api/ai/pchome-growth/mapping-backlog/auto-policy-db-apply-authorization-lane-guard``/api/ai/pchome-growth/mapping-backlog/auto-policy-db-apply-authorization-decision-preflight``/api/ai/pchome-growth/mapping-backlog/auto-policy-db-apply-authorization-decision-closeout``/api/ai/pchome-growth/mapping-backlog/auto-policy-db-apply-authorization-issuer-gate``/api/ai/pchome-growth/mapping-backlog/auto-policy-db-apply-authorization-signing-decision-preflight``/api/ai/pchome-growth/mapping-backlog/auto-policy-db-apply-authorization-signing-decision-closeout``/api/ai/pchome-growth/mapping-backlog/auto-policy-db-apply-authorization-signing-issuer-guard`;這些 endpoint 只驗證 final exact request package、same-run production truth requirement、secret rejection、rollback boundary、lane entry requirements、decision input requirements、rejection policy、post-apply verifier、future authorization decision package、final nonsecret authorization envelope、signing decision preflight inputs、unsigned signing decision package 與 signable request boundary不讀 secret、不執行 shell/SQL、不寫 DB也不簽發 database apply authorization。 |
| 2026-06-29 | PChome DB apply 授權簽署發行者 lane 必須先產出 final signable request package | V10.725 的 PChome mapping backlog auto-policy 新增 `/api/ai/pchome-growth/mapping-backlog/auto-policy-db-apply-authorization-signing-issuer-closeout`;此 endpoint 只把 signing-issuer guard 的 signable request boundary 收斂成 final signable request package 與 closeout contract確認 fresh production truth、post-apply verifier、migration hash、secret boundary 與 no-side-effect checks不讀 secret、不簽發 authorization、不執行 shell/SQL、不寫 DB也不代表正式 DB apply 已授權。 |
| 2026-06-29 | PChome DB apply 授權簽署執行 lane 必須先通過 operator-held secret boundary preflight | V10.725 的 PChome mapping backlog auto-policy 新增 `/api/ai/pchome-growth/mapping-backlog/auto-policy-db-apply-authorization-signing-execution-preflight`;此 endpoint 只把 final signable request package 轉成 future signing execution preflight package、operator-held secret boundary contract、nonsecret signing inputs、command-shape preview、rollback boundary 與 abort conditions不讀 secret、不接受 plaintext secret、不簽發 authorization、不執行 shell/SQL、不寫 DB也不代表正式 DB apply 已授權。 |

View File

@@ -232,8 +232,11 @@ def _write_replay_receipt(
/ "vlm_replay_receipt.json"
)
target.parent.mkdir(parents=True, exist_ok=True)
receipt_payload = dict(worker_item)
receipt_payload["artifact_write_performed"] = True
receipt_payload["receipt_path"] = str(target)
target.write_text(
json.dumps(worker_item, ensure_ascii=False, indent=2, sort_keys=True),
json.dumps(receipt_payload, ensure_ascii=False, indent=2, sort_keys=True),
encoding="utf-8",
)
return str(target)

View File

@@ -121,6 +121,8 @@ def test_pixelrag_vlm_replay_worker_execute_writes_artifact_receipt(tmp_path, mo
assert receipt_path.exists()
receipt = json.loads(receipt_path.read_text(encoding="utf-8"))
assert receipt["parsed_output"]["fields"]["title"]["value"] == "防曬乳 SPF50"
assert receipt["artifact_write_performed"] is True
assert receipt["receipt_path"] == str(receipt_path)
def test_pixelrag_vlm_replay_worker_writes_model_error_receipt(tmp_path, monkeypatch):
@@ -168,6 +170,8 @@ def test_pixelrag_vlm_replay_worker_writes_model_error_receipt(tmp_path, monkeyp
receipt_path = tmp_path / "receipts" / "shopee_tw" / "shopee-ok" / "vlm_replay_receipt.json"
receipt = json.loads(receipt_path.read_text(encoding="utf-8"))
assert receipt["worker_status"] == "model_error"
assert receipt["artifact_write_performed"] is True
assert receipt["receipt_path"] == str(receipt_path)
assert receipt["next_machine_action"] == "repair_ollama_vlm_runtime_or_model_route"