diff --git a/config.py b/config.py index a487997..92fc645 100644 --- a/config.py +++ b/config.py @@ -402,7 +402,7 @@ YOUTUBE_API_KEY = os.getenv('YOUTUBE_API_KEY', '') # ========================================== # 系統版本與路徑 # ========================================== -SYSTEM_VERSION = "V10.669" +SYSTEM_VERSION = "V10.670" 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 86e396c..fd56099 100644 --- a/docs/AI_INTELLIGENCE_MODULE_SOT.md +++ b/docs/AI_INTELLIGENCE_MODULE_SOT.md @@ -746,3 +746,4 @@ POSTGRES_HOST=momo-db | 2026-06-25 | 邊角工具頁不可只描述功能,必須說明如何支援 PChome 業績判斷 | V10.667 起 AI 生成歷史、PChome 爬蟲、趨勢資料、用戶管理、外部工具狀態與市場情報停用頁都改為短句,聚焦資料新鮮度、文案回收、權限治理與正式比價流程。 | | 2026-06-25 | 低頻治理頁與舊入口不可出現英文工程狀態或教學句 | V10.668 起 legacy bridge、維護/權限、匯入、設定、通知模板、缺貨管理、登入歷史、系統日誌與 AI 健康檢查頁統一改為繁中短句,聚焦資料可靠、權限守門、供貨風險與部署治理如何支援業績流程。 | | 2026-06-25 | 匯入頁不可把資料表流程當成使用者主訊息 | V10.669 起雲端匯入與系統匯入完成訊息改說明業績資料新鮮度與更新筆數,不再用「下載→匯入資料庫→刪除」或資料表名稱作為前台重點。 | +| 2026-06-25 | 可見操作頁不可把權杖、DB、Agent、Pipeline 當成主語 | V10.670 起 AI 助手、日報、銷售分析、缺貨、部署監控與觀測台頁面進一步改用「用量、產出紀錄、AI 分工、部署流程、知識命中」等營運可讀語言。 | diff --git a/templates/admin/agent_orchestration.html b/templates/admin/agent_orchestration.html index 16a2b12..7c6a559 100644 --- a/templates/admin/agent_orchestration.html +++ b/templates/admin/agent_orchestration.html @@ -1,6 +1,6 @@ {% extends "ewoooc_base.html" %} -{% block title %}Agent 指揮矩陣{% endblock %} +{% block title %}AI 分工指揮台{% endblock %} {% block ewooo_content %}
-
Agent 指揮矩陣 · {{ hours }} 小時視窗

Agent 指揮矩陣

確認 AI 分工、Ollama 占比、RAG 命中與 MCP 編排是否支撐業績決策。

{% if overall %}
呼叫總量
{{ "{:,}".format(overall.total_calls) }}{{ "{:,}".format(overall.total_tokens) }} 權杖
Ollama 占比
{{ "%.0f"|format(overall.local_pct) }}%{{ "{:,}".format(overall.local_calls) }} 次本地呼叫
付費成本
${{ "%.2f"|format(overall.total_cost) }}{{ "{:,}".format(overall.paid_calls) }} 次付費呼叫
RAG 命中率
{{ "%.0f"|format(overall.rag_rate) }}%{{ "{:,}".format(overall.rag_hits) }} 次命中
{% endif %}
+
AI 分工指揮台 · {{ hours }} 小時視窗

AI 分工指揮台

確認 AI 分工、Ollama 占比、知識命中與 MCP 編排是否支撐業績決策。

{% if overall %}
呼叫總量
{{ "{:,}".format(overall.total_calls) }}{{ "{:,}".format(overall.total_tokens) }} 用量
Ollama 占比
{{ "%.0f"|format(overall.local_pct) }}%{{ "{:,}".format(overall.local_calls) }} 次本地呼叫
付費成本
${{ "%.2f"|format(overall.total_cost) }}{{ "{:,}".format(overall.paid_calls) }} 次付費呼叫
知識命中率
{{ "%.0f"|format(overall.rag_rate) }}%{{ "{:,}".format(overall.rag_hits) }} 次命中
{% endif %}
{% if error %}
{{ error }}
{% endif %}
-
四 Agent 矩陣

