diff --git a/docs/AI_INTELLIGENCE_MODULE_SOT.md b/docs/AI_INTELLIGENCE_MODULE_SOT.md index 5f4bf61..3218b00 100644 --- a/docs/AI_INTELLIGENCE_MODULE_SOT.md +++ b/docs/AI_INTELLIGENCE_MODULE_SOT.md @@ -104,6 +104,7 @@ - 2026-07-02 起 `/observability/budget` 必須採密集 AI 成本工作台:首屏使用 `data-density-guardrail="compact-budget-workbench"`,以「成本守門、節流狀態、知識策略」短標籤承接成本治理;hero 說明、按鈕註解、KPI 小註與頁尾重複標題不得佔用第一層視覺,畫面先保留當月花費、預算使用率、預警、已節流、預算線、成本趨勢、成本集中與 AI 價格決策成效。 - 2026-07-02 起 `/observability/business_intel` 必須採密集 AI 商業工作台:首屏使用 `data-density-guardrail="compact-business-workbench"`,以「戰果追蹤、閉環成效、競品訊號」短標籤承接 AI 商業狀態;hero 說明、決策節奏註解、KPI 小註、panel 說明與頁尾資料來源不得佔用第一層視覺,畫面先保留高信心未跟進、平均信心分、有效率、競品監測、外部促銷活動監控、策略族群、最近建議與閉環學習紀錄。 - 2026-07-02 起 `/observability/host_health` 必須採密集 AI runtime 工作台:首屏使用 `data-density-guardrail="compact-runtime-workbench"`,以「主機級聯、自癒閉環、成本節流」短標籤承接 AI runtime 狀態;hero 說明、KPI 小註與頁尾重複標題不得佔用第一層視覺,畫面先保留建議服務離線、AIOps 未解、自癒成功率、節流供應商、AI 建議服務主機、健康趨勢、自癒閉環、工具層與事件紀錄。 +- 2026-07-02 起 `/observability/rag_queries` 必須採密集 AI 知識工作台:首屏使用 `data-density-guardrail="compact-knowledge-workbench"`,以「知識命中、省模閉環、回饋學習」短標籤承接 RAG 召回狀態;hero 說明、KPI 小註與頁尾重複標題不得佔用第一層視覺,畫面先保留查詢數、命中率、省模型、回饋分、查詢串流、使用情境品質與命中內容查閱。 - 2026-07-02 起 `/ai_intelligence` 商品明細與單品作戰詳情的四格價格證據必須可測:PChome 價格、MOMO 參考價、差距、可信度需以 `data-evidence` 固定,並以 `aria-label="價格證據"` 對應可掃描區塊;候選待確認或缺資料只能顯示「候選待確認 / 待補」,不得捏造價格或讓使用者打開 raw payload 才知道判斷依據。 - 2026-07-02 起 `/ai_intelligence` 必須是密集 AI 工作台,不得退回大段文字說明頁:首屏與明細可見內容只保留短狀態、數字、四格證據與下一步按鈕;KPI note、benchmark detail、alert 副句、策略說明、decision copy、來源長句與單品 reason list 不得佔用第一層視覺。`tests/test_ai_intelligence_text_density_guardrails.py` 必須鎖住 `data-density-guardrail="compact-ai-workbench"`、短任務文案、detail meta 與 hidden explanatory copy。 - 2026-07-02 起 `/observability/overview` 也必須採密集 AI 觀測工作台:首屏以 `data-density-guardrail="compact-observability-workbench"`、`AI 觀測 / 風險優先 / 下一步` 與 golden signals 先呈現狀態、數字與操作入口;hero lede、signal note、route desc、host meta 與資料來源長句不得佔用第一層視覺。`tests/test_observability_text_density_guardrails.py` 必須鎖住 compact marker 與 hidden explanatory copy。 diff --git a/docs/guides/external_professional_benchmark.md b/docs/guides/external_professional_benchmark.md index 36c7c55..19df34c 100644 --- a/docs/guides/external_professional_benchmark.md +++ b/docs/guides/external_professional_benchmark.md @@ -78,6 +78,7 @@ Baymard 的商品頁與比較 UX 研究強調:使用者需要清楚的 product - AI cost surface rollout: `/observability/budget` 已套用 compact AI cost workbench guardrails;`tests/test_budget_text_density_guardrails.py` 鎖住首屏短標籤、成本/預警/節流核心訊號與 hidden explanatory copy。 - AI business surface rollout: `/observability/business_intel` 已套用 compact AI business workbench guardrails;`tests/test_business_intel_text_density_guardrails.py` 鎖住首屏短標籤、商業戰果/閉環/競品核心訊號與 hidden explanatory copy。 - AI runtime surface rollout: `/observability/host_health` 已套用 compact AI runtime workbench guardrails;`tests/test_host_health_text_density_guardrails.py` 鎖住首屏短標籤、主機級聯/自癒/節流核心訊號與 hidden explanatory copy。 +- AI knowledge surface rollout: `/observability/rag_queries` 已套用 compact AI knowledge workbench guardrails;`tests/test_rag_queries_text_density_guardrails.py` 鎖住首屏短標籤、知識命中/省模閉環/回饋學習核心訊號與 hidden explanatory copy。 ## 下一步 TODO 候選 @@ -94,6 +95,7 @@ Baymard 的商品頁與比較 UX 研究強調:使用者需要清楚的 product - 已完成: `/observability/budget` 首屏以「成本守門 / 節流狀態 / 知識策略」短標籤與四個核心數字呈現 AI 成本治理狀態。 - 已完成: `/observability/business_intel` 首屏以「戰果追蹤 / 閉環成效 / 競品訊號」短標籤與四個核心數字呈現 AI 商業轉化狀態。 - 已完成: `/observability/host_health` 首屏以「主機級聯 / 自癒閉環 / 成本節流」短標籤與四個核心數字呈現 AI runtime 健康狀態。 + - 已完成: `/observability/rag_queries` 首屏以「知識命中 / 省模閉環 / 回饋學習」短標籤與四個核心數字呈現 AI 知識召回狀態。 ## 參考來源 diff --git a/docs/guides/pchome_ai_automation_priority_backlog.md b/docs/guides/pchome_ai_automation_priority_backlog.md index 04c685a..8e2800a 100644 --- a/docs/guides/pchome_ai_automation_priority_backlog.md +++ b/docs/guides/pchome_ai_automation_priority_backlog.md @@ -101,7 +101,7 @@ ## P1 - Product Visibility And Professional Website Experience -狀態: 進行中,本輪已完成 `/ai_intelligence`、`/observability/overview`、`/ai_automation_smoke`、`/observability/agent_orchestration`、`/observability/ai_calls` 與 `/observability/quality_trend` 密集 AI 工作台文字密度守門。 +狀態: 進行中,本輪已完成 `/ai_intelligence`、`/observability/overview`、`/ai_automation_smoke`、`/observability/agent_orchestration`、`/observability/ai_calls`、`/observability/quality_trend`、`/observability/budget`、`/observability/business_intel`、`/observability/host_health` 與 `/observability/rag_queries` 密集 AI 工作台文字密度守門。 目的: 讓 AI 自動化在產品裡可見,成為專業營運工作流,而不是只藏在後端。 @@ -156,6 +156,10 @@ - 首屏改成 `data-density-guardrail="compact-runtime-workbench"`,以「主機級聯 / 自癒閉環 / 成本節流」短標籤承接 AI runtime 狀態。 - hero 說明、KPI 小註與頁尾重複標題從可見 UI 退場,保留建議服務離線、AIOps 未解、自癒成功率、節流供應商、AI 建議服務主機、健康趨勢、自癒閉環、工具層與事件紀錄。 - `tests/test_host_health_text_density_guardrails.py` 已鎖住 compact marker、第一層 runtime 訊號與 explanatory copy hidden contract。 +- `/observability/rag_queries` 密集 AI 知識工作台文字密度 guard 已完成: + - 首屏改成 `data-density-guardrail="compact-knowledge-workbench"`,以「知識命中 / 省模閉環 / 回饋學習」短標籤承接 RAG 召回狀態。 + - hero 說明、KPI 小註與頁尾重複標題從可見 UI 退場,保留查詢數、命中率、省模型、回饋分、查詢串流、使用情境品質與命中內容查閱。 + - `tests/test_rag_queries_text_density_guardrails.py` 已鎖住 compact marker、第一層知識訊號與 explanatory copy hidden contract。 已完成 / 下一步,必須照順序: diff --git a/templates/admin/rag_queries.html b/templates/admin/rag_queries.html index 9ceac6b..6e45fec 100644 --- a/templates/admin/rag_queries.html +++ b/templates/admin/rag_queries.html @@ -6,7 +6,7 @@ -{% set total = summary.total if summary else 0 %} {% import "admin/_observability_labels.html" as obs_label %} +{% set rag_total = summary.get('total', 0) if summary else 0 %} +{% set rag_saved = summary.get('saved', 0) if summary else 0 %} +{% set rag_with_hits = summary.get('with_hits', 0) if summary else 0 %} +{% set rag_no_hits = summary.get('no_hits', 0) if summary else 0 %} +{% set rag_avg_hits = summary.get('avg_hits', 0) if summary else 0 %} +{% set rag_avg_score = summary.get('avg_score', 0) if summary else 0 %} +{% set rag_feedback_count = summary.get('feedback_count', 0) if summary else 0 %} +{% set rag_distinct_callers = summary.get('distinct_callers', 0) if summary else 0 %} +{% set rag_saved_rate = summary.get('saved_rate', 0) if summary else 0 %} +{% set rag_hit_rate = summary.get('hit_rate', 0) if summary else 0 %}
-
+
知識召回雷達 · {{ hours }} 小時視窗

