Spaces:
Sleeping
Sleeping
Commit ·
c7b9514
1
Parent(s): 79df050
docs: add architecture and features documentation and update requirements and README
Browse files- README.md +32 -8
- docs/architecture.md +39 -0
- docs/features.md +36 -0
- requirements.txt +2 -0
README.md
CHANGED
|
@@ -6,19 +6,43 @@ sdk: docker
|
|
| 6 |
app_port: 7860
|
| 7 |
---
|
| 8 |
|
| 9 |
-
# Bloom Ware
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 10 |
|
| 11 |
Bloom Ware 目前以 **Hugging Face Docker Space** 方式部署到 `XiaoBai1221/Bloom_Ware`。
|
| 12 |
-
後端是 `FastAPI`,入口在 `app.py`;登入頁由 `bloom-ware-login` 建成靜態檔後掛到 `/login`;主前端則由 `static/frontend` 提供。
|
| 13 |
|
| 14 |
-
## Deployment Target
|
| 15 |
|
| 16 |
- Space: [`XiaoBai1221/Bloom_Ware`](https://hf.co/spaces/XiaoBai1221/Bloom_Ware)
|
| 17 |
- SDK: `docker`
|
| 18 |
- Exposed port: `7860`
|
| 19 |
- Git remote: `hf`
|
| 20 |
|
| 21 |
-
## Local Run
|
| 22 |
|
| 23 |
```bash
|
| 24 |
python3 -m venv .venv
|
|
@@ -29,7 +53,7 @@ ENABLE_BACKGROUND_JOBS=false PORT=7860 python app.py
|
|
| 29 |
|
| 30 |
本地驗證網址:`http://127.0.0.1:7860`
|
| 31 |
|
| 32 |
-
## Hugging Face Space Deploy
|
| 33 |
|
| 34 |
1. 在 Hugging Face Space `Settings -> Secrets` 補齊敏感環境變數。
|
| 35 |
2. 不要提交 `.env`、Firebase 憑證 JSON、或任何本地設定檔。
|
|
@@ -37,14 +61,14 @@ ENABLE_BACKGROUND_JOBS=false PORT=7860 python app.py
|
|
| 37 |
4. 直接推送到既有 Space remote:
|
| 38 |
|
| 39 |
```bash
|
| 40 |
-
git add README.md Dockerfile .dockerignore requirements.txt requirements-dev.txt docs/
|
| 41 |
git commit -m "Prepare Bloom Ware for Hugging Face Space deployment"
|
| 42 |
git push hf main
|
| 43 |
```
|
| 44 |
|
| 45 |
若 Git 要求帳密,帳號用 Hugging Face 帳號,密碼改貼 **User Access Token**。
|
| 46 |
|
| 47 |
-
## Required Secrets
|
| 48 |
|
| 49 |
至少補齊這些類型:
|
| 50 |
|
|
@@ -65,7 +89,7 @@ git push hf main
|
|
| 65 |
- `ENABLE_BACKGROUND_JOBS=false`
|
| 66 |
- `PORT=7860`
|
| 67 |
|
| 68 |
-
## Notes
|
| 69 |
|
| 70 |
- Space build context 已排除 `.env`、憑證 JSON、`tests/`、`.git/`,避免本地敏感檔被包進 Docker image。
|
| 71 |
- `requirements.txt` 只保留 runtime 依賴;本地測試改裝 `requirements-dev.txt`。
|
|
|
|
| 6 |
app_port: 7860
|
| 7 |
---
|
| 8 |
|
| 9 |
+
# Bloom Ware - 個人化助理「小花」🌺
|
| 10 |
+
|
| 11 |
+
**Bloom Ware** 的專屬個人化助理 **「小花」**,是由 **銘傳大學人工智慧應用學系** 的 **「槓上開發」** 團隊所精心研發的陪伴型人工智慧系統。
|
| 12 |
+
|
| 13 |
+
🏆 **榮譽肯定:本專案於民國 115 年榮獲系上專題特優第一名!**
|
| 14 |
+
|
| 15 |
+
## 關於小花 (About Xiao Hua)
|
| 16 |
+
|
| 17 |
+
小花不只是一個普通的語音助理,而是一個具備「情感共鳴」與「上下文感知」能力的沉浸式對話夥伴。透過深度學習技術分析使用者的語氣與情緒,小花能夠主動切換至「關懷模式」,在使用者經歷低潮或負面情緒時,給予溫暖的心理支持與陪伴。
|
| 18 |
+
|
| 19 |
+
## 🌟 核心特色 (Core Features)
|
| 20 |
+
|
| 21 |
+
- **即時語音對話 (Real-time Voice Interaction)**:透過 WebSocket 實現極低延遲的 STT 與 TTS 雙向語音互動。
|
| 22 |
+
- **語音聲紋登入 (Voice Authentication)**:結合 `SpeechBrain` 實現聽聲辨人,提供無密碼的流暢登入體驗。
|
| 23 |
+
- **情感分析與關懷 (Emotion Detection & Care Mode)**:即時捕捉語音與文字中的情緒(如悲傷、憤怒、恐懼),自動提供同理心關懷。
|
| 24 |
+
- **MCP 擴充助手 (Model Context Protocol)**:內建天氣、交通 (TDX)、地圖編碼與健康數據等生活助手功能,隨時為您提供所需資訊。
|
| 25 |
+
- **長期記憶 (Long-Term Memory)**:整合 Firestore 與背景排程進行記憶摘要,讓小花記得與您的每一次重要對話。
|
| 26 |
+
|
| 27 |
+
> 💡 **進階技術文件**:關於詳細的系統架構、API 說明與功能解析,請參閱 `docs/` 目錄下的完整文件。
|
| 28 |
+
> - [系統架構說明 (Architecture)](/Users/baidongqu/Desktop/BM/docs/architecture.md)
|
| 29 |
+
> - [核心功能詳解 (Features)](/Users/baidongqu/Desktop/BM/docs/features.md)
|
| 30 |
+
> - [Hugging Face 部署指南](/Users/baidongqu/Desktop/BM/docs/huggingface-space-deployment.md)
|
| 31 |
+
|
| 32 |
+
---
|
| 33 |
+
|
| 34 |
+
## 🚀 部署與運行資訊 (Deployment & Run Information)
|
| 35 |
|
| 36 |
Bloom Ware 目前以 **Hugging Face Docker Space** 方式部署到 `XiaoBai1221/Bloom_Ware`。
|
|
|
|
| 37 |
|
| 38 |
+
### Deployment Target
|
| 39 |
|
| 40 |
- Space: [`XiaoBai1221/Bloom_Ware`](https://hf.co/spaces/XiaoBai1221/Bloom_Ware)
|
| 41 |
- SDK: `docker`
|
| 42 |
- Exposed port: `7860`
|
| 43 |
- Git remote: `hf`
|
| 44 |
|
| 45 |
+
### Local Run
|
| 46 |
|
| 47 |
```bash
|
| 48 |
python3 -m venv .venv
|
|
|
|
| 53 |
|
| 54 |
本地驗證網址:`http://127.0.0.1:7860`
|
| 55 |
|
| 56 |
+
### Hugging Face Space Deploy
|
| 57 |
|
| 58 |
1. 在 Hugging Face Space `Settings -> Secrets` 補齊敏感環境變數。
|
| 59 |
2. 不要提交 `.env`、Firebase 憑證 JSON、或任何本地設定檔。
|
|
|
|
| 61 |
4. 直接推送到既有 Space remote:
|
| 62 |
|
| 63 |
```bash
|
| 64 |
+
git add README.md Dockerfile .dockerignore requirements.txt requirements-dev.txt docs/
|
| 65 |
git commit -m "Prepare Bloom Ware for Hugging Face Space deployment"
|
| 66 |
git push hf main
|
| 67 |
```
|
| 68 |
|
| 69 |
若 Git 要求帳密,帳號用 Hugging Face 帳號,密碼改貼 **User Access Token**。
|
| 70 |
|
| 71 |
+
### Required Secrets
|
| 72 |
|
| 73 |
至少補齊這些類型:
|
| 74 |
|
|
|
|
| 89 |
- `ENABLE_BACKGROUND_JOBS=false`
|
| 90 |
- `PORT=7860`
|
| 91 |
|
| 92 |
+
### Notes
|
| 93 |
|
| 94 |
- Space build context 已排除 `.env`、憑證 JSON、`tests/`、`.git/`,避免本地敏感檔被包進 Docker image。
|
| 95 |
- `requirements.txt` 只保留 runtime 依賴;本地測試改裝 `requirements-dev.txt`。
|
docs/architecture.md
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# 系統架構說明 (System Architecture)
|
| 2 |
+
|
| 3 |
+
Bloom Ware 「小花」專案採用現代化的前後端分離架構,結合多項領先的 AI 技術與穩定可擴展的後端框架。
|
| 4 |
+
|
| 5 |
+
## 1. 後端架構 (Backend - FastAPI)
|
| 6 |
+
|
| 7 |
+
後端採用 Python 的 **FastAPI** 框架,提供非同步、高效能的 API 服務與 WebSocket 長連接管理。
|
| 8 |
+
|
| 9 |
+
- **`app.py`**: 應用的進入點。負責配置 Lifespan(啟動/關閉事件)、Middleware(如 CORS, CSP)、定義 WebSocket 的連線(`/ws`),並掛載靜態前端資源。
|
| 10 |
+
- **`core/` (核心邏輯)**:
|
| 11 |
+
- **資料庫 (`database/`)**: 與 Firebase Firestore 進行連線,處理使用者資料、對話紀錄與記憶的 CRUD 操作。
|
| 12 |
+
- **驗證 (`auth.py`)**: 處理 JWT Token 生成與解析,並整合 Google OAuth 登入機制。
|
| 13 |
+
- **Pipeline (`pipeline.py`)**: 負責串接使用者的輸入到大語言模型(LLM)的資料流。
|
| 14 |
+
- **記憶體系統 (`memory_system.py`)**: 管理對話上下文,提供 AI 摘要。
|
| 15 |
+
- **`features/` 與 `services/` (業務與 AI 服務)**:
|
| 16 |
+
- 封裝了與 OpenAI 溝通的 `ai_service.py`。
|
| 17 |
+
- `voice_binding.py`: 負責聲紋註冊狀態機管理。
|
| 18 |
+
- MCP (Model Context Protocol) 工具集:整合天氣、交通 (TDX)、位置查詢等外部 API。
|
| 19 |
+
- **`websocket/`**:
|
| 20 |
+
- `manager.py`: 管理所有連線的使用者會話,處理訊息派發、連線逾時清理等。
|
| 21 |
+
|
| 22 |
+
## 2. 前端架構 (Frontend)
|
| 23 |
+
|
| 24 |
+
本系統將前端拆分為「登入驗證層」與「沉浸式互動層」。
|
| 25 |
+
|
| 26 |
+
- **登入介面 (`bloom-ware-login/out`)**:
|
| 27 |
+
- 基於 **Next.js** 與 React 構建,編譯為靜態資源後由 FastAPI 掛載於 `/login` 路徑。
|
| 28 |
+
- 提供 Google 登入、一般信箱登入,以及跳轉至語音註冊的入口。
|
| 29 |
+
- **主互動介面 (`static/frontend/`)**:
|
| 30 |
+
- 專注於 **沉浸式語音體驗** 的純靜態應用(HTML/CSS/JS)。
|
| 31 |
+
- 以「小花」的視覺形象(如動態花朵動畫)作為介面核心。
|
| 32 |
+
- 透過 WebRTC/MediaRecorder 擷取音訊,透過 WebSocket 傳送給後端,並將後端回傳的音訊進行播放,且畫面會隨情緒狀態與音量產生動態回饋。
|
| 33 |
+
|
| 34 |
+
## 3. 基礎設施與部署 (Infrastructure)
|
| 35 |
+
|
| 36 |
+
- **Docker 化**: 提供完整的 `Dockerfile`,確保在各種環境下執行的一致性。
|
| 37 |
+
- **Hugging Face Space**: 系統原生設計為可直接部署於 Hugging Face Space 上,支援無伺服器架構的容器化執行。
|
| 38 |
+
- **排程與背景任務**:
|
| 39 |
+
- 啟動時即開啟 `asyncio` 背景任務,定期清理過期的 WebSocket 會話、壓縮並總結歷史對話,確保長期執行的效能與穩定度。
|
docs/features.md
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# 核心功能詳解 (Core Features)
|
| 2 |
+
|
| 3 |
+
「小花」不僅是一個對話機器人,更是具備感知能力的個人化助理。以下是系統內建的重點特色功能:
|
| 4 |
+
|
| 5 |
+
## 1. 沉浸式即時語音對話
|
| 6 |
+
|
| 7 |
+
為解決傳統一問一答的遲滯感,小花採用了全雙工概念的串流對話機制。
|
| 8 |
+
- **WebSocket 通訊**: 前端將使用者的語音片段直接透過 WebSocket 傳遞,後端即時進行語音轉文字 (STT)、意圖分析、文字轉語音 (TTS)。
|
| 9 |
+
- **動態 UI 反饋**: 當小花正在思考或說話時,前端的花朵視覺特效會根據當前的情緒與聲音頻率進行即時的波動(Pulse),創造出極強的生命力。
|
| 10 |
+
|
| 11 |
+
## 2. AI 情感共鳴與「關懷模式」(Care Mode)
|
| 12 |
+
|
| 13 |
+
這是「小花」最核心的亮點之一。
|
| 14 |
+
- **情緒捕捉**: 後端在接收到使用者的語音與文字後,不僅分析語意,更會預測使用者的情感狀態(如快樂、中性、悲傷、憤怒、恐懼)。
|
| 15 |
+
- **自動介入**: 若系統連續偵測到負面情緒,將無縫進入「關懷模式」。
|
| 16 |
+
- **應答策略調整**: 在關懷模式下,小花會自動停用非必要的外部工具(如報天氣),專注於「傾聽」與「安撫」,並調整生成內容的 prompt,以更溫柔、具同理心的方式回應,直到使用者情緒平復。
|
| 17 |
+
|
| 18 |
+
## 3. 無密碼的聽聲辨人 (Voice Authentication)
|
| 19 |
+
|
| 20 |
+
除了傳統的帳號密碼與 Google OAuth,我們加入了生物辨識登入。
|
| 21 |
+
- 整合了 `SpeechBrain` 的 ECAPA-TDNN 模型。
|
| 22 |
+
- 使用者在註冊時錄製幾段語音(如「我是OOO,開啟小花」)。
|
| 23 |
+
- 登入時只需對著麥克風說話,系統便會比對聲紋餘弦相似度 (Cosine Similarity),通過門檻後即可自動登入並載入該使用者的個人偏好與歷史記憶。
|
| 24 |
+
|
| 25 |
+
## 4. MCP 生活助手整合 (Model Context Protocol)
|
| 26 |
+
|
| 27 |
+
小花能主動使用多種工具來解決使用者的實際需求:
|
| 28 |
+
- **環境感知**: 自動抓取使用者的經緯度與時區,並進行反向地理編碼 (Reverse Geocoding)。
|
| 29 |
+
- **交通整合 (TDX)**: 串接台灣交通部 TDX 平台,可即時查詢台鐵、高鐵、捷運與公車動態。
|
| 30 |
+
- **健康與天氣**: 查詢當前氣候,並能讀取 HealthKit 數據,關心使用者的日常作息與健康狀態。
|
| 31 |
+
|
| 32 |
+
## 5. 智慧長期記憶系統
|
| 33 |
+
|
| 34 |
+
有別於只能記住當前對話的傳統機器人,小花會與使用者共同成長。
|
| 35 |
+
- **背景摘要**: 每日透過背景 Batch API 排程,將前一日的對話進行重點摘要(如:喜歡吃什麼、最近在煩惱什麼)。
|
| 36 |
+
- **上下文注入**: 下次使用者連線時,系統會從 Firestore 中提取這些摘要記憶,作為背景 Context 注入給 LLM,讓對話擁有真正的「延續性」。
|
requirements.txt
CHANGED
|
@@ -41,3 +41,5 @@ transformers
|
|
| 41 |
|
| 42 |
# Voice authentication (speaker recognition)
|
| 43 |
speechbrain>=1.0.0
|
|
|
|
|
|
|
|
|
| 41 |
|
| 42 |
# Voice authentication (speaker recognition)
|
| 43 |
speechbrain>=1.0.0
|
| 44 |
+
httpx>=0.24.0
|
| 45 |
+
PyJWT>=2.8.0
|