LLM × MCP × RAG 編排矩陣

{% for ag in agent_matrix %}{% endfor %}
Agent呼叫成本Ollama付費MCPRAG錯誤耗時
{{ ag.label }}{{ ag.desc }}{% if ag.calls > 0 %}{{ "{:,}".format(ag.calls) }}{{ "{:,}".format(ag.tokens) }} 權杖{% else %}{% endif %}{% if ag.calls > 0 %}${{ "%.2f"|format(ag.cost) }}{% else %}{% endif %}{% if ag.calls > 0 %}{{ "%.0f"|format(ag.ollama_pct) }}%A {{ ag.ollama_gcp_a }} · B {{ ag.ollama_gcp_b }} · 111 {{ ag.ollama_111 }}{% else %}{% endif %}{% if ag.calls > 0 %}{{ "%.0f"|format(ag.paid_pct) }}%Gemini {{ ag.gemini }}{% if ag.other_paid %} · 其他 {{ ag.other_paid }}{% endif %}{% else %}{% endif %}{% if ag.calls > 0 %}{{ "%.1f"|format(ag.mcp_rate) }}%{{ ag.mcp_calls }}{% else %}{% endif %}{% if ag.calls > 0 %}{{ "%.1f"|format(ag.rag_rate) }}%{{ ag.rag_hits }}{% else %}{% endif %}{% if ag.calls > 0 %}{{ "%.1f"|format(ag.error_rate) }}%{{ ag.errors }}{% else %}{% endif %}{% if ag.calls > 0 %}{{ ag.avg_ms }} ms{% else %}{% endif %}
+
AI 分工矩陣

模型、工具與知識命中矩陣

{% for ag in agent_matrix %}{% endfor %}
分工呼叫成本Ollama付費MCPRAG錯誤耗時
{{ ag.label }}{{ ag.desc }}{% if ag.calls > 0 %}{{ "{:,}".format(ag.calls) }}{{ "{:,}".format(ag.tokens) }} 用量{% else %}{% endif %}{% if ag.calls > 0 %}${{ "%.2f"|format(ag.cost) }}{% else %}{% endif %}{% if ag.calls > 0 %}{{ "%.0f"|format(ag.ollama_pct) }}%A {{ ag.ollama_gcp_a }} · B {{ ag.ollama_gcp_b }} · 111 {{ ag.ollama_111 }}{% else %}{% endif %}{% if ag.calls > 0 %}{{ "%.0f"|format(ag.paid_pct) }}%Gemini {{ ag.gemini }}{% if ag.other_paid %} · 其他 {{ ag.other_paid }}{% endif %}{% else %}{% endif %}{% if ag.calls > 0 %}{{ "%.1f"|format(ag.mcp_rate) }}%{{ ag.mcp_calls }}{% else %}{% endif %}{% if ag.calls > 0 %}{{ "%.1f"|format(ag.rag_rate) }}%{{ ag.rag_hits }}{% else %}{% endif %}{% if ag.calls > 0 %}{{ "%.1f"|format(ag.error_rate) }}%{{ ag.errors }}{% else %}{% endif %}{% if ag.calls > 0 %}{{ ag.avg_ms }} ms{% else %}{% endif %}
{% if recommendations %}
策略規則

編排策略自動建議

{% for r in recommendations %}
{{ r.severity|upper }}{{ r.agent }}
發現:{{ r.finding }}
建議:{{ r.suggestion }}
{% endfor %}
{% endif %} - {% if mcp_matrix %}
MCP 明細

MCP 服務 × 呼叫端工作量

{% for m in mcp_matrix %}{% endfor %}
MCP 服務呼叫端tool 呼叫快取快取率成本
{{ m.server }}{{ m.caller }}{{ "{:,}".format(m.calls) }}{{ m.cache_hits }}{{ "%.0f"|format(m.cache_rate) }}%${{ "%.4f"|format(m.cost) }}
{% endif %} -

