cwadayi commited on
Commit
bc7c206
·
verified ·
1 Parent(s): 3bfa35c

Update README.md

Browse files
Files changed (1) hide show
  1. README.md +123 -22
README.md CHANGED
@@ -4,28 +4,129 @@ sdk: docker
4
  app_port: 7860
5
  ---
6
 
7
- # LINE 地震查詢機器人
8
-
9
- 這是一個部署在 Hugging Face Spaces 上的 LINE Bot 後端服務,旨在提供即時的地震資訊查詢,並整合了 AI 對話功能。
10
-
11
- ## 如何使用
12
- 這是一個 LINE Bot 的後端服務。您需要將此機器人加為好友,然後在 LINE 聊天室中與它互動。
13
-
14
- ## 主要功能與指令
15
- 您可以透過在聊天室中輸入以下指令來使用機器人的功能:
16
-
17
- * `地震` `quake`
18
- * 查詢過去 24 小時全球的顯著地震。
19
- * `臺灣地震` `台灣地震`
20
- * 以列表形式顯示今年以來台灣地區的顯著地震。
21
- * `臺灣地震畫圖` 或 `台灣地震畫圖`
22
- * 將今年以來台灣地區的顯著地震繪製成地圖並回傳。
23
- * `地震預警`
24
- * 獲取台灣中央氣象署 (CWA) 最新的地震預警。
25
- * `ai <你的問題>`
26
- * AI 助理進行對話 (例如:`ai 台北今天天氣如何?`)
27
- * `/help`
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