🎯 目標
把 Day18 產生的 ONNX 模型(recommender_E001.onnx、recommender_E002.onnx)部署到 Spring Boot 環境中
讓 API /api/recommendations/ai 自動讀取最新模型
確保從 ETL → 訓練 → 匯出 → API 查詢是一條完整可運行鏈路
提供 更新/重新載入模型的機制(無須重啟服務)
🏗️ 技術設計
1. 模型存放位置
預設路徑:~/mywork/mySpringbootmall/models/
recommender_E001.onnx
recommender_E002.onnx
Spring Boot application.properties 新增:
2. Spring Boot ModelService
新增 ModelService.java:
啟動時讀取 model.dir 下的所有 .onnx
用 ONNX Runtime 建立 OrtSession
存入一個 ConcurrentHashMap<String, OrtSession>
key = effectId (E001, E002)
提供 reloadModels() 方法
重新掃描資料夾 → 更新快取
不必重啟 Spring Boot
3. API 增強
/api/recommendations/ai?effectId=E001
使用對應 OrtSession 推論
/api/admin/reload-models(POST)
呼叫 ModelService.reloadModels()
回應:成功載入的模型列表
4. Flyte 與 Spring Boot 銜接
在 Day18 pipeline 結尾新增一個 task:
把 recommender_E001.onnx 複製到 Spring Boot 的 models/ 資料夾
用 requests.post("http://localhost:8080/api/admin/reload-models") 通知服務刷新
這樣每次 pipeline 成功,API 都能用新模型
🧪 測試計畫
先清空 models/ 資料夾,確認 /api/recommendations/ai 回傳錯誤(模型不存在)
跑 wf_etl_train_pipeline → 產生 recommender_E001.onnx
檢查 Spring Boot logs,確定有 reload 模型
測試 API:
改用新資料再訓練一次 → 模型覆蓋 → API reload → 結果應不同
✅ 驗收標準
models/ 目錄存在最新 ONNX 模型
/api/recommendations/ai 能根據模型輸出排序結果
/api/admin/reload-models 能手動更新模型
Flyte pipeline 執行完,API 自動用上新模型
📦 今日交付
src/main/java/com/grace/mySpringbootmall/service/ModelService.java
src/main/java/com/grace/mySpringbootmall/controller/AdminController.java
application.properties 增加 model.dir
Flyte task t_deploy_model():複製 onnx 並呼叫 reload API