Spaces:
Sleeping
Sleeping
Update README.md
Browse files
README.md
CHANGED
|
@@ -4,28 +4,129 @@ sdk: docker
|
|
| 4 |
app_port: 7860
|
| 5 |
---
|
| 6 |
|
| 7 |
-
|
| 8 |
-
|
| 9 |
-
|
| 10 |
-
|
| 11 |
-
|
| 12 |
-
|
| 13 |
-
|
| 14 |
-
##
|
| 15 |
-
|
| 16 |
-
|
| 17 |
-
*
|
| 18 |
-
|
| 19 |
-
*
|
| 20 |
-
|
| 21 |
-
*
|
| 22 |
-
*
|
| 23 |
-
*
|
| 24 |
-
|
| 25 |
-
|
| 26 |
-
|
| 27 |
-
|
| 28 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 29 |
|
| 30 |
## 技術棧
|
| 31 |
* **後端**: Python, Flask, Gunicorn
|
|
|
|
| 4 |
app_port: 7860
|
| 5 |
---
|
| 6 |
|
| 7 |
+
|
| 8 |
+
# LINE 多功能地震資訊與 AI 助理機器人
|
| 9 |
+
|
| 10 |
+
這是一個部署在 Hugging Face Spaces 上的多功能 LINE Bot。它整合了來自台灣中央氣象署 (CWA) 和美國地質調查局 (USGS) 的地震資訊,並搭載了 Google 最新的 `gemini-1.5-flash` 模型,使其具備強大的 AI 對話與工具呼叫能力。
|
| 11 |
+
|
| 12 |
+
使用者不僅可以透過簡易指令查詢即時的地震報告與預警,還能用自然語言(例如:「幫我找找昨天規模5以上的地震」)與 AI 互動,AI 會自動呼叫外部工具來查詢資料庫,並提供分析後的智慧回答。
|
| 13 |
+
|
| 14 |
+
## ✨ 主要功能 (Key Features)
|
| 15 |
+
|
| 16 |
+
* **即時地震報告**: 提供來自 CWA 的最新顯著有感地震報告(含圖)及最近7天的地震列表。
|
| 17 |
+
* **全球地震監控**: 整合 USGS 數據,提供全球近24小時及台灣區域的顯著地震資訊。
|
| 18 |
+
* **地震預警速報**: 串接 CWA 地震預警 API,提供最新的地震速報。
|
| 19 |
+
* **智慧 AI 助理**: 搭載 Google Gemini 1.5 Flash 模型,提供流暢的中文對話能力。
|
| 20 |
+
* **AI 工具呼叫 (Tool Calling)**:
|
| 21 |
+
* AI 能夠理解複雜的自然語言問題。
|
| 22 |
+
* 自動呼叫外部的地震資料查詢工具 (MCP-2 Gradio App)。
|
| 23 |
+
* 分析工具回傳的 JSON 資料,並生成人類易於理解的總結性回答。
|
| 24 |
+
* **多樣化指令**: 支援 `#` 數字快捷指令,方便使用者快速取用特定功能。
|
| 25 |
+
|
| 26 |
+
## 🚀 功能展示 (Demo)
|
| 27 |
+
|
| 28 |
+
**基本指令查詢:**
|
| 29 |
+
*<-- 建議在此處插入使用 #1, #5, #6 等指令的對話截圖 -->*
|
| 30 |
+
|
| 31 |
+
**AI 自然語言查詢 (工具呼叫):**
|
| 32 |
+
*<-- 建議在此處插入 AI 成功分析「2024年最大地震」的對話截圖 -->*
|
| 33 |
+
|
| 34 |
+
## 🏗️ 專案架構 (Architecture)
|
| 35 |
+
|
| 36 |
+
本專案採用模組化的 Python Flask 應用程式架構,並透過 Docker 容器化後部署於 Hugging Face Spaces。
|
| 37 |
+
|
| 38 |
+
1. **使用者** -> **LINE Platform**
|
| 39 |
+
2. **LINE Platform** -> **Webhook** -> **Hugging Face Space (Gunicorn + Flask)**
|
| 40 |
+
3. `app.py` 接收請求,交由 `command_handler.py` 進行路由。
|
| 41 |
+
4. `command_handler.py` 根據指令類型,分派任務至:
|
| 42 |
+
* `cwa_service.py`: 呼叫台灣中央氣象署 API。
|
| 43 |
+
* `usgs_service.py`: 呼叫美國地質調查局 API。
|
| 44 |
+
* `ai_service.py`: 處理所有 AI 相關邏輯。
|
| 45 |
+
5. **AI 工具呼叫流程**:
|
| 46 |
+
* `ai_service.py` 將使用者問題及工具定義傳送至 **Google Gemini API**。
|
| 47 |
+
* Gemini API 回應,要求呼叫 `call_earthquake_search_tool` 工具。
|
| 48 |
+
* `ai_service.py` 執行該工具,透過 `gradio_client` 呼叫外部的 **MCP-2 Gradio App**。
|
| 49 |
+
* 工具執行結果回傳給 `ai_service.py`。
|
| 50 |
+
* `ai_service.py` 將工具結果再次傳送給 **Gemini API**。
|
| 51 |
+
* Gemini API 根據資料生成最終的自然語言回答。
|
| 52 |
+
|
| 53 |
+
## 🛠️ 技術棧 (Technology Stack)
|
| 54 |
+
|
| 55 |
+
* **後端**: Python, Flask, Gunicorn
|
| 56 |
+
* **AI 模型**: Google Gemini 1.5 Flash
|
| 57 |
+
* **API & 服務**:
|
| 58 |
+
* LINE Messaging API
|
| 59 |
+
* CWA Open Data API
|
| 60 |
+
* USGS Earthquake API
|
| 61 |
+
* Gradio (用於 MCP 工具)
|
| 62 |
+
* **部署**: Docker, Hugging Face Spaces
|
| 63 |
+
|
| 64 |
+
## 部署指南 (Deployment Guide)
|
| 65 |
+
|
| 66 |
+
本專案已針對 Hugging Face Spaces 部署進行優化,並使用 Secret Variables 安全地管理所有憑證。
|
| 67 |
+
|
| 68 |
+
### 1. 建立 Hugging Face Space
|
| 69 |
+
- 前往 [Hugging Face - New Space](https://huggingface.co/new-space)。
|
| 70 |
+
- **Space SDK**: 選擇 **Docker** > **Blank** 模板。
|
| 71 |
+
- **Hardware**: 選擇 **CPU basic** (免費方案) 即可。
|
| 72 |
+
|
| 73 |
+
### 2. 上傳程式碼
|
| 74 |
+
- 使用 `git clone` 您的 Space 儲存庫,並將所有專案檔案 (`.py`, `requirements.txt`, `Dockerfile`) 推送上去。
|
| 75 |
+
|
| 76 |
+
### 3. 設定 Secrets
|
| 77 |
+
- 進入您的 Space,點擊 **Settings** > **Secrets**。
|
| 78 |
+
- 新增以下 4 個 Secret,名稱必須完全匹配:
|
| 79 |
+
- `CHANNEL_ACCESS_TOKEN`: 您的 LINE Channel Access Token。
|
| 80 |
+
- `CHANNEL_SECRET`: 您的 LINE Channel Secret。
|
| 81 |
+
- `CWA_API_KEY`: 您在氣象署平台申請的 API 金鑰。
|
| 82 |
+
- `GEMINI_API_KEY`: 您從 Google AI Studio 取得的 API 金鑰。
|
| 83 |
+
|
| 84 |
+
### 4. `Dockerfile`
|
| 85 |
+
- 確保���的專案根目錄下有 `Dockerfile` 檔案,內容如下:
|
| 86 |
+
```dockerfile
|
| 87 |
+
FROM python:3.10-slim
|
| 88 |
+
WORKDIR /code
|
| 89 |
+
COPY requirements.txt .
|
| 90 |
+
RUN pip install --no-cache-dir -r requirements.txt
|
| 91 |
+
COPY . .
|
| 92 |
+
EXPOSE 7860
|
| 93 |
+
CMD ["gunicorn", "--bind", "0.0.0.0:7860", "--workers", "1", "app:app"]
|
| 94 |
+
```
|
| 95 |
+
|
| 96 |
+
### 5. 設定 LINE Webhook
|
| 97 |
+
- 複製您的 Space 公開 URL (例如: `https://Your-Username-Your-SpaceName.hf.space`)。
|
| 98 |
+
- 在後面加上 `/callback`,組成完整的 Webhook URL。
|
| 99 |
+
- 前往 [LINE Developers Console](https://developers.line.biz/console/),將此 URL 填入您的 Messaging API Channel 的 "Webhook URL" 欄位並啟用。
|
| 100 |
+
|
| 101 |
+
## 🤖 指令列表 (Command List)
|
| 102 |
+
|
| 103 |
+
您可以直接輸入指令或對應的 `#` 數字快捷鍵。
|
| 104 |
+
|
| 105 |
+
```
|
| 106 |
+
📖 指令列表 (輸入 #數字 即可)
|
| 107 |
+
|
| 108 |
+
【地震資訊】
|
| 109 |
+
• #1 - 最新一筆顯著地震 (含圖)
|
| 110 |
+
• #2 - 全球近24小時顯著地震(USGS)
|
| 111 |
+
• #3 - 今年台灣顯著地震列表(USGS)
|
| 112 |
+
• #4 - CWA 地震目錄查詢 (外部連結)
|
| 113 |
+
• #5 - CWA 最新地震預警
|
| 114 |
+
• #6 - CWA 最近7天顯著有感地震
|
| 115 |
+
|
| 116 |
+
【AI 與工具】
|
| 117 |
+
• #7 <問題> - 與 AI 助理對話
|
| 118 |
+
(例如: #7 昨天花蓮有地震嗎?)
|
| 119 |
+
(例如: #7 2024年4月3日規模6以上的地震有哪些?)
|
| 120 |
+
|
| 121 |
+
【基本指令】
|
| 122 |
+
• #8 - 關於此機器人
|
| 123 |
+
• #9 - 顯示此說明
|
| 124 |
+
```
|
| 125 |
+
|
| 126 |
+
## 📄 授權 (License)
|
| 127 |
+
|
| 128 |
+
This project is licensed under the MIT License.
|
| 129 |
+
|
| 130 |
|
| 131 |
## 技術棧
|
| 132 |
* **後端**: Python, Flask, Gunicorn
|