📖 前置知識
呷爸 jaba 是一個 AI 驅動的午餐訂便當系統,透過 LINE Bot 讓群組點餐變得簡單直覺。
專為團隊設計的午餐訂餐系統,使用者只需在 LINE 群組中用自然語言告訴呷爸想吃什麼,系統就會自動處理訂單。
功能特色
LINE 群組點餐:
- 群組點餐 Session - 說「開單」開始、「收單」結束
- AI 對話訂餐 - 用自然語言與 AI 互動,說「我要雞腿便當」就能完成訂餐
- 共享對話歷史 - AI 可理解跟單(+1)等上下文
- 多店家選擇 - 當天有多家店時,可自由選擇
- 訂單修改 - 可新增、移除品項或取消訂單
- 飲料縮寫辨識 - 支援「微微」「少少」「半半」等常見點法
- 自動過濾 - AI 自動辨識訂餐訊息,忽略閒聊
- 特價優惠 - 自動套用促銷折扣(買一送一、第二杯折扣)
- 卡路里估算 - AI 自動估算餐點熱量
- 個人偏好 - 透過 1對1 聊天記住稱呼和飲食偏好,群組點餐時自動套用
超級管理員功能:
- 群組管理 - 管理多個 LINE 群組的訂單
- 群組選擇器 - 切換不同群組查看訂單
- 訂單 CRUD - 編輯、刪除使用者訂單
- 代理點餐 - 代替群組成員新增訂單
- 付款追蹤 - 標記付款狀態、處理退款
- 店家管理 - 新增、編輯、啟用/停用店家
- 菜單辨識 - 上傳菜單圖片,AI 自動辨識並建立菜單
- 差異預覽 - 辨識後顯示新增/修改/可刪除項目
- 特價辨識 - 自動識別促銷標示(買一送一、第二杯折扣、限時特價)
- 菜單編輯 - 手動調整品項名稱、價格、尺寸變體
- 今日設定 - 設定單一或多家今日營業店家
- 歷史清理 - 清除過期訂單資料
系統功能:
- 即時同步 - Socket.IO 即時廣播訂單與狀態變更
- 看板頁面 - 顯示所有群組訂單、美食評論區、LINE QRCode
- 美食評論區 - 顯示 LINE 群組中的點餐對話
- Session 管理 - 每日對話紀錄自動管理
- LINE Bot 介面 - 群組點餐的入口
系統架構

技術棧
| 技術 | 用途 |
|---|---|
| FastAPI | Web 框架 |
| Socket.IO | 即時通訊 |
| Claude / Gemini | AI 對話與菜單辨識 |
| JSON 檔案 | 資料儲存(無資料庫) |
| uv | 套件管理 |
兩個主頁面
| 頁面 | 路徑 | 功能 |
|---|---|---|
| 看板頁 | / |
群組訂單總覽、美食評論區、LINE QRCode |
| 管理頁 | /manager |
超級管理員:群組訂單管理、店家管理、付款追蹤 |
看板頁面:

顯示所有群組的訂單、美食評論區(LINE 群組對話)、LINE QRCode 方便加入呷爸好友。
超級管理員頁面:

管理員可選擇群組、查看訂單、代理點餐、標記付款狀態。
使用方式
LINE 群組點餐:
- 將呷爸 LINE Bot 加入群組
- 發送啟用密碼讓呷爸加入白名單
- 點餐流程:
- 發送「開單」開始群組點餐
- 與呷爸對話:「我要雞腿便當」「+1」「珍奶 微微 L」
- 發送「收單」結束點餐並顯示統計
超級管理員:
- 開啟管理頁
/manager - 輸入管理員密碼登入
- 選擇群組查看訂單、編輯、標記付款
- 透過 AI 對話設定店家:「今天吃佳香味」
- 上傳菜單圖片讓 AI 自動建立菜單
AI Prompt Context 架構
呷爸的 AI 對話由四個層次組成,每次對話時動態組合:
┌─────────────────────────────────────────────────────────┐
│ Layer 4 (Top): 當前訊息 (Current Message) │
│ └─ 使用者輸入的文字 │
├─────────────────────────────────────────────────────────┤
│ Layer 3: 對話歷史 (Chat History) │
│ └─ 最近 20 條對話記錄 │
├─────────────────────────────────────────────────────────┤
│ Layer 2: 動態上下文 (Dynamic Context) │
│ └─ JSON: 今日店家、菜單、使用者偏好、目前訂單 │
├─────────────────────────────────────────────────────────┤
│ Layer 1 (Base): 系統提示詞 (System Prompt) │
│ └─ group_ordering_prompt.md 或 manager_prompt.md │
└─────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────┐
│ AI Response │
│ {message, actions[]}│
└─────────────────────┘
三種 AI 模式:
| 模式 | 提示詞 | 用途 |
|---|---|---|
| 群組點餐 | group_ordering_prompt.md |
LINE 群組訂餐 |
| 個人偏好 | personal_prompt.md |
1對1 聊天設定偏好 |
| 管理員 | manager_prompt.md |
店家設定 |
動態上下文範例(群組點餐模式):
{
"today": "2025-12-09",
"today_stores": [{"store_id": "coco", "store_name": "CoCo都可茶飲"}],
"group_id": "C1234567890",
"group_name": "午餐群",
"session_active": true,
"group_orders": [{ "user_id": "U123", "display_name": "小明", "items": [...] }]
}
支援多個 AI Provider:
- Claude CLI (haiku, sonnet, opus)
- Gemini CLI
菜單辨識與差異預覽
上傳菜單圖片,AI 自動提取結構化資訊:
- 識別品項名稱和價格
- 識別促銷標記(買一送一、第二杯折扣、限時特價)
- 識別尺寸變體(大杯/中杯)
- 差異預覽後選擇性應用變更

辨識後顯示差異預覽:綠色為新增、黃色為修改、紅色為可刪除,可選擇性套用變更。
專案結構
jaba/
├── main.py # FastAPI 應用程式入口
├── app/
│ ├── ai.py # AI 整合主入口
│ ├── data.py # 資料存取模組
│ └── providers/ # CLI Provider 模組
│ ├── __init__.py # BaseProvider 抽象類別與工廠
│ ├── claude.py # Claude CLI 實作
│ └── gemini.py # Gemini CLI 實作
├── data/
│ ├── stores/ # 店家資料與菜單
│ │ └── {store_id}/
│ │ ├── info.json # 店家資訊
│ │ ├── menu.json # 菜單
│ │ └── images/ # 菜品圖片
│ ├── linebot/ # LINE Bot 群組資料
│ │ └── sessions/
│ │ └── {group_id}.json # 群組點餐 session(含訂單、付款)
│ ├── users/ # 使用者資料(以 LINE User ID 識別)
│ │ └── {line_user_id}/
│ │ ├── profile.json # 使用者偏好
│ │ └── chat_history/ # 對話歷史
│ ├── board_chat/ # 看板聊天記錄
│ └── system/ # 系統設定
│ ├── config.json # 系統配置
│ ├── today.json # 今日店家
│ ├── ai_config.json # AI 模型設定
│ └── prompts/ # AI 提示詞
├── templates/ # HTML 頁面
├── demo/ # Demo 截圖
└── static/ # 靜態資源
快速開始
# 安裝相依套件
uv sync
# 設定 API 金鑰
export ANTHROPIC_API_KEY="your-api-key"
# 啟動伺服器
uv run uvicorn main:socket_app --reload --host 0.0.0.0 --port 8098
# 開啟瀏覽器
# http://localhost:8098