知識召回雷達

+
知識命中省模閉環回饋學習

追蹤知識是否命中、是否省下模型呼叫,避免業績建議缺少根據。

- {% if summary and summary.total > 0 %}
查詢數
{{ "{:,}".format(summary.total) }}
{{ summary.distinct_callers }} 個使用情境
命中率
{{ "%.1f"|format(summary.hit_rate) }}%
{{ summary.with_hits }} 次命中 · {{ summary.no_hits }} 次未命中
省下模型
{{ "%.1f"|format(summary.saved_rate) }}%
{{ summary.saved }} 次省下模型呼叫
反饋分
{{ "%.2f"|format(summary.avg_score) }}
{{ summary.feedback_count }} 筆 · 平均 {{ summary.avg_hits }} 次命中
{% endif %} +
查詢數
{{ "{:,}".format(rag_total) }}
{{ rag_distinct_callers }} 個使用情境
命中率
{{ "%.1f"|format(rag_hit_rate) }}%
{{ rag_with_hits }} 次命中 · {{ rag_no_hits }} 次未命中
省模型
{{ "%.1f"|format(rag_saved_rate) }}%
{{ rag_saved }} 次省下模型呼叫
回饋分
{{ "%.2f"|format(rag_avg_score) }}
{{ rag_feedback_count }} 筆 · 平均 {{ rag_avg_hits }} 次命中
{% if error %}
{{ error }}
{% endif %} @@ -36,7 +46,7 @@
-

