從 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 預測功能獨立成微服務,而非將其耦合在單體應用程式中,能帶來巨大的優勢:
技術棧的自由度:Web 開發與 AI/ML 開發往往需要不同的技術棧。我們的專案利用了 PHP Laravel 強大的後端開發能力(如路由、認證、ORM)來處理業務邏輯,同時使用 Python FastAPI 則能無縫整合龐大的資料科學函式庫,如
pandas
、scikit-learn
或 Prophet,讓 AI 開發事半功倍。獨立部署與擴展:AI 模型的推論往往是高運算負載的,它可能需要更多的 CPU 或 GPU 資源。透過微服務,當預測請求量大增時,你可以獨立擴展
fastapi_service
的容器數量,而不會影響到 Laravel API 閘道器的運作,反之亦然。關注點分離:Laravel 服務專注於處理使用者認證、資料庫 CRUD (增刪查改) 與快取等「業務」核心;FastAPI 服務則專注於執行「AI」核心,即從資料庫取得數據、進行模型推論並回傳結果。這種清晰的職責劃分,讓團隊協作和程式碼維護變得更加容易。
完整端到端請求流程
為了讓你更快速地掌握整個架構的運作脈絡,以下是一個從使用者介面到模型推論的完整端到端請求流程:
使用者登入:使用者透過 Vue 前端的登入頁面,提交帳號密碼,成功後從 Laravel API 取得 JWT (JSON Web Token)。
發送預測請求:使用者點擊預測按鈕,Vue 前端帶著 JWT 向 Laravel API 發送一個帶有菜品 ID 的請求,例如
/api/forecast?dish_id=1
。Laravel 驗證與快取檢查:Laravel 的中介層首先會驗證 JWT 的有效性。接著,
ForecastController
會檢查 Redis 快取中是否已有該菜品 ID 的預測結果。請求轉發:若 Redis 中沒有快取,Laravel 會使用
Http
客戶端,將請求轉發給內部的 FastAPI 預測服務,URL 為http://fastapi_service:8001/api/forecast
。FastAPI 模型推論:FastAPI 接收到請求後,會透過 SQLAlchemy 從 MySQL 資料庫中讀取該菜品的歷史銷售數據,然後將數據送入預測模型進行推論。
結果回傳與快取:FastAPI 將預測結果回傳給 Laravel。Laravel 收到結果後,會先將其存入 Redis 快取,以供後續相同請求使用,然後再將結果返回給 Vue 前端。
前端視覺化: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 功能整合到你的下一個應用程式中!
沒有留言:
張貼留言