手冊首頁 / AI 分析 / AI 儀表板

AI 儀表板(AI Dashboard)

功能群:報表與儀表板|兩類產出先讀 功能群總覽

事實基準:2026-07-05 從 FE(views/dynamic-dashboard/composables/useDashboardGenerator.js)/ BE(api/ai_dashboardapp/ai_dashboardinfra/ai_dashboard)code 掃出;error code 對 common/code/error_code.py;模型 ID 對 infra/ai_dashboard/ai_client/claude_client.py

1. 功能描述

AI 儀表板讓使用者用自然語言 prompt 生成一份動態儀表板:後端跑五階段管線(AI 選資料 API → 取資料 → 統計 → AI 設計版面 → 組裝 JSON),前端渲染成 Ultima UI 元件並抽出圖表。生成結果 per-request、不落 DB(無專屬儀表板表)。

主要使用者:需快速視覺化 GRC 資料的人(全域工具,任何登入者皆可用)。

角色速覽

角色 一句話
使用者 輸入 prompt 生成儀表板(auto-generate 需 JWT;health 免 JWT)

1.1 功能總覽(本頁全部功能)

# 功能 說明 位置 詳述
1 後端健康檢查 進頁檢查生成服務可用性 → 狀態徽章 PromptBar UC-AID-01
2 自然語言 prompt 輸入描述、按生成或 Enter PromptBar UC-AID-01
3 範本快速起手 內建範本(個人待辦事項儀表板)點擊帶入 prompt Templates §5
4 載入狀態 生成中進度條 + 重試次數 LoadingState §5
5 錯誤處理 錯誤訊息 + 建議 + 可重試時重試鈕 ErrorMessage UC-AID-01
6 生成儀表板渲染 DynamicPrimeComponent 渲染 Ultima 結構 主區 §10
7 戰情室概覽 從結構抽出最多 3 張圖表卡片 BattleRoom §10
8 重新生成 對同 prompt 再跑一次 生成區 UC-AID-01

UC(§2)展開 生成主流程(健康檢查 → prompt → 生成 → 渲染 / 重試)。

2. Use Case

角色速覽

角色 一句話
使用者 輸入 prompt 生成儀表板(auto-generate 需 JWT;health 免 JWT)

流程圖視覺慣例:菱形 = 判斷、橘底 = AI 步驟 / 例外、紅框 = 錯誤(標 error code)、綠框 = 成功終點、虛線 = 可選路徑。

UC-AID-01 生成 AI 儀表板

項目 內容
角色 使用者
前置條件 後端生成服務在線(health 檢查通過);AI API Key 已設環境變數
產出 / 後置條件 回傳 dashboard JSON(object)+ data_count + tokens_used;前端渲染、抽圖表;不儲存
uc_aid_01 UC-AID-01 生成 AI 儀表板(健康檢查 → prompt → 生成 → 渲染 / 重試) enter 進入 /dashboard/ai-dashboard health checkBackendStatus GET /ai-dashboard/health(無需 JWT) enter->health online 後端在線? health->online off 狀態徽章離線、生成鈕停用 online->off input 輸入自然語言 prompt(或點範本) online->input gen POST /ai-dashboard/auto-generate {prompt, provider:claude, speed} (JWT required;prompt 1–2000 字) input->gen ok 回 {object} → DynamicPrimeComponent 渲染 擷取最多 3 圖表 → 戰情室 gen->ok 成功 err AI_DASHBOARD_500001 生成失敗 / 400001 API Key 未設 / 400002 不支援供應商 gen->err 失敗 retry 錯誤訊息 + 建議;canRetry 時可重試 err->retry retry->gen 重試
UC-AID-01:健康檢查 → prompt → auto-generate → 渲染;失敗顯示建議可重試

3. 權限矩陣

操作 FE 判定 BE 強制 BE 檢查位置
健康檢查 進頁自動 無 JWT(公開);回供應商 / 速度清單 api/ai_dashboard/routes/ai_dashboard_route.py::health
生成儀表板 選單能力 + 後端在線 @jwt_required();prompt 1–2000 字驗證 同檔 AiDashboardAutoGenerateRoute.post

生成時以 JWT 帶出 DashboardContextuser_uid / user_id / tenant_id / org_unit_id / locale)注入資料 API——查詢受 RLS / tenant 隔離(見 §11)。

4. 狀態機與前置條件

本頁無持久狀態機(無儲存)。生成前置與 gate:

條件 效果 出處
health 不通過 狀態徽章離線、生成鈕停用 useDashboardGenerator.js(checkBackendStatus)
AI API Key 未設 AI_DASHBOARD_400001 claude_client.py(init 檢查 ANTHROPIC_API_KEY
provider 不支援 AI_DASHBOARD_400002 AIClientFactory.get_client
生成失敗 AI_DASHBOARD_500001(回 success=false 時) AiDashboardAutoGenerateRoute.post
AI 選到的服務 / 方法不存在 AI_DASHBOARD_404001 / 404002 DataAPIService._get_service_instance

5. UI 設計

📸 實際畫面截圖待補(一律亮色模式拍攝;截圖另有專責 session)。預計補到 assets/img/: ① 空狀態(PromptBar + 範本) aid-empty.png ② 生成中 loading aid-loading.png ③ 生成結果(儀表板 + 戰情室圖表) aid-result.png ④ 錯誤訊息 aid-error.png

版面骨架與區塊職責:

開啟:UC-AID-01 生成 AI 儀表板 PromptBar:健康狀態徽章 + 自然語言輸入框 +「生成」鈕(Enter 可送出) GET /ai-dashboard/health(免 JWT)・ POST /ai-dashboard/auto-generate(JWT) → UC-AID-01(健康檢查 → prompt → 生成,點我開啟) Templates 範本快速起手(未生成且未載入才顯示,如「個人待辦事項儀表板」) 點擊範本卡帶入 prompt 到 PromptBar(不呼叫 API) LoadingState(生成中才顯示) 進度條 + 重試次數 (五階段管線跑在後端,見 §10) 開啟:UC-AID-01(含錯誤重試路徑) ErrorMessage(生成失敗才顯示) AI_DASHBOARD_400001/002/003/004・500001・404001/002 → UC-AID-01(錯誤 + 建議 + 可重試,點我開啟) 開啟:§6 API 規格(auto-generate 回傳 Ultima JSON) 生成儀表板渲染(DynamicPrimeComponent:Container / Card / DataTable,遞迴渲染 Ultima 結構) POST /ai-dashboard/auto-generate → data.object(Ultima Container JSON) 回傳同時含 data_count + tokens_used(input/output/cache_creation/cache_read) → §6 API 規格(auto-generate 完整欄位,點我開啟) 「重新生成」鈕:對同 prompt 再跑一次五階段管線 開啟:§6 API 規格(戰情室資料來自同一份 Ultima 結構) 戰情室概覽 BattleRoom(chartsFromAI > 0 才顯示;從結構抽最多 3 張圖表卡片) extractChartsFromStructure:走訪樹找 type==='chart',以指紋去重、限 3 張 → §6 API 規格(chart 節點結構出自同一 auto-generate response,點我開啟) 後端五階段管線(AI 選 API → 取資料 → 統計 → AI 設計版面 → 組裝 Ultima JSON):per-request、不落 DB,見 §10 圖 彩色=主要互動/明細區塊,整塊可點擊跳轉 §6/UC|灰=本頁結構|虛線框=loading/error/範本/戰情室等條件顯示層 API 僅列代表性 2~3 條,完整規格見 §6;本頁生成結果 per-request、不落 DB
AI 儀表板 wireframe:PromptBar/範本/載入/錯誤/生成儀表板/戰情室,彩色區塊可點跳 §6 API 規格與 UC-AID-01

狀態呈現:PromptBar 狀態徽章由 health 決定(在線 success / 離線 danger);生成鈕在 loading 或離線時停用;未生成且未載入顯示 Templates;生成後主區 DynamicPrimeComponent 渲染 Ultima 結構,chartsFromAI > 0 才顯示戰情室(抽最多 3 圖表、以指紋去重)。

6. API 規格

Envelope:成功 {"status": true, "data": …}、失敗 {"error_code": "AI_DASHBOARD_…", "msg": "…"}

6.1 總清單(本頁呼叫的全部 endpoint)

分類 Method + Path 說明 完整規格
健康 GET /ai-dashboard/health 生成服務狀態 + 供應商 / 速度清單(免 JWT) §6.2
生成 POST /ai-dashboard/auto-generate 五階段生成儀表板(JWT) §6.2

6.2 核心 endpoint(欄位對照 route / service,出處標段末)

[GET] /ai-dashboard/health

免 JWT。回靜態健康狀態 + 可用供應商(claude / openai / google)+ 速度(fast / balanced / powerful)。出處:api/ai_dashboard/routes/ai_dashboard_route.py::health

[POST] /ai-dashboard/auto-generate

Request:

{
  "prompt": "string",     // 必,1–2000 
  "provider": "claude",   // 預設 claude
  "speed": "balanced"     // 預設 balanced
}

(FE 送 speed:'fast')。以 JWT 組 DashboardContext(user_uid, user_id, tenant_id, org_unit_id, locale)。五階段管線(見 §10)。Response data

{
  "object": {},           // <Ultima Container JSON>
  "query_plan": {},
  "data_count": 0,
  "tokens_used": {
    "input": 0,
    "output": 0,
    "cache_creation": 0,
    "cache_read": 0
  },
  "auto_generated": true
}

出處:api/ai_dashboard/routes/ai_dashboard_route.py::AiDashboardAutoGenerateRouteapp/ai_dashboard/service/ai_dashboard_app_service.py::generate_dashboard_auto

7. 前端檔案地圖(compliance-manager-fe/)

檔案 角色
src/views/dynamic-dashboard/DynamicDashboard.vue 主檢視(協調 prompt / 生成 / 渲染)
src/views/dynamic-dashboard/components/DashboardPromptBar.vue 自然語言輸入 + 狀態徽章 + 生成鈕
src/views/dynamic-dashboard/components/DashboardTemplates.vue 內建範本卡
src/views/dynamic-dashboard/components/DashboardLoadingState.vue 載入進度 + 重試次數
src/views/dynamic-dashboard/components/DashboardErrorMessage.vue 錯誤 + 建議 + 重試
src/views/dynamic-dashboard/components/DashboardBattleRoom.vue 戰情室(抽取圖表卡片)
src/composables/useDashboardGenerator.js 生成狀態機(health / generate / 圖表抽取 / 重試)
src/config/router/index.js:648-655 route ai-dashboard/dashboard/ai-dashboard
src/config/api/api.js:375-376 AI_DASHBOARD_AUTO_GENERATE / AI_DASHBOARD_GENERATE_HEALTH
src/config/locales/i18n/*/dynamic-dashboard.json 頁面 i18n

8. 後端檔案地圖(本頁核心鏈路)

鏈路 Route App Service 底層
健康 api/ai_dashboard/routes/ai_dashboard_route.py::health 靜態
生成 同檔 AiDashboardAutoGenerateRoute app/ai_dashboard/service/ai_dashboard_app_service.py::generate_dashboard_auto(五階段) domain/ai_dashboard/service/dashboard_generation_domain_service.py(統計 + 組裝)、app/ai_dashboard/service/data_api_service.py(動態呼叫)、app/ai_dashboard/service/api_registry.py(~40 API 目錄)、infra/ai_dashboard/ai_client/*(LLM client)

DDD 提醒:資料查詢透過 data_api_service 動態路由到既有服務方法(api_registry 映射),注入 DashboardContext 保留 RLS / tenant 隔離;不繞過既有 domain service 直接查 DB。LLM client 在 infra 層(ClaudeClient / OpenAIClient / GoogleClient)。

9. DB

9.1 資料表總清單

讀/寫 說明
(無專屬表) AI 儀表板不持久化:每次請求即時生成,結果只在記憶體回傳前端;無儀表板 / 歷史表
(間接讀)GRC 各模組表 第②階段由 AI 選定的資料 API 透過既有 domain service 讀(依 prompt 而定,如任務佇列 / 專案 / 控制統計)

main_app.py 曾有「AI Dashboard schema analyzer」啟動初始化,目前已註解不執行(見 §11)。無 _trans / 專屬 dump 表。

10. 頁面邏輯與資料對應

生成管線(五階段)

aid_pipeline AI 儀表板後端五階段生成管線(POST /ai-dashboard/auto-generate) prompt prompt + provider(claude) + speed + DashboardContext(user/tenant/org/locale) s1 ① AI 選 API _ask_ai_to_select_api 從 api_registry(~40 服務) 選 main_api prompt->s1 s2 ② 取資料 data_api_service.call_api 動態呼叫該服務方法(注入 context) s1->s2 s3 ③ 統計分析 analyze_data_stats 分布 / 計數(專案/群組/控制/狀態) s2->s3 s4 ④ AI 設計版面 _ask_ai_to_design_layout analysis_blocks + table s3->s4 s5 ⑤ 組裝 JSON build_dashboard_from_design Ultima Container/Card/DataTable s4->s5 out 回傳 {object, data_count, tokens_used, auto_generated} (不落 DB) s5->out
五階段:AI 選 API → 取資料 → 統計 → AI 設計版面 → 組裝 Ultima JSON
  1. AI 選 API_ask_ai_to_select_api):LLM 從 api_registry(~40 服務方法目錄)選最合適的 main_api(附理由),用 prompt 快取。
  2. 取資料data_api_service.call_api):動態呼叫該服務方法,注入 DashboardContext(RLS / tenant)。
  3. 統計analyze_data_stats):算分布 / 計數(project_name / group_name / control_no / job_status 等維度)。
  4. AI 設計版面_ask_ai_to_design_layout):LLM 依統計 + 樣本產出 analysis_blocksstat / status-breakdown / category-breakdown)+ table
  5. 組裝build_dashboard_from_design):組成 Ultima UI Container / Card / DataTable JSON 樹回傳。

前端渲染dashboardStructureobject)→ DynamicPrimeComponent 遞迴渲染;extractChartsFromStructure 走訪樹抽出 type==='chart' 節點、指紋去重、限 3 張 → 戰情室。

錯誤對應AI_DASHBOARD_400001(API Key 未設)/ 400002(不支援供應商)/ 400003(查詢計畫格式錯)/ 400004(AI 解析失敗)/ 500001(生成失敗)/ 404001(服務映射找不到)/ 404002(服務方法不存在)→ ErrorMessage(含建議 + 可重試判斷)。

11. 背景行為與外部依賴

類型 內容
LLM 供應商 預設 claude(另支援 openai / google);供應商 factory 依 provider 選 client
Claude 模型(依 speed,取自 infra/ai_dashboard/ai_client/claude_client.py fast = claude-haiku-4-5-20251001(max 8192)/balanced = claude-sonnet-4-5-20250929(16384)/powerful = claude-opus-4-5-20251101(16384);未指定 speed 預設 balanced
Prompt 快取 僅 Claude:system block cache_control: ephemeral;回報 cache_creation / cache_read tokens
環境變數 ANTHROPIC_API_KEY(Claude)/ OPENAI_API_KEY / GOOGLE_API_KEY;未設擋 AI_DASHBOARD_400001
啟動初始化 main_app.py 的 schema analyzer 初始化已註解(不執行)——生成不依賴預先 schema 掃描
Socket 本頁 socket
持久化 ——結果 per-request 生成、不存 DB

12. 邊界情況與已知坑

  1. 不持久化:生成結果只在記憶體、回傳即渲染;重整頁面 / 重新生成即失,無「我的儀表板」清單可回讀。要保留需另外截圖 / 匯出(本頁未提供匯出)。
  2. health 免 JWT:健康檢查端點公開;auto-generate 才要 JWT。
  3. 兩層 AI 呼叫成本:一次生成含兩次 LLM 呼叫(選 API + 設計版面)+ 一次資料查詢;tokens_used 有回報但不落 DB / 不計費追蹤——高頻使用需注意 token 成本。
  4. FE 速度硬編 fast:前端送 speed:'fast'(→ haiku 模型),BE 預設值是 balanced(sonnet)——實際跑哪個模型看 FE 送的值,勿只看 BE 預設。
  5. AI 選 API 可能選錯:第①階段由 LLM 從 api_registry 選資料來源,選錯 / 選到不存在服務會擋 AI_DASHBOARD_404001/404002;prompt 與可用 API 目錄的匹配品質決定結果。
  6. RLS 靠 context 注入:資料查詢注入 DashboardContext(tenant / org),依賴既有 domain service 的 RLS——若某 API 未正確吃 context,可能跨租戶(設計上應由 data_api_service 統一注入)。
  7. 模型 ID 是程式碼現況:§11 模型 ID 取自 claude_client.py 當前值;升級模型需改該檔 MODEL_MAP,spec 同步更新。

13. 開發與驗證

  • 跑起來:BE python main_socketio.py(port 8000,log 在 log/app.log);FE 在 compliance-manager-fe/ 起 Vite dev server。需設 ANTHROPIC_API_KEY(或對應供應商 key)於環境變數,否則生成擋 AI_DASHBOARD_400001。BE 改 service code 後必須重啟(無 hot reload)
  • 測試帳號:dev 環境登入帳號密碼見 .env / 部署文件
  • 導航路徑:側邊選單「儀表板 / AI 儀表板」(/dashboard/ai-dashboard
  • 前置資料:需有可查詢的 GRC 資料(專案 / 任務 / 控制),且 AI API Key 已設;先看 health 徽章是否在線
  • E2Ecompliance-manager-test/ repo;以 AI 儀表板 / ai dashboard 搜尋 feature 檔(注意:LLM 回應非決定性,E2E 宜驗流程而非固定內容)
  • 相關文件:摘要報表見 專案摘要報表、GRC 內建儀表板見 專案儀表板;Claude API 用法見 CLAUDE.md / claude-api 參考;DB / API 全量見 GAI-SD-02/03