A smart LINE Bot for Taiwan weather updates.
本專案的 K8s 部署:weamind-infra
WeaMind 是一個智慧天氣 LINE Bot,透過簡單的操作或文字查詢,提供即時台灣天氣資訊。
本服務完全免費,如果對你有幫助,歡迎贊助我一杯咖啡,或點擊右上角的 ⭐️ 支持我。
加入 WeaMind 為好友後,點擊聊天視窗下方的「功能選單」即可開始使用。
- 直接輸入「二級行政區」名稱,例如「
大安區」、「水上」、「中壢」,就能快速查詢。 - 系統會自動識別地點並回傳天氣資訊。
- 透過「
設定地點」功能,預先設定常用地址。 - 點擊「
查住家」或「查公司」即可立即查詢天氣。
- 「
最近查過」會記錄您最近查詢的 5 個地點(不含住家與公司)。 - 點擊即可重新查詢,無需重複輸入。
- 點擊「
地圖查詢」開啟 LINE 地圖介面。 - 在地圖上選擇任意位置,系統會自動查詢該地點的天氣。
- 不限於目前所在位置,可查詢任何地點的天氣。
- 掃描下方 QR Code(推薦)或搜尋 LINE ID
@370ndhmf加入 WeaMind。 - 點擊功能選單即可開始查詢。
立即體驗智慧天氣查詢!
graph TB
LINE[LINE Platform]
REDIS[(Redis<br/>分散式鎖)]
DB[(PostgreSQL<br/>主資料庫)]
DATA[weamind-data<br/>微服務]
subgraph FASTAPI["FastAPI LINE Bot App"]
WEB[Webhook Handler]
BG[Background Tasks]
end
LINE -->|Webhook| WEB
WEB -->|Fast ACK<br/>數十毫秒| LINE
WEB -->|非阻塞| BG
BG -->|選擇性鎖定| REDIS
BG <-->|資料讀寫| DB
BG -->|回應用戶<br/>< 2 秒| LINE
DATA -->|每 6 小時<br/>ETL 更新| DB
- 數十毫秒 ACK:Webhook Handler 收到請求後立即驗證並回應 LINE Platform,避免平台重送
- 2 秒內回應:快速 ACK → 背景處理 → 回應用戶
- 非阻塞設計:使用 FastAPI
BackgroundTasks處理業務邏輯,不阻塞 webhook 回應
- 2 秒鎖定機制:避免用戶快速連點造成重複處理
- 異常降級策略:Redis 異常時核心服務繼續運作
- 選擇性加鎖:僅對按鈕操作加鎖,文字查詢不受影響
- 領域模組劃分:
core(基礎設施)、user(使用者管理)、line(LINE Bot)、weather(天氣服務) - 分層架構實踐:每個領域模組包含
router.py、service.py、models.py實現三層分離
- 94% 測試覆蓋率:32+ 測試檔案涵蓋 core、line、weather、user 各模組
- 獨立測試環境:SQLite 記憶體資料庫 + fixtures,每個測試獨立運行不互相干擾
- Codecov 監控:每次 PR 自動檢查覆蓋率變化,防止新功能降低測試覆蓋率
- uv 套件管理:統一的 Python 套件與虛擬環境管理,所有指令使用
uv run執行 - Ruff 檢查與格式化:取代 Pylint、Black、isort 的全方位工具
- Pyright 型別檢查:100% Type Hints 覆蓋,確保型別安全
- pre-commit 自動化:Git commit 前自動執行格式化與檢查
- 安全掃描工具:Bandit(靜態安全分析)、pip-audit(CVE 檢查)、detect-secrets(敏感資料防護)
- 自動化品質檢查:每次 push 執行 Ruff → Pyright → Bandit → pip-audit → pytest + Codecov 完整流程
- Image 建置與推送:CI 成功後自動推送 image 到 GHCR(支援 amd64/arm64)
- 三重安全掃描:主 CI 流程 + CodeQL(程式碼安全掃描)+ SonarCloud(技術債與品質監控)
- 自動發布機制:Git tag 觸發版本發布與 release notes 生成
進一步了解:
- 文章〈WeaMind 專案介紹:技術選型與架構〉(撰寫中)
- DeepWiki 技術文件

