Spaces:
Sleeping
Sleeping
Update README.md
Browse files
README.md
CHANGED
|
@@ -1,183 +1,195 @@
|
|
| 1 |
-
|
| 2 |
-
|
| 3 |
-
|
| 4 |
-
|
| 5 |
-
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
|
| 9 |
-
|
| 10 |
-
|
| 11 |
-
|
| 12 |
-
|
| 13 |
-
|
| 14 |
-
|
| 15 |
-
|
| 16 |
-
|
| 17 |
-
|
| 18 |
-
3.
|
| 19 |
-
|
| 20 |
-
--
|
| 21 |
-
|
| 22 |
-
|
| 23 |
-
|
| 24 |
-
|
| 25 |
-
|
| 26 |
-
|
| 27 |
-
*
|
| 28 |
-
|
| 29 |
-
|
| 30 |
-
|
| 31 |
-
|
| 32 |
-
|
| 33 |
-
|
| 34 |
-
|
| 35 |
-
|
| 36 |
-
|
| 37 |
-
|
| 38 |
-
|
| 39 |
-
|
| 40 |
-
|
| 41 |
-
|
| 42 |
-
|
| 43 |
-
|
| 44 |
-
|
| 45 |
-
---
|
| 46 |
-
|
| 47 |
-
|
| 48 |
-
|
| 49 |
-
|
| 50 |
-
|
| 51 |
-
|
| 52 |
-
|
| 53 |
-
|
| 54 |
-
|
| 55 |
-
|
| 56 |
-
|
| 57 |
-
|
| 58 |
-
|
| 59 |
-
|
| 60 |
-
|
| 61 |
-
### Bước
|
| 62 |
-
|
| 63 |
-
|
| 64 |
-
|
| 65 |
-
|
| 66 |
-
#
|
| 67 |
-
|
| 68 |
-
.
|
| 69 |
-
|
| 70 |
-
|
| 71 |
-
|
| 72 |
-
|
| 73 |
-
|
| 74 |
-
|
| 75 |
-
|
| 76 |
-
|
| 77 |
-
|
| 78 |
-
|
| 79 |
-
|
| 80 |
-
|
| 81 |
-
|
| 82 |
-
|
| 83 |
-
|
| 84 |
-
|
| 85 |
-
|
| 86 |
-
|
| 87 |
-
|
| 88 |
-
|
| 89 |
-
|
| 90 |
-
|
| 91 |
-
|
| 92 |
-
|
| 93 |
-
|
| 94 |
-
|
| 95 |
-
|
| 96 |
-
|
| 97 |
-
#
|
| 98 |
-
|
| 99 |
-
|
| 100 |
-
|
| 101 |
-
|
| 102 |
-
# ---
|
| 103 |
-
|
| 104 |
-
|
| 105 |
-
|
| 106 |
-
|
| 107 |
-
|
| 108 |
-
|
| 109 |
-
|
| 110 |
-
|
| 111 |
-
|
| 112 |
-
|
| 113 |
-
|
| 114 |
-
|
| 115 |
-
|
| 116 |
-
|
| 117 |
-
|
| 118 |
-
|
| 119 |
-
|
| 120 |
-
|
| 121 |
-
|
| 122 |
-
|
| 123 |
-
|
| 124 |
-
##
|
| 125 |
-
|
| 126 |
-
```
|
| 127 |
-
|
| 128 |
-
|
| 129 |
-
|
| 130 |
-
|
| 131 |
-
|
| 132 |
-
|
| 133 |
-
|
| 134 |
-
|
| 135 |
-
|
| 136 |
-
|
| 137 |
-
|
| 138 |
-
|
| 139 |
-
|
| 140 |
-
├──
|
| 141 |
-
|
| 142 |
-
|
| 143 |
-
|
| 144 |
-
|
| 145 |
-
|
| 146 |
-
|
| 147 |
-
|
| 148 |
-
|
| 149 |
-
|
| 150 |
-
|
| 151 |
-
|
| 152 |
-
|
| 153 |
-
|
| 154 |
-
|
| 155 |
-
```
|
| 156 |
-
|
| 157 |
-
|
| 158 |
-
|
| 159 |
-
|
| 160 |
-
|
| 161 |
-
|
| 162 |
-
|
| 163 |
-
|
| 164 |
-
|
| 165 |
-
|
| 166 |
-
|
| 167 |
-
```
|
| 168 |
-
|
| 169 |
-
|
| 170 |
-
|
| 171 |
-
|
| 172 |
-
|
| 173 |
-
|
| 174 |
-
|
| 175 |
-
|
| 176 |
-
|
| 177 |
-
|
| 178 |
-
|
| 179 |
-
|
| 180 |
-
|
| 181 |
-
|
| 182 |
-
|
| 183 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
|
| 2 |
+
---
|
| 3 |
+
title: PINE Voice Mobile
|
| 4 |
+
emoji: 🌲
|
| 5 |
+
colorFrom: green
|
| 6 |
+
colorTo: blue
|
| 7 |
+
sdk: docker
|
| 8 |
+
app_port: 7860
|
| 9 |
+
pinned: false
|
| 10 |
+
---
|
| 11 |
+
|
| 12 |
+
# PINE AI Voice Assistant
|
| 13 |
+
Dự án trợ lý ảo giọng nói Mobile.
|
| 14 |
+
# PINE AI - VNPT Smart Contact Center (MVP)
|
| 15 |
+
|
| 16 |
+
> **Trợ lý ảo Telesales thế hệ mới: Nghe hiểu cảm xúc, Phân tích ý định và Xử lý từ chối thông minh.**
|
| 17 |
+
|
| 18 |
+

|
| 19 |
+

|
| 20 |
+

|
| 21 |
+

|
| 22 |
+
|
| 23 |
+
---
|
| 24 |
+
|
| 25 |
+
## 1. Giới thiệu dự án
|
| 26 |
+
|
| 27 |
+
**PINE AI** là giải pháp Voice Bot dành cho Tổng đài thông minh (Smart Contact Center) của VNPT. Khác với chatbot truyền thống chỉ phản hồi theo từ khóa, PINE AI sở hữu "trí tuệ cảm xúc" giúp:
|
| 28 |
+
1. **Phân biệt thái độ:** Nhận biết khách hàng đang giận dữ (Toxic) hay chỉ đang khó tính/mặc cả.
|
| 29 |
+
2. **Bảo vệ cơ hội bán hàng:** Tự động phát hiện các câu chê giá/so sánh đối thủ để kích hoạt kịch bản thuyết phục thay vì cúp máy.
|
| 30 |
+
3. **Real-time Metrics:** Hiển thị chỉ số cảm xúc và độ trễ ngay trên màn hình tư vấn viên.
|
| 31 |
+
|
| 32 |
+
---
|
| 33 |
+
|
| 34 |
+
## 2. Tính năng cốt lõi (Core Features)
|
| 35 |
+
|
| 36 |
+
### Bộ não phân tích kép (Dual Analysis Engine)
|
| 37 |
+
Hệ thống chạy song song 2 luồng phân tích ngay khi khách hàng dứt lời:
|
| 38 |
+
* **Sentiment Engine:** Chấm điểm cảm xúc từ `-1.0` (Rất tệ) đến `1.0` (Rất tốt).
|
| 39 |
+
* **Intent Classifier:** Phân loại vấn đề (Mạng nghẽn, Giá cước, Ít Data, So sánh đối thủ...).
|
| 40 |
+
|
| 41 |
+
### Cơ chế "Sales Guard" & "Toxic Filter" (Logic Ưu tiên)
|
| 42 |
+
Đây là điểm khác biệt lớn nhất của PINE AI, sử dụng cơ chế phễu lọc 4 tầng:
|
| 43 |
+
|
| 44 |
+
| Tầng ưu tiên | Loại khách hàng | Dấu hiệu nhận biết | Hành động của Bot |
|
| 45 |
+
| :--- | :--- | :--- | :--- |
|
| 46 |
+
| **1. Toxic/Churn** | Chửi bới, Hủy gay gắt | *"Lừa đảo", "Cút", "Hủy gói ngay"* | **Ngắt ngay lập tức**, chuyển nhân viên (Handover). |
|
| 47 |
+
| **2. Refusal** | Từ chối lịch sự | *"Không cần", "Thôi em"* | **Chào tạm biệt** lịch sự, kết thúc cuộc gọi. |
|
| 48 |
+
| **3. Objection** | Chê đắt, So sánh | *"Đắt quá", "Viettel rẻ hơn"* | **Bỏ qua điểm tiêu cực**, kích hoạt `CompetitorStrategy` để thuyết phục. |
|
| 49 |
+
| **4. Normal** | Hỏi thông thường | *"Gói này bao nhiêu tiền?"* | Trả lời theo kịch bản bán hàng chuẩn. |
|
| 50 |
+
|
| 51 |
+
### Dashboard UX Metrics Live
|
| 52 |
+
Giao diện hiển thị trực quan các chỉ số kỹ thuật:
|
| 53 |
+
* **Latency:** Đo độ trễ xử lý (STT + Logic) tính bằng mili giây.
|
| 54 |
+
* **Sentiment Bar:** Thanh cảm xúc chạy theo thời gian thực (Xanh/Vàng/Đỏ).
|
| 55 |
+
* **Intent Detected:** Hiển thị ý định vừa phát hiện.
|
| 56 |
+
|
| 57 |
+
---
|
| 58 |
+
|
| 59 |
+
## 3. Hướng dẫn Cài đặt & Triển khai
|
| 60 |
+
|
| 61 |
+
### Bước 1: Chuẩn bị môi trường
|
| 62 |
+
Yêu cầu máy tính đã cài:
|
| 63 |
+
* [Python 3.9+](https://www.python.org/downloads/)
|
| 64 |
+
* [Git](https://git-scm.com/)
|
| 65 |
+
|
| 66 |
+
### Bước 2: Clone dự án
|
| 67 |
+
```bash
|
| 68 |
+
git clone [https://github.com/YourUsername/vnpt-voice-bot.git](https://github.com/YourUsername/vnpt-voice-bot.git)
|
| 69 |
+
cd vnpt-voice-bot
|
| 70 |
+
|
| 71 |
+
```
|
| 72 |
+
|
| 73 |
+
### Bước 3: Tạo môi trường ảo (Virtual Environment)
|
| 74 |
+
|
| 75 |
+
Giúp cách ly thư viện dự án, tránh xung đột với hệ thống.
|
| 76 |
+
|
| 77 |
+
```bash
|
| 78 |
+
# Windows
|
| 79 |
+
python -m venv venv
|
| 80 |
+
.\venv\Scripts\activate
|
| 81 |
+
|
| 82 |
+
# MacOS/Linux
|
| 83 |
+
python3 -m venv venv
|
| 84 |
+
source venv/bin/activate
|
| 85 |
+
|
| 86 |
+
```
|
| 87 |
+
|
| 88 |
+
### Bước 4: Cài đặt thư viện phụ thuộc
|
| 89 |
+
|
| 90 |
+
```bash
|
| 91 |
+
pip install -r requirements.txt
|
| 92 |
+
|
| 93 |
+
```
|
| 94 |
+
|
| 95 |
+
*(File `requirements.txt` bao gồm: `fastapi`, `uvicorn`, `websockets`, `python-dotenv`, `google-generativeai`, ...)*
|
| 96 |
+
|
| 97 |
+
### Bước 5: Cấu hình bảo mật (.env)
|
| 98 |
+
|
| 99 |
+
Tạo file `.env` tại thư mục gốc (ngang hàng với `main.py`) và điền API Key:
|
| 100 |
+
|
| 101 |
+
```env
|
| 102 |
+
# --- GEMINI CONFIG ---
|
| 103 |
+
GOOGLE_API_KEY=
|
| 104 |
+
GEMINI_MODEL_ID=gemini-3-flash-preview
|
| 105 |
+
|
| 106 |
+
# --- VNPT GENERAL ---
|
| 107 |
+
VNPT_BASE_URL=https://api.idg.vnpt.vn
|
| 108 |
+
|
| 109 |
+
# --- VNPT TTS CONFIG ---
|
| 110 |
+
VNPT_TTS_TOKEN_ID=
|
| 111 |
+
VNPT_TTS_TOKEN_KEY=
|
| 112 |
+
VNPT_TTS_ACCESS_TOKEN=
|
| 113 |
+
|
| 114 |
+
# --- VNPT SMARTBOT CONFIG ---
|
| 115 |
+
SMARTBOT_URL=https://assistant-stream.vnpt.vn/v1/conversation
|
| 116 |
+
SMARTBOT_ACCESS_TOKEN="
|
| 117 |
+
SMARTBOT_TOKEN_ID=
|
| 118 |
+
SMARTBOT_TOKEN_KEY=
|
| 119 |
+
SMARTBOT_BOT_ID=
|
| 120 |
+
```
|
| 121 |
+
|
| 122 |
+
> **Lưu ý:** File `.env` đã được thêm vào `.gitignore` để không bị lộ khi đẩy lên GitHub.
|
| 123 |
+
|
| 124 |
+
### Bước 6: Khởi chạy Server
|
| 125 |
+
|
| 126 |
+
```bash
|
| 127 |
+
# Chạy server với tính năng tự động reload khi sửa code
|
| 128 |
+
uvicorn main:app --reload
|
| 129 |
+
|
| 130 |
+
```
|
| 131 |
+
|
| 132 |
+
Sau khi chạy thành công, mở trình duyệt tại địa chỉ: `http://localhost:8000`.
|
| 133 |
+
|
| 134 |
+
---
|
| 135 |
+
|
| 136 |
+
## 4. Cấu trúc dự án
|
| 137 |
+
|
| 138 |
+
```
|
| 139 |
+
vnpt-voice-bot/
|
| 140 |
+
├── .env # Biến môi trường (Chứa API Key)
|
| 141 |
+
├── .gitignore # Danh sách file bị Git bỏ qua (rác, log, env)
|
| 142 |
+
├── README.md # Tài liệu hướng dẫn này
|
| 143 |
+
├── requirements.txt # Danh sách thư viện cần cài
|
| 144 |
+
│
|
| 145 |
+
├── main.py # Server Backend (FastAPI), xử lý WebSocket
|
| 146 |
+
├── logic_flow.py # [CORE] Bộ não điều phối hội thoại & Logic ưu tiên
|
| 147 |
+
├── analyze.py # [CORE] Bộ phân tích Cảm xúc & Từ khóa (Sentiment Engine)
|
| 148 |
+
├── services.py # Các module vệ tinh (STT, TTS, LLM Connector)
|
| 149 |
+
├── data_engine.py # Giả lập database khách hàng (CSV/JSON)
|
| 150 |
+
├── test_fr.html # Giao diện Frontend (Dashboard + UX Metrics)
|
| 151 |
+
├── strategy_competitor.py # Xử lý khi khách so sánh đối thủ
|
| 152 |
+
├── strategy_low_data.py # Xử lý khi khách kêu hết data
|
| 153 |
+
└── strategy_network.py # Xử lý khi khách kêu mạng lag
|
| 154 |
+
|
| 155 |
+
```
|
| 156 |
+
|
| 157 |
+
---
|
| 158 |
+
|
| 159 |
+
## 5. Hướng dẫn Git (Dành cho Dev)
|
| 160 |
+
|
| 161 |
+
Để đẩy code lên GitHub an toàn và sạch sẽ:
|
| 162 |
+
|
| 163 |
+
1. **Khởi tạo kho (nếu chưa có):**
|
| 164 |
+
```bash
|
| 165 |
+
git init
|
| 166 |
+
|
| 167 |
+
```
|
| 168 |
+
|
| 169 |
+
|
| 170 |
+
2. **Thêm file vào vùng chờ (Staging):**
|
| 171 |
+
*(Git sẽ tự động bỏ qua các file trong .gitignore)*
|
| 172 |
+
```bash
|
| 173 |
+
git add .
|
| 174 |
+
|
| 175 |
+
```
|
| 176 |
+
|
| 177 |
+
|
| 178 |
+
3. **Lưu phiên bản (Commit):**
|
| 179 |
+
```bash
|
| 180 |
+
git commit -m "Update logic: Sales Guard & Toxic Filter v2.2"
|
| 181 |
+
|
| 182 |
+
```
|
| 183 |
+
|
| 184 |
+
|
| 185 |
+
4. **Đẩy lên GitHub:**
|
| 186 |
+
```bash
|
| 187 |
+
git push origin main
|
| 188 |
+
|
| 189 |
+
```
|
| 190 |
+
|
| 191 |
+
|
| 192 |
+
|
| 193 |
+
---
|
| 194 |
+
|
| 195 |
+
|