LINE-ROBOT / README.md
cwadayi's picture
Update README.md
8489f78 verified
metadata
title: LINE Earthquake Bot
sdk: docker
app_port: 7860

LINE 多功能地震資訊與 AI 助理機器人

這是一個部署在 Hugging Face Spaces 上的多功能 LINE Bot。它整合了來自台灣中央氣象署 (CWA) 和美國地質調查局 (USGS) 的地震資訊,並搭載了 Google 最新的 gemini-1.5-flash 模型,使其具備強大的 AI 對話與工具呼叫能力。

使用者不僅可以透過簡易指令查詢即時的地震報告與預警,還能用自然語言(例如:「幫我找找昨天規模5以上的地震」)與 AI 互動,AI 會自動呼叫外部工具來查詢資料庫,並提供分析後的智慧回答。

✨ 主要功能 (Key Features)

  • 即時地震報告: 提供來自 CWA 的最新顯著有感地震報告(含圖)及最近7天的地震列表。
  • 全球地震監控: 整合 USGS 數據,提供全球近24小時及台灣區域的顯著地震資訊。
  • 地震預警速報: 串接 CWA 地震預警 API,提供最新的地震速報。
  • 智慧 AI 助理: 搭載 Google Gemini 1.5 Flash 模型,提供流暢的中文對話能力。
  • AI 工具呼叫 (Tool Calling):
    • AI 能夠理解複雜的自然語言問題。
    • 自動呼叫外部的地震資料查詢工具 (MCP-2 Gradio App)。(可用資料 : 1973-01-01 至 2025-07-06)
    • 分析工具回傳的 JSON 資料,並生成人類易於理解的總結性回答。
  • 多樣化指令: 支援 # 數字快捷指令,方便使用者快速取用特定功能。

🏗️ 專案架構 (Architecture)

本專案採用模組化的 Python Flask 應用程式架構,並透過 Docker 容器化後部署於 Hugging Face Spaces。

  1. 使用者 -> LINE Platform
  2. LINE Platform -> Webhook -> Hugging Face Space (Gunicorn + Flask)
  3. app.py 接收請求,交由 command_handler.py 進行路由。
  4. command_handler.py 根據指令類型,分派任務至:
    • cwa_service.py: 呼叫台灣中央氣象署 API。
    • usgs_service.py: 呼叫美國地質調查局 API。
    • ai_service.py: 處理所有 AI 相關邏輯。
  5. AI 工具呼叫流程:
    • ai_service.py 將使用者問題及工具定義傳送至 Google Gemini API
    • Gemini API 回應,要求呼叫 call_earthquake_search_tool 工具。
    • ai_service.py 執行該工具,透過 gradio_client 呼叫外部的 MCP-2 Gradio App
    • 工具執行結果回傳給 ai_service.py
    • ai_service.py 將工具結果再次傳送給 Gemini API
    • Gemini API 根據資料生成最終的自然語言回答。

🛠️ 技術棧 (Technology Stack)

  • 後端: Python, Flask, Gunicorn
  • AI 模型: Google Gemini 1.5 Flash
  • API & 服務:
    • LINE Messaging API
    • CWA Open Data API
    • USGS Earthquake API
    • Gradio (用於 MCP 工具)
  • 部署: Docker, Hugging Face Spaces

部署指南 (Deployment Guide)

本專案已針對 Hugging Face Spaces 部署進行優化,並使用 Secret Variables 安全地管理所有憑證。

1. 建立 Hugging Face Space

  • 前往 Hugging Face - New Space
  • Space SDK: 選擇 Docker > Blank 模板。
  • Hardware: 選擇 CPU basic (免費方案) 即可。

2. 上傳程式碼

  • 使用 git clone 您的 Space 儲存庫,並將所有專案檔案 (.py, requirements.txt, Dockerfile) 推送上去。

3. 設定 Secrets

  • 進入您的 Space,點擊 Settings > Secrets
  • 新增以下 4 個 Secret,名稱必須完全匹配:
    • CHANNEL_ACCESS_TOKEN: 您的 LINE Channel Access Token。
    • CHANNEL_SECRET: 您的 LINE Channel Secret。
    • CWA_API_KEY: 您在氣象署平台申請的 API 金鑰。
    • GEMINI_API_KEY: 您從 Google AI Studio 取得的 API 金鑰。

4. Dockerfile

  • 確保您的專案根目錄下有 Dockerfile 檔案,內容如下:
    FROM python:3.10-slim
    WORKDIR /code
    COPY requirements.txt .
    RUN pip install --no-cache-dir -r requirements.txt
    COPY . .
    EXPOSE 7860
    CMD ["gunicorn", "--bind", "0.0.0.0:7860", "--workers", "1", "app:app"]
    

5. 設定 LINE Webhook

  • 複製您的 Space 公開 URL (例如: https://Your-Username-Your-SpaceName.hf.space)。
  • 在後面加上 /callback,組成完整的 Webhook URL。
  • 前往 LINE Developers Console,將此 URL 填入您的 Messaging API Channel 的 "Webhook URL" 欄位並啟用。

🤖 指令列表 (Command List)

您可以直接輸入指令或對應的 # 數字快捷鍵。

📖 指令列表 (輸入 #數字 即可)

【地震資訊】
• #1 - 最新一筆顯著地震 (含圖)
• #2 - 全球近24小時顯著地震(USGS)
• #3 - 今年台灣顯著地震列表(USGS)
• #4 - CWA 地震目錄查詢 (外部連結)
• #5 - CWA 最新地震預警
• #6 - CWA 最近7天顯著有感地震

【AI 與工具】
• #7 <問題> - 與 AI 助理對話
  (例如: #7 昨天花蓮有地震嗎?)
  (例如: #7 2024年4月3日規模6以上的地震有哪些?)

【基本指令】
• #8 - 關於此機器人
• #9 - 顯示此說明

📄 授權 (License)

This project is licensed under the MIT License.

技術棧

  • 後端: Python, Flask, Gunicorn
  • LINE 整合: line-bot-sdk-python
  • AI 模型: Hugging Face transformers (bigscience/bloomz-560m)
  • 部署: Docker on Hugging Face Spaces