知識召回雷達

+
diff --git a/tests/test_rag_queries_text_density_guardrails.py b/tests/test_rag_queries_text_density_guardrails.py new file mode 100644 index 0000000..00e332f --- /dev/null +++ b/tests/test_rag_queries_text_density_guardrails.py @@ -0,0 +1,48 @@ +from pathlib import Path + + +ROOT = Path(__file__).resolve().parents[1] + + +def test_rag_queries_uses_compact_knowledge_workbench_contract(): + template = (ROOT / "templates/admin/rag_queries.html").read_text(encoding="utf-8") + + assert 'data-density-guardrail="compact-knowledge-workbench"' in template + assert 'aria-label="AI 知識狀態模式"' in template + assert "知識命中" in template + assert "省模閉環" in template + assert "回饋學習" in template + + +def test_rag_queries_keeps_knowledge_signals_and_hides_explanatory_copy(): + template = (ROOT / "templates/admin/rag_queries.html").read_text(encoding="utf-8") + + for marker in ["查詢數", "命中率", "省模型", "回饋分"]: + assert marker in template + + assert ".qa-subtitle,.qa-note,.qa-footer-copy{display:none}" in template + assert 'class="qa-subtitle"' in template + assert "qa-footer-copy" in template + + +def test_rag_queries_preserves_ai_knowledge_workflow_and_non_raw_wording(): + template = (ROOT / "templates/admin/rag_queries.html").read_text(encoding="utf-8") + + for marker in [ + "查詢串流", + "最近 50 筆查詢詳情", + "各使用情境知識表現", + "知識命中內容", + "查命中", + ]: + assert marker in template + + for forbidden in [ + "top_k", + "{{ q.caller }}", + "manual_required", + "raw payload", + "raw endpoint", + "資料表:", + ]: + assert forbidden not in template