2025年8月3日 星期日

從 Laravel API Gateway 到 FastAPI 模型推論:打造你的第一個 AI 預測微服務

從 Laravel API Gateway 到 FastAPI 模型推論:打造你的第一個 AI 預測微服務


在將 AI/ML 模型落地到實際應用程式時,你是否曾糾結於該把模型推論程式碼放在哪裡?是直接塞進後端 API 伺服器,還是獨立出來?

這篇文章將以一個 「智能庫存預測」 的專案骨架為例,為你剖析如何運用 微服務架構,將 PHP 的 Laravel 作為 API 閘道器 (API Gateway),並搭配 Python 的 FastAPI 服務來專責 AI 預測功能。這種設計不僅讓架構更彈性,也為未來的擴展鋪平了道路。

您可以透過以下 GitHub 連結檢閱本專案的原始碼:https://github.com/BpsEason/stock-ai-engine.git



為什麼選擇微服務架構來處理 AI 功能?

將 AI 預測功能獨立成微服務,而非將其耦合在單體應用程式中,能帶來巨大的優勢:

  1. 技術棧的自由度:Web 開發與 AI/ML 開發往往需要不同的技術棧。我們的專案利用了 PHP Laravel 強大的後端開發能力(如路由、認證、ORM)來處理業務邏輯,同時使用 Python FastAPI 則能無縫整合龐大的資料科學函式庫,如 pandasscikit-learnProphet,讓 AI 開發事半功倍。

  2. 獨立部署與擴展:AI 模型的推論往往是高運算負載的,它可能需要更多的 CPU 或 GPU 資源。透過微服務,當預測請求量大增時,你可以獨立擴展 fastapi_service 的容器數量,而不會影響到 Laravel API 閘道器的運作,反之亦然。

  3. 關注點分離:Laravel 服務專注於處理使用者認證、資料庫 CRUD (增刪查改) 與快取等「業務」核心;FastAPI 服務則專注於執行「AI」核心,即從資料庫取得數據、進行模型推論並回傳結果。這種清晰的職責劃分,讓團隊協作和程式碼維護變得更加容易。

完整端到端請求流程

為了讓你更快速地掌握整個架構的運作脈絡,以下是一個從使用者介面到模型推論的完整端到端請求流程:

  1. 使用者登入:使用者透過 Vue 前端的登入頁面,提交帳號密碼,成功後從 Laravel API 取得 JWT (JSON Web Token)

  2. 發送預測請求:使用者點擊預測按鈕,Vue 前端帶著 JWT 向 Laravel API 發送一個帶有菜品 ID 的請求,例如 /api/forecast?dish_id=1

  3. Laravel 驗證與快取檢查:Laravel 的中介層首先會驗證 JWT 的有效性。接著,ForecastController 會檢查 Redis 快取中是否已有該菜品 ID 的預測結果。

  4. 請求轉發:若 Redis 中沒有快取,Laravel 會使用 Http 客戶端,將請求轉發給內部的 FastAPI 預測服務,URL 為 http://fastapi_service:8001/api/forecast

  5. FastAPI 模型推論:FastAPI 接收到請求後,會透過 SQLAlchemyMySQL 資料庫中讀取該菜品的歷史銷售數據,然後將數據送入預測模型進行推論。

  6. 結果回傳與快取:FastAPI 將預測結果回傳給 Laravel。Laravel 收到結果後,會先將其存入 Redis 快取,以供後續相同請求使用,然後再將結果返回給 Vue 前端。

  7. 前端視覺化:Vue 前端接收到 JSON 格式的預測數據,使用 ECharts 將其繪製成直觀的圖表,展示給使用者。


預測模型設計:選用 Prophet 與 LightGBM

在我們的 fastapi_service 中,run_prediction_model 函式是 AI 模型的核心,但它不應該只有一個單一的模型。根據不同的資料特性,選用不同的模型是 AI 開發的關鍵。

在這個專案骨架中,我們預設整合了兩種主流的預測模型,讓你在面對不同類型的資料時,能有最適合的選擇:

  • Prophet:這是一個由 Facebook 開發的開源時序預測函式庫,非常適合處理具有強烈季節性與時間趨勢的資料,例如每日、每週或每月的銷售數據。它能自動處理缺漏值與異常值,並能輕鬆納入假日、促銷活動等特殊事件的影響。

  • LightGBM:這是一個高效能的梯度提升樹 (Gradient Boosting Machine) 框架。與 Prophet 相比,它更適合處理多變數的表格型資料。如果你的預測不僅僅依賴時間序列,還需要考慮其他特徵,如:天氣、節日類型、菜品分類、促銷活動代碼等,LightGBM 能更有效地從這些複雜的變數中學習。

run_prediction_model 函式中,你可以根據傳入的資料結構或業務邏輯,實作一個動態選擇模型的判斷機制,例如:如果資料集僅包含日期和銷售量,則使用 Prophet;如果包含了多個額外的特徵,則選擇 LightGBM,以達到最佳的預測效果。


總結與啟示

透過這種「Laravel + FastAPI」的微服務架構,我們實現了一個功能強大且高度解耦的 AI 預測系統。這種設計模式不僅適用於庫存預測,也能輕鬆應用於任何需要將複雜模型推論與主業務邏輯分離的場景,例如:

  • 推薦系統:主應用程式呼叫微服務取得推薦商品清單。

  • 自然語言處理 (NLP):主應用程式將使用者輸入發送給微服務進行情感分析或關鍵字提取。

這種架構的優勢在於:

  • 更好的擴展性:你可以根據不同服務的負載獨立擴展。

  • 更高的開發效率:每個服務可以使用最適合的技術,讓開發者專注於其擅長的領域。

  • 更清晰的職責劃分:每個服務的程式碼庫都更小、更易於維護。

希望這個專案骨架能為你帶來啟發,讓你能夠更自信地將 AI 功能整合到你的下一個應用程式中!

沒有留言:

張貼留言

熱門文章