All checks were successful
CD Pipeline / deploy (push) Successful in 2m30s
統帥要求:「好好把 OpenClaw/Hermes/NemoTron/ElephantAlpha + Ollama 多模型
+ 外部付費 Gemini + 內外 MCP + RAG 組合發揮出 AI 自動化新境界」
新頁面 /observability/agent_orchestration 一頁式呈現 4 Agent × 5 維度全景:
J-1: caller 自動分組
- OpenClaw: openclaw_qa/daily/meta/monthly/weekly/bot_main/bot_gemini/bot_nim
+ sales_copy + code_review_openclaw
- Hermes: hermes_analyst + hermes_intent + code_review_hermes
- NemoTron: nemotron_dispatch
- ElephantAlpha: ea_engine + code_review_elephant
J-2/3: 跨表 SQL JOIN(ai_calls × mcp_calls × rag_query_log)
每個 agent 顯示:
- 24h 呼叫 + Token + 成本
- 本地 Ollama 比例(細分 GCP-A/GCP-B/111)
- 付費 LLM 比例(細分 Gemini / 其他)
- MCP 編排率(透過 request_id 跨表 JOIN mcp_calls)
- RAG 命中率
- 錯誤率 + 平均耗時
- MCP server × caller 工作量明細
自動編排建議(5 條 rule-based):
1. 付費比例 > 50% 且 ollama < 20% → 改 Hermes-first 短路
2. 錯誤率 > 10% → 觸發 Code Review Pipeline
3. MCP 編排率 < 5% 但 calls > 50 → 擴大 MCP omnisearch/firecrawl
4. RAG 命中率 ≥ 40% → 推 Telegram 收 feedback 強化 promotion gate
5. 111 fallback 比例 > 20% → GCP 兩台異常,查 host_health AIOps
J-4: 入口
- sidebar AI 觀測 group 加「Agent 編排矩陣」(07b)
- /observability/overview 入口卡升級為 7 項,Agent 編排矩陣放第一
整體 KPI 卡片:
- 總呼叫 / 本地 Ollama 比例 / 付費 LLM 成本 / RAG 命中率
- 「組合發揮」一目瞭然
8 表跨 JOIN:ai_calls × mcp_calls × rag_query_log × ai_insights ×
learning_episodes × incidents × heal_logs × host_health_probes
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
146 lines
8.4 KiB
HTML
146 lines
8.4 KiB
HTML
{#
|
||
EwoooC Frontend V2 shell.
|
||
|
||
使用方式:
|
||
{% include 'components/_ewoooc_shell.html' %}
|
||
|
||
呼叫頁需提供 active_page;未提供時會以空字串處理。
|
||
#}
|
||
|
||
{% set _active_page = active_page|default('') %}
|
||
{% set _scheduler = scheduler_stats|default({}) %}
|
||
{% set _momo_runs = _scheduler.get('momo_task', []) if _scheduler is mapping else [] %}
|
||
{% set _latest_run = _momo_runs[0] if _momo_runs else {} %}
|
||
{% set _has_scheduler_data = _latest_run is mapping and _latest_run %}
|
||
{% set _last_run = _latest_run.get('last_run', '--') if _has_scheduler_data else '--' %}
|
||
{% set _scanned = _latest_run.get('scanned_count', _latest_run.get('total_products', '--')) if _latest_run is mapping else '--' %}
|
||
{% set _added = _latest_run.get('new_records', _latest_run.get('added', '--')) if _latest_run is mapping else '--' %}
|
||
{% set _run_status = _latest_run.get('status', '') if _has_scheduler_data else '' %}
|
||
{% set _status_label = '尚無紀錄' if not _has_scheduler_data else ('最近成功' if _run_status in ['Success', 'success', 'SUCCESS'] else (_run_status or '已有紀錄')) %}
|
||
{% set _next_run = next_run|default(None) %}
|
||
{% set _session_username = session.get('username') if session is defined else None %}
|
||
{% set _session_role = session.get('role') if session is defined else None %}
|
||
{% set _is_logged_in = session.get('logged_in') if session is defined else false %}
|
||
|
||
<aside class="momo-sidebar" aria-label="主選單">
|
||
<a class="momo-sidebar-logo" href="/">
|
||
<span class="momo-logo-mark" aria-hidden="true">
|
||
<span></span><span></span><span></span>
|
||
<span></span><span></span><span></span>
|
||
<span></span><span></span><span></span>
|
||
</span>
|
||
<span class="momo-brand-word">
|
||
<span class="momo-brand-name momo-display">EwoooC</span>
|
||
<span class="momo-brand-subtitle momo-label">價格監控 V2</span>
|
||
</span>
|
||
</a>
|
||
|
||
<nav class="momo-nav momo-scroll">
|
||
<div class="momo-nav-group">
|
||
<div class="momo-nav-group-title momo-label">監控</div>
|
||
<a class="momo-nav-link {% if _active_page == 'dashboard' %}is-active{% endif %}" href="/">
|
||
<span class="momo-nav-icon"><i class="fas fa-border-all"></i></span>
|
||
<span class="momo-nav-label">商品看板</span>
|
||
<span class="momo-nav-code momo-mono">01</span>
|
||
</a>
|
||
<a class="momo-nav-link {% if _active_page in ['edm', 'campaigns'] %}is-active{% endif %}" href="/edm">
|
||
<span class="momo-nav-icon"><i class="fas fa-bullhorn"></i></span>
|
||
<span class="momo-nav-label">活動看板</span>
|
||
<span class="momo-nav-code momo-mono">02</span>
|
||
</a>
|
||
<a class="momo-nav-link {% if _active_page in ['sales', 'daily_sales', 'monthly', 'growth'] %}is-active{% endif %}" href="/sales_analysis">
|
||
<span class="momo-nav-icon"><i class="fas fa-chart-line"></i></span>
|
||
<span class="momo-nav-label">分析報表</span>
|
||
<span class="momo-nav-code momo-mono">03</span>
|
||
</a>
|
||
</div>
|
||
|
||
<div class="momo-nav-group">
|
||
<div class="momo-nav-group-title momo-label">營運</div>
|
||
<a class="momo-nav-link {% if _active_page == 'vendor_stockout' %}is-active{% endif %}" href="/vendor-stockout">
|
||
<span class="momo-nav-icon"><i class="fas fa-box-open"></i></span>
|
||
<span class="momo-nav-label">廠商缺貨</span>
|
||
<span class="momo-nav-code momo-mono">04</span>
|
||
</a>
|
||
<a class="momo-nav-link {% if _active_page in ['ai_recommend', 'ai_history', 'ai_intelligence'] %}is-active{% endif %}" href="/ai_recommend">
|
||
<span class="momo-nav-icon"><i class="fas fa-wand-magic-sparkles"></i></span>
|
||
<span class="momo-nav-label">AI 助手</span>
|
||
<span class="momo-nav-code momo-mono">05</span>
|
||
</a>
|
||
<a class="momo-nav-link {% if _active_page == 'auto_import' %}is-active{% endif %}" href="/auto_import">
|
||
<span class="momo-nav-icon"><i class="fas fa-download"></i></span>
|
||
<span class="momo-nav-label">雲端匯入</span>
|
||
<span class="momo-nav-code momo-mono">06</span>
|
||
</a>
|
||
</div>
|
||
|
||
<div class="momo-nav-group">
|
||
<div class="momo-nav-group-title momo-label">AI 觀測</div>
|
||
<a class="momo-nav-link {% if _active_page == 'obs_overview' %}is-active{% endif %}" href="/observability/overview">
|
||
<span class="momo-nav-icon"><i class="fas fa-satellite-dish"></i></span>
|
||
<span class="momo-nav-label">觀測台總覽</span>
|
||
<span class="momo-nav-code momo-mono">07</span>
|
||
</a>
|
||
<a class="momo-nav-link {% if _active_page == 'obs_agent_orchestration' %}is-active{% endif %}" href="/observability/agent_orchestration">
|
||
<span class="momo-nav-icon"><i class="fas fa-network-wired"></i></span>
|
||
<span class="momo-nav-label">Agent 編排矩陣</span>
|
||
<span class="momo-nav-code momo-mono">07b</span>
|
||
</a>
|
||
<a class="momo-nav-link {% if _active_page == 'obs_host_health' %}is-active{% endif %}" href="/observability/host_health">
|
||
<span class="momo-nav-icon"><i class="fas fa-heartbeat"></i></span>
|
||
<span class="momo-nav-label">主機健康</span>
|
||
<span class="momo-nav-code momo-mono">08</span>
|
||
</a>
|
||
<a class="momo-nav-link {% if _active_page == 'obs_ai_calls' %}is-active{% endif %}" href="/observability/ai_calls">
|
||
<span class="momo-nav-icon"><i class="fas fa-chart-bar"></i></span>
|
||
<span class="momo-nav-label">AI 呼叫</span>
|
||
<span class="momo-nav-code momo-mono">09</span>
|
||
</a>
|
||
<a class="momo-nav-link {% if _active_page == 'obs_budget' %}is-active{% endif %}" href="/observability/budget">
|
||
<span class="momo-nav-icon"><i class="fas fa-wallet"></i></span>
|
||
<span class="momo-nav-label">預算控管</span>
|
||
<span class="momo-nav-code momo-mono">10</span>
|
||
</a>
|
||
<a class="momo-nav-link {% if _active_page == 'obs_promotion_review' %}is-active{% endif %}" href="/observability/promotion_review">
|
||
<span class="momo-nav-icon"><i class="fas fa-brain"></i></span>
|
||
<span class="momo-nav-label">RAG 晉升審核</span>
|
||
<span class="momo-nav-code momo-mono">11</span>
|
||
</a>
|
||
<a class="momo-nav-link {% if _active_page == 'obs_quality_trend' %}is-active{% endif %}" href="/observability/quality_trend">
|
||
<span class="momo-nav-icon"><i class="fas fa-comments"></i></span>
|
||
<span class="momo-nav-label">反饋趨勢</span>
|
||
<span class="momo-nav-code momo-mono">12</span>
|
||
</a>
|
||
<a class="momo-nav-link {% if _active_page == 'obs_ppt_audit' %}is-active{% endif %}" href="/observability/ppt_audit_history">
|
||
<span class="momo-nav-icon"><i class="fas fa-search"></i></span>
|
||
<span class="momo-nav-label">PPT 視覺審核</span>
|
||
<span class="momo-nav-code momo-mono">13</span>
|
||
</a>
|
||
</div>
|
||
|
||
<div class="momo-nav-group">
|
||
<div class="momo-nav-group-title momo-label">系統</div>
|
||
<a class="momo-nav-link {% if _active_page in ['settings', 'system_settings', 'logs', 'crawler', 'user_management', 'ai_automation_smoke'] %}is-active{% endif %}" href="/settings">
|
||
<span class="momo-nav-icon"><i class="fas fa-gear"></i></span>
|
||
<span class="momo-nav-label">系統管理</span>
|
||
<span class="momo-nav-code momo-mono">14</span>
|
||
</a>
|
||
</div>
|
||
</nav>
|
||
|
||
<div class="momo-status-card">
|
||
<div class="momo-status-title momo-label">爬蟲狀態</div>
|
||
<div class="momo-status-active momo-mono">
|
||
<span class="momo-live-dot"></span>
|
||
<span>{{ _status_label }}</span>
|
||
</div>
|
||
<div class="momo-status-meta momo-mono">
|
||
上次執行 {{ _last_run }}<br>
|
||
掃描筆數 {{ _scanned }}<br>
|
||
新增筆數 {% if _added == '--' %}--{% else %}+{{ _added }}{% endif %}
|
||
</div>
|
||
</div>
|
||
</aside>
|
||
|
||
<div class="momo-shell-backdrop" data-momo-sidebar-close></div>
|