Ollama 優先策略 v5.0 — Agent 指揮矩陣

+ {% if mcp_matrix %}
工具服務明細

工具服務 × 呼叫端工作量

{% for m in mcp_matrix %}{% endfor %}
工具服務呼叫端工具呼叫快取快取率成本
{{ m.server }}{{ m.caller }}{{ "{:,}".format(m.calls) }}{{ m.cache_hits }}{{ "%.0f"|format(m.cache_rate) }}%${{ "%.4f"|format(m.cost) }}
{% endif %} +

Ollama 優先策略 — AI 分工指揮台

{% endblock %} diff --git a/templates/admin/ai_calls_dashboard.html b/templates/admin/ai_calls_dashboard.html index a42b055..ce5f2b4 100644 --- a/templates/admin/ai_calls_dashboard.html +++ b/templates/admin/ai_calls_dashboard.html @@ -69,7 +69,7 @@
呼叫總量
{{ "{:,}".format(total) }}{% if hourly_trend %}{% endif %}
-
權杖量
{{ "{:,}".format(summary.total_tokens or 0) }}
{{ avg_tokens }} 權杖/次
+
用量
{{ "{:,}".format(summary.total_tokens or 0) }}
{{ avg_tokens }} 單位/次
成本
${{ "%.2f"|format(summary.total_cost or 0) }}{% if hourly_trend %}{% endif %}
延遲
{{ summary.avg_duration or 0 }}ms
{{ summary.cache_hits or 0 }} 次快取命中
RAG 命中
{{ "%.1f"|format(rag_rate) }}%
{{ summary.rag_hits or 0 }} 次命中
@@ -87,7 +87,7 @@ {% if caller_richness %}
-
呼叫端編排

呼叫端 × RAG × MCP 編排矩陣

+
呼叫端編排

呼叫端 × 知識與工具編排矩陣

{% for c in caller_richness %}{% endfor %}
呼叫端總呼叫RAG 命中MCP 編排RAG 反饋筆數
{{ c.caller }}{{ "{:,}".format(c.total_calls) }}{{ "%.1f"|format(c.rag_hit_rate) }}% ({{ c.rag_hits }}){{ "%.1f"|format(c.mcp_rate) }}%{% if c.feedback_count > 0 %}{{ "%.2f"|format(c.avg_rag_feedback) }}/5{% else %}{% endif %}{{ c.feedback_count }}
{% endif %} @@ -99,7 +99,7 @@
{% for row in by_provider[:4] %} -
{{ obs_label.provider(row.provider) }}{{ "{:,}".format(row.calls) }}${{ "%.2f"|format(row.cost) }} · {{ "{:,}".format(row.tokens) }} 權杖
+
{{ obs_label.provider(row.provider) }}{{ "{:,}".format(row.calls) }}${{ "%.2f"|format(row.cost) }} · {{ "{:,}".format(row.tokens) }} 用量
{% else %}
尚無供應商資料
{% endfor %}
@@ -107,7 +107,7 @@ {% if recent_contexts %}
-
Agent 上下文

最近上下文

+
AI 上下文

最近上下文

{% for c in recent_contexts[:5] %}
{{ c.agent_name }} {{ c.context_key }}
{{ c.preview }}{% if c.preview|length >= 120 %}…{% endif %}
{% endfor %}
@@ -119,7 +119,7 @@ {% if by_model %}
模型成本

依模型細分

