掌握 Gemini Batch API 與 Webhook 實現 LINE Bot 餐廳分析助手
- 作者

- 姓名
- Nino
- 职业
- Senior Tech Editor
在開發基於大語言模型(LLM)的應用程序時,開發者經常需要處理大量數據分析任務。例如,一次性分析數十家餐廳的評論、對大量文章進行分類,或批量生成翻譯。如果使用傳統的同步 API(實時調用),不僅會面臨嚴苛的頻率限制(Rate Limit),還可能因為網絡連接超時和極高的計算成本而導致項目失敗。
為了克服這些限制,Google 推出了 Gemini Batch API 和 Webhook API。這兩項技術的結合為非緊急性的大數據處理提供了完美的解決方案。通過 n1n.ai 提供的穩定 API 聚合服務,開發者可以更輕鬆地集成這些高級功能,確保企業級應用的穩定運行。 n1n.ai 作為領先的 LLM API 聚合器,支持多種主流模型,是開發者的首選工具。
為什麼選擇 Batch API 與 Webhook?
- Gemini Batch API:允許開發者將大量請求打包成一個 JSONL 文件並一次性上傳。Gemini 會在後台進行異步調度計算,不佔用每日的實時 API 配額,且計算成本通常僅為實時 API 的一半。這對於預算有限但數據量巨大的項目來說至關重要。
- Webhook API:傳統的 Batch 任務需要本地不斷編寫輪詢(Polling)邏輯來檢查狀態。有了 Webhook,當 Gemini 完成 Batch 計算後,會主動向你指定的 URL 發送 HTTP POST 回調,瞬間通知任務完成,使系統架構更加優雅且節省資源。
實戰案例:LINE Bot 餐廳分析助手
我們將這些強大的 API 集成到了 LINE Bot 餐廳分析助手中,實現了在移動端一鍵進行深度評論與招牌菜色的大數據分析。用戶只需發送位置,Bot 就能自動提取附近熱門餐廳並提供深度分析報告。
系統架構圖
graph TD
A[用戶發送位置] -->|位置訊息| B[Google Maps Grounding 搜尋]
B -->|純文本餐廳列表| C[Gemini-1.5-Flash 提取前三名餐廳]
C -->|動態生成快速回覆| D[LINE Bot 回覆 3 個自定義分析按鈕]
D -->|用戶點擊特定分析| E[FastAPI 後台任務]
E -->|立即回覆 ACK| F[LINE 聊天訊息]
E -->|打包 JSONL 並上傳| G[Gemini Batch API 提交]
G -->|計算完成 Webhook 回調| H[主動推送深度報告給用戶]
技術實現深度解析
1. 使用 Gemini 進行結構化數據提取
在搜尋到餐廳列表後,我們需要精確提取餐廳名稱以生成按鈕。利用 Gemini 的結構化輸出能力,我們可以確保返回的是標準的 JSON 格式:
# 提取前三個餐廳名稱用於 Quick Reply
names = []
if place_type == "restaurant":
try:
extract_prompt = f"請從以下文本中提取所有餐廳名稱,並以 JSON 數組格式返回(例如 [\"餐廳 A\", \"餐廳 B\"])。請直接輸出 JSON 數組,不要包含任何 markdown 標籤或解釋性文字。\n\n{result}"
extract_res = client.models.generate_content(
model="gemini-1.5-flash",
contents=extract_prompt
)
extract_text = extract_res.text.strip() if extract_res.text else ""
# 解析邏輯...
names = json.loads(extract_text)
except Exception as e:
logger.error(f"提取失敗: {e}")
2. 處理 LINE API 的字符限制
在實作動態 Quick Reply 時,我們遇到了一個關鍵限制:LINE API 的按鈕標籤(Label)長度不能超過 20 個字符。如果餐廳名字太長,會導致 400 錯誤。我們設計了動態截斷機制:
- 原始餐廳名稱超過 10 個字時,強制截取前 9 個字並加上「...」。
- 加上「🍴 分析」前綴後,總長度控制在 15 字以內,確保安全。
3. FastAPI 異步任務調度與超時處理
LINE Webhook 要求服務器在 3 秒內返回 HTTP 200。然而,收集評論、上傳 JSONL 並提交 Batch 任務通常需要 3-8 秒。為此,我們採用了異步處理架構:
- 快速響應:當 Bot 接收到分析請求時,立即調用
reply_message回覆用戶「正在處理中...」,並瞬間返回 HTTP 200。 - 後台執行:使用 Python 的
asyncio.create_task將繁重的網絡搜尋與 Batch 提交任務交給 FastAPI 的背景 Worker 執行。 - 主動推送:當 Webhook 收到任務完成通知後,再使用 LINE 的
push_message將報告發送給用戶。
Batch API 的優化建議
在開發過程中,我們發現 Batch 任務有時會卡在 JOB_STATE_PENDING 狀態。這是因為 Batch 任務需要排隊等待 Google 的服務器資源。我們的優化策略包括:
- 最小化工作負載:將批量分析的餐廳數量減少到 1,縮減 JSONL 的請求行數,以加快調度速度。
- 防重複點擊機制:在用戶點擊分析時,首先檢查該用戶是否有正在運行的 Batch Job。如果有,則回覆「您的分析任務正在運行中,請耐心等待」,避免重複提交造成的資源浪費。
- 多模型備選:通過 n1n.ai 的管理界面,你可以輕鬆切換不同的模型(如從 Gemini 切換到 DeepSeek 或 Claude),以應對特定型號的 API 波動。
總結
通過優化 Quick Reply 和 Gemini Batch API 的集成,我們的餐廳分析助手在移動端實現了極佳的用戶體驗。這套架構不僅解決了 Webhook 超時和 API 頻率限制的問題,還大幅降低了運營成本。對於希望構建低延遲、高穩定性大數據分析工具的開發者來說,這是一個非常值得借鑑的方案。
欲了解更多關於高性能 LLM API 的應用,請訪問 n1n.ai。
Get a free API key at n1n.ai