關於這個系列
這是一系列關於 Jaba AI 群組點餐系統開發的技術分享文章。Jaba AI 整合了原本的 呷爸看板系統 與 Jaba LINE Bot,重新設計為統一的後端架構。
系統特色:
- 🤖 自然語言點餐 — 直接說「我要雞腿便當」即可點餐
- 📸 AI 菜單辨識 — 上傳菜單圖片,自動辨識品項與價格
- 🔄 即時看板 — Socket.IO 即時更新訂單狀態
- 🛡️ Prompt Injection 防護 — 完整的 AI 安全機制
- 👥 多層權限管理 — 超管、群組管理員、成員三層架構
- ⚡ 完全非同步 — FastAPI + asyncio + asyncpg 高效能設計
總計 6 個系列、11 篇文章,適合想了解現代 Python 後端開發與 AI 整合的工程師參考。
先備知識
在閱讀系列文章之前,建議先了解以下基礎概念:
| 主題 | 文章 | 說明 |
|---|---|---|
| LINE Bot 基礎 | LINE Bot 開發入門:以呷爸點餐系統為例 | Messaging API、Webhook 基礎 |
| Claude AI 基礎 | 架構選擇:Claude CLI 整合與對話設計 | CLI vs API、對話管理 |
| Docker 基礎 | Docker 基礎概念與常用指令 | 容器化基礎 |
| FastAPI + Socket.IO | 後端架構:FastAPI + Socket.IO 雙向通訊 | 即時通訊基礎 |
閱讀建議
完整學習:
- 從系列一開始,了解專案整合的思路
- 系列二掌握核心架構設計
- 系列三理解 AI 安全的重要性
- 依序閱讀後續系列
特定需求:
- 想學架構設計 → 直接看系列二
- 想做 AI 安全防護 → 直接看系列三
- 想整合 LINE Bot v3 SDK → 直接看系列四
- 想實作 AI 功能 → 直接看系列五
系列一:專案重構之路
從兩個獨立專案整合為統一後端的心路歷程
| # | 文章 | 重點 |
|---|---|---|
| 1 | 從 jaba + jaba-line-bot 到 jaba-ai:專案整合實戰 | 整合動機、架構決策、踩過的坑 |
這篇會談到:
- 為什麼要整合?分散架構的痛點
- 統一後端的好處與取捨
- 資料庫 Schema 重新設計
- API 路由規劃思路
系列二:後端架構設計
Repository Pattern 與事件驅動架構實戰
| # | 文章 | 重點 |
|---|---|---|
| 1 | Repository Pattern 實作:讓資料層乾淨分離 | 分層架構、Generic CRUD、依賴注入 |
| 2 | 事件隊列設計:解決 Socket.IO 與 DB Commit 順序問題 | ContextVar、事務化通知、一致性保證 |
這系列會談到:
- Service → Repository → Model 三層架構
- 為什麼不直接在 Service 寫 SQL?
- 前端收到通知但 fetch 不到資料的經典問題
commit_and_notify()模式的設計
系列三:AI 安全與監控
當 AI 遇上惡意輸入,如何保護系統?
| # | 文章 | 重點 |
|---|---|---|
| 1 | Prompt Injection 防護實作 | 輸入消毒、規則檢測、安全日誌 |
| 2 | AI 日誌系統:追蹤每一次對話 | 對話記錄、Token 統計、異常分析 |
這系列會談到:
- 常見的 Prompt Injection 攻擊手法
- 多層防護策略:輸入清理 + 規則檢測 + 輸出驗證
- 為什麼需要記錄每一次 AI 對話?
- 從日誌中發現潛在問題
系列四:LINE Bot 進階開發
從入門到進階,FastAPI + LINE Bot SDK v3
| # | 文章 | 重點 |
|---|---|---|
| 1 | LINE Bot v3 SDK + FastAPI 非同步整合 | SDK v3 差異、非同步處理、簽章驗證 |
| 2 | LINE 群組權限設計:從申請到審核的完整流程 | 申請流程、審核機制、狀態機設計 |
這系列會談到:
- LINE Bot SDK v3 與 v2 的差異
- FastAPI 非同步處理 Webhook 事件
- 群組申請 → 審核 → 啟用的完整流程
- 三層權限模型的實作
系列五:AI 應用實戰
自然語言點餐與菜單圖片辨識
| # | 文章 | 重點 |
|---|---|---|
| 1 | 自然語言點餐:從使用者輸入到訂單建立 | 意圖解析、上下文理解、跟單功能 |
| 2 | 菜單圖片 AI 辨識:上傳照片自動建立菜單 | 圖片處理、Claude Vision、結構化輸出 |
這系列會談到:
- 如何讓 AI 理解「我也要」、「+1」、「幫小明點」
- 對話上下文的維護策略
- 菜單圖片的預處理
- 如何讓 AI 輸出結構化的菜單資料
系列六:部署與運維
一鍵啟動、服務管理、生產環境配置
| # | 文章 | 重點 |
|---|---|---|
| 1 | 一鍵啟動腳本設計:從開發到生產的部署體驗 | Shell 腳本、參數處理、錯誤處理 |
| 2 | systemd 服務配置:讓應用程式隨系統啟動 | 服務定義、自動重啟、日誌管理 |
這系列會談到:
- 啟動腳本的設計哲學
--db-only、--app-only、--migrate等參數設計- systemd service 檔案撰寫
- journalctl 日誌查看技巧
技術棧總覽
| 層級 | 技術 |
|---|---|
| 後端框架 | FastAPI、Uvicorn、python-socketio |
| 資料庫 | PostgreSQL 16、SQLAlchemy 2.0 (Async)、asyncpg |
| 資料庫遷移 | Alembic |
| LINE 整合 | LINE Bot SDK v3、Messaging API |
| AI 引擎 | Claude (Anthropic API)、Claude Code CLI |
| 即時通訊 | Socket.IO |
| 排程任務 | APScheduler |
| 套件管理 | uv |
| 容器化 | Docker Compose |
| 服務管理 | systemd |
專案結構
jaba-ai/
├── app/ # 應用程式核心
│ ├── models/ # SQLAlchemy Models (14 個)
│ ├── repositories/ # Repository Pattern 資料存取層
│ ├── services/ # 業務邏輯層
│ ├── routers/ # API 路由層
│ ├── broadcast.py # 事件隊列與 Socket.IO 廣播
│ ├── config.py # 環境變數管理
│ └── database.py # 非同步資料庫連線
│
├── migrations/ # Alembic 資料庫遷移
├── static/ # 前端頁面 (admin, board, line-admin)
├── scripts/ # 部署腳本 (start.sh, systemd)
├── docs/ # 詳細文件
├── openspec/ # OpenSpec 規格管理
│
├── main.py # FastAPI 應用程式入口
├── pyproject.toml # 專案依賴配置
├── docker-compose.yml # PostgreSQL 容器配置
└── CLAUDE.md # Claude Code 專案指引
相關專案文章
這個系列是 Jaba 點餐系統的第三代演進,相關文章:
| 專案 | 文章 | 說明 |
|---|---|---|
| Jaba 看板 | 呷爸 jaba - 透過 LINE 群組輕鬆訂餐 | 第一代:純看板系統 |
| Jaba LINE Bot | Jaba LINE Bot - 讓點餐對話進入 LINE | 第二代:LINE Bot 整合 |
| Jaba AI | 本系列文章 | 第三代:AI 驅動的統一後端 |
參考資源
官方文件
相關工具
- Claude Code - Anthropic 官方 CLI
- uv - 極速 Python 套件管理器
- Alembic - 資料庫遷移工具
Happy Coding!