2026 去偽存真 AI 全民偵查黑客松(決賽) 命題單位:幣託科技 BitoPro
BitoGuard 是一套專為虛擬資產交易平台打造的 AI 智慧風控系統,透過機器學習模型即時偵測可疑用戶行為,協助合規團隊快速辨識高風險帳戶、追蹤資金流向,並自動產出可解釋的風險診斷報告;同時支援在管理中心觸發模型重訓練(retrain)、追蹤訓練進度與版本回滾。
首頁一目了然掌握全平台風控狀態:
- 用戶總數與風險等級分布(CRITICAL / HIGH / MEDIUM / LOW)
- 模型效能指標(F1 Score、Precision、Recall、誤報率)
- 即時高風險警示列表,點擊即可跳轉至詳細報告
輸入用戶 ID 即可進行即時風險評估:
- 批量或單筆查詢,秒級回應風險分數
- 查詢結果直接顯示風險等級與分數,點擊即可跳轉至完整診斷報告
- 支援一鍵匯出 CSV
針對個別用戶產出完整的風險分析報告:
- 風險評分與等級 — 量化的風險分數搭配直覺的等級標籤
- SHAP 瀑布圖 — 視覺化呈現各特徵對風險分數的貢獻度,清楚說明「為什麼被標記」
- 自然語言摘要 — AI 自動生成中文風險說明(例:「法幣進出比極端,疑似快速轉移資金」)
- 行為時序圖 — 交易次數與金額的每日變化趨勢
- 交易關聯圖譜 — 以互動式 D3.js 網絡圖呈現用戶與其他帳戶的資金往來關係,支援:
- 🖱️ 拖曳節點 — 可自由拖拉圖中任意節點重新排列佈局,鬆手後自動回彈歸位
- 🔍 縮放與平移 — 滑鼠滾輪縮放、按住拖動平移整張圖譜,方便查看大型關聯網絡
- 💡 懸停顯示資訊 — 滑鼠移至節點顯示用戶風險等級、分數、官方/模型標記;移至邊線顯示轉帳金額、幣種、時間戳與關聯細節
- 🔗 點擊跳轉報告 — 點擊任一用戶節點即可跳轉至該用戶的完整風險診斷報告頁面
依風險分數排序,讓合規人員優先處理最高風險案件:
- 依 CRITICAL → HIGH → MEDIUM → LOW 排序
- 快速篩選與搜尋功能
完整的模型生命週期管理介面:
- 模型版本管理 — 檢視所有模型版本、狀態(PRODUCTION / STAGING / ARCHIVED)與效能指標
- 一鍵重訓練 — 支援微調(Fine-tune)與全量重訓練,即時追蹤訓練進度
- 模型漂移偵測 — 監控特徵分布變化(PSI / KS 檢定),主動建議是否需要重訓練
- 版本回滾 — 發現新版模型效果不佳時,一鍵回退至上一版
透過 WebSocket 即時推送事件至前端:
- 偵測到 CRITICAL / HIGH 風險用戶時自動彈出警示
- 模型訓練進度即時更新
- 儀表板數據自動刷新,無需手動重載
- 前端:React 19 + TypeScript + Ant Design + ECharts + D3.js
- 後端:FastAPI + LightGBM + SHAP + NetworkX
- 即時通訊:WebSocket 雙向推播
- AI 報告:Amazon Bedrock (Claude Sonnet) 中文風險摘要
- Python 3.11+(推薦 Anaconda)
- Node.js 18+
- Docker Desktop(容器化部署)
使用 Docker Compose 一鍵啟動後端:
cd backend
docker compose up --build -d啟動後可在瀏覽器開啟 http://localhost:8000/docs 查看 API 文件。
# 啟動後端
cd backend
pip install -r requirements.txt
uvicorn app.main:app --host 0.0.0.0 --port 8000cd frontend
npm install
npm run dev在瀏覽器開啟 http://localhost:5173 即可進入 BitoGuard 儀表板。
┌─────────────────────────────────────────────────────────┐
│ Docker Container (bitoguard-backend) │
│ │
│ python:3.11-slim │
│ ├── /app/app/ FastAPI 應用程式碼 │
│ ├── /app/models/ ML 模型檔案(內建於映像) │
│ └── /app/data/ 交易資料(volume mount) │
│ │
│ Port: 8000 │
│ Healthcheck: GET /health │
└─────────────────────────────────────────────────────────┘
| 變數 | 預設值 | 說明 |
|---|---|---|
APP_ENV |
local |
環境(local / staging / production) |
DATA_DIR |
../data |
交易資料目錄 |
MODEL_DIR |
models |
ML 模型目錄 |
LOG_LEVEL |
INFO |
日誌等級 |
API_KEY_SECRET |
(空) | API 金鑰(production 必填) |
CORS_ORIGINS |
http://localhost:5173 |
允許的前端來源 |
AWS_REGION |
us-east-1 |
AWS 部署區域 |
S3_DATA_BUCKET |
(空) | S3 資料 bucket |
S3_MODEL_BUCKET |
(空) | S3 模型 bucket |
graph TB
User((使用者<br/>瀏覽器))
subgraph AWS["AWS Cloud (us-west-2)"]
subgraph CDN["內容分發"]
CF["CloudFront<br/>Distribution"]
end
subgraph Frontend["前端託管"]
S3F[("S3<br/>bitoguard-frontend<br/>React 靜態檔")]
end
subgraph LB["負載均衡"]
ALB["ALB<br/>HTTP :80"]
end
subgraph Compute["運算"]
ECS["ECS Fargate<br/>FastAPI :8000<br/>LightGBM · SHAP · NetworkX"]
end
subgraph Storage["資料儲存"]
S3D[("S3<br/>bitoguard-data<br/>CSV 資料集")]
S3M[("S3<br/>bitoguard-models<br/>模型 Artifacts")]
end
subgraph AI["AI 服務"]
Bedrock["Amazon Bedrock<br/>Claude Sonnet<br/>風險報告生成 ≤1 RPS"]
end
subgraph Ops["監控"]
CW["CloudWatch<br/>Logs & Alarms"]
end
ECR["ECR<br/>Container Registry"]
end
%% 使用者流量
User -->|HTTPS 靜態頁面| CF
User -->|"WebSocket (ws:// 直連)"| ALB
%% CloudFront 路由
CF -->|"/* default"| S3F
CF -->|"/api/*"| ALB
S3F -.->|OAC 授權| CF
%% ALB → ECS
ALB -->|":8000"| ECS
%% ECS 依賴
ECS -->|啟動時拉資料| S3D
ECS -->|啟動時拉模型| S3M
ECS -->|LLM 中文摘要| Bedrock
ECS -->|日誌輸出| CW
ECR -.->|Docker Image| ECS
%% 樣式
classDef userNode fill:#2196F3,color:#fff,stroke:none
classDef cfNode fill:#8B5CF6,color:#fff,stroke:none
classDef s3Node fill:#3F8624,color:#fff,stroke:none
classDef computeNode fill:#FF9900,color:#fff,stroke:none
classDef aiNode fill:#E74C3C,color:#fff,stroke:none
classDef opsNode fill:#607D8B,color:#fff,stroke:none
class User userNode
class CF cfNode
class S3F,S3D,S3M s3Node
class ALB,ECS,ECR computeNode
class Bedrock aiNode
class CW opsNode
ALB SG ── Inbound :80/443 ← 0.0.0.0/0
ECS SG ── Inbound :8000 ← ALB SG only
| 元件 | 說明 |
|---|---|
| CloudFront | CDN + 路由分流:靜態檔走 S3,API 走 ALB |
| S3 (Frontend) | Block Public Access + OAC,僅允許 CloudFront 存取 |
| ALB | HTTP 負載均衡,同時處理 REST 與 WebSocket |
| ECS Fargate | 無伺服器容器,啟動時從 S3 拉資料/模型 |
| Bedrock | LLM 風險報告,rate limit ≤ 1 RPS,失敗時 fallback 模板 |
| CloudWatch | Container stdout/stderr 日誌收集 |
系統支援在前端模型管理頁面與後端 API 兩種方式觸發 retrain:
- 前端
/models可直接發起微調(Fine-tune)或全量重訓練 - 後端提供
POST /api/v1/models/retrain觸發訓練工作 - 訓練進度可透過
GET /api/v1/models/jobs/{id}與 WebSocket 即時追蹤 - 新模型完成後可於版本列表切換狀態,必要時執行 rollback
- 漂移偵測會主動提示是否需要重新訓練
| 頁面 | 路徑 | 說明 |
|---|---|---|
| 風險總覽 | / |
全平台風控狀態總覽 |
| 用戶查詢 | /search |
輸入 ID 即時查詢風險 |
| 待審佇列 | /queue |
依風險排序的審核清單 |
| 風險報告 | /report/:userId |
個別用戶的完整診斷報告 |
| 模型管理 | /models |
模型版本、retrain、訓練進度、漂移監控 |
| 系統設定 | /settings |
風險閾值等參數調整 |
| 功能 | 方法 | 路徑 |
|---|---|---|
| 健康檢查 | GET | /health |
| 批量風險評分 | POST | /api/v1/predict |
| 用戶風險報告 | GET | /api/v1/users/{id}/report |
| 儀表板摘要 | GET | /api/v1/dashboard/summary |
| 交易關聯圖譜 | GET | /api/v1/graph/{id} |
| 觸發模型重訓練 | POST | /api/v1/models/retrain |
| 訓練進度查詢 | GET | /api/v1/models/jobs/{id} |
| 模型版本列表 | GET | /api/v1/models/versions |
| 版本回滾 | POST | /api/v1/models/versions/{v}/rollback |
| 漂移偵測狀態 | GET | /api/v1/models/drift |
| 即時事件通道 | WebSocket | /ws |
完整 API 文件請啟動後端後訪問 http://localhost:8000/docs(Swagger UI)。
本專案的原始碼以 Apache License 2.0 授權釋出。
為避免授權範圍誤解,根目錄 NOTICE 另外說明哪些內容不在 Apache-2.0 授權範圍內。除非個別檔案另有註明,下列內容不屬於本 repo 的開源原始碼授權範圍:
data/下的資料集backend/models/下的模型產物、預測輸出與衍生檔案docs/下的提案、報告、截圖與其他非程式碼素材- repository 根目錄中的競賽 PDF 與其他第三方材料
上述排除項目仍受其各自權利條款或權利人保留。