-
{% for m in by_model %}{% endfor %}
模型供應商呼叫權杖成本耗時錯誤
{{ m.model[:35] }}{{ obs_label.provider(m.provider) }}{{ "{:,}".format(m.calls) }}{{ "{:,}".format(m.tokens) }}${{ "%.4f"|format(m.cost) }}{{ m.avg_ms }} ms{% if m.errors > 0 %}{{ m.errors }}{% else %}0{% endif %}
+
{% for m in by_model %}{% endfor %}
模型供應商呼叫用量成本耗時錯誤
{{ m.model[:35] }}{{ obs_label.provider(m.provider) }}{{ "{:,}".format(m.calls) }}{{ "{:,}".format(m.tokens) }}${{ "%.4f"|format(m.cost) }}{{ m.avg_ms }} ms{% if m.errors > 0 %}{{ m.errors }}{% else %}0{% endif %}
{% endif %} diff --git a/templates/admin/observability_overview.html b/templates/admin/observability_overview.html index e80456f..489c00f 100644 --- a/templates/admin/observability_overview.html +++ b/templates/admin/observability_overview.html @@ -434,7 +434,7 @@
24 小時呼叫
{{ "{:,}".format(ai.total) if ai else '—' }}
-
權杖量:{{ "{:,}".format(ai.tokens) if ai else '—' }}
+
用量:{{ "{:,}".format(ai.tokens) if ai else '—' }}
diff --git a/templates/admin/ppt_audit_history.html b/templates/admin/ppt_audit_history.html index 6393b6a..85eb6e6 100644 --- a/templates/admin/ppt_audit_history.html +++ b/templates/admin/ppt_audit_history.html @@ -263,7 +263,7 @@
工作隊列

接下來要處理的事

- 把缺漏、預覽、視覺 QA、DB 寫入集中成工作隊列 + 把缺漏、預覽、視覺 QA 與產出紀錄集中成工作隊列
{% for lane in pipeline_view.action_lanes %} @@ -413,7 +413,7 @@ 目前缺漏 {{ auto_generation.missing_count }} 類
- DB 紀錄 + 產出紀錄 {{ generation_runs|length }} 本月最近寫入
@@ -426,7 +426,7 @@
報表覆蓋矩陣 - DB / 預覽 / 視覺 QA / 交付 + 紀錄 / 預覽 / 視覺 QA / 交付
{% for item in auto_generation_items %}
@@ -481,7 +481,7 @@
{% if auto_generation.enabled %} - {{ auto_generation.cadence_summary }} 會定期產出並寫入 DB;目前缺漏 {{ auto_generation.missing_count }} 類。視覺 QA 可立即補跑,或等待每日 22:00 排程。 + {{ auto_generation.cadence_summary }} 會定期產出並保存紀錄;目前缺漏 {{ auto_generation.missing_count }} 類。視覺 QA 可立即補跑,或等待每日 22:00 排程。 {% else %} PPT_AUTO_GENERATION_ENABLED=false,已停用自動補齊。 {% endif %} @@ -489,10 +489,10 @@
-
DB 產出紀錄
-

最近寫入 ppt_generation_runs

+
產出紀錄
+

最近產出

- 產出檔案、參數、狀態會同步保留在資料庫 + 產出檔案、參數、狀態會同步保留供追蹤
{% if generation_runs %}
@@ -522,7 +522,7 @@
{% else %}
- 本月尚無 DB 產出紀錄;先補排程或手動產出,再進行視覺 QA。 + 本月尚無產出紀錄;先補排程或手動產出,再進行視覺 QA。
{% endif %}
@@ -622,18 +622,18 @@ {% if f.source == 'database' %} {% if f.file_exists %} {% if f.is_valid_ppt %} - 資料庫快取 + 檔案可預覽 + 產出紀錄 + 檔案可預覽 {% else %} - 資料庫快取 + 檔案損毀,建議重跑 + 產出紀錄 + 檔案損毀,建議重跑 {% endif %} {% else %} - 資料庫快取(檔案未落盤) + 產出紀錄(檔案未落盤) {% endif %} {% elif f.source == 'both' %} {% if f.is_valid_ppt %} - 檔案 + 資料庫 + 檔案 + 產出紀錄 {% else %} - 檔案 + 資料庫,檔案損毀 + 檔案 + 產出紀錄,檔案損毀 {% endif %} {% else %} {% if f.is_valid_ppt %} diff --git a/templates/ai_recommend.html b/templates/ai_recommend.html index 71232bf..9986cde 100644 --- a/templates/ai_recommend.html +++ b/templates/ai_recommend.html @@ -88,7 +88,7 @@
- +