252 lines
5.7 KiB
Markdown
252 lines
5.7 KiB
Markdown
# TobiichiGPT - 人工回覆系統
|
||
|
||
將 AI 對話系統改造成由真人管理員回覆的極簡方案。
|
||
|
||
## 🎯 特色
|
||
|
||
- ✅ **零修改** - 不需要修改 Open WebUI 程式碼
|
||
- ✅ **極簡化** - 單一 Python 檔案即可運行
|
||
- ✅ **即插即用** - 偽裝成 OpenAI API,直接在 Open WebUI 設定中使用
|
||
- ✅ **視覺化後台** - 美觀的網頁介面供管理員回覆
|
||
|
||
## 🚀 快速開始
|
||
|
||
### 方法 1: Docker (推薦)
|
||
|
||
```powershell
|
||
# 進入 docker-stack 目錄
|
||
cd docker-stack
|
||
|
||
# 設定環境變數(首次使用)
|
||
Copy-Item .env.example .env
|
||
notepad .env # 填入 Cloudflare Tunnel Token(若要使用)
|
||
|
||
# 使用 Docker Compose 啟動
|
||
docker-compose up -d
|
||
|
||
# 查看日誌
|
||
docker-compose logs -f
|
||
|
||
# 停止服務
|
||
docker-compose down
|
||
```
|
||
|
||
### 方法 2: 直接執行
|
||
|
||
```powershell
|
||
# 1. 進入 docker 目錄
|
||
cd docker
|
||
|
||
# 2. 安裝依賴
|
||
pip install -r requirements.txt
|
||
|
||
# 3. 啟動伺服器
|
||
python human_reply_server.py
|
||
```
|
||
|
||
啟動後會看到:
|
||
```
|
||
🚀 人工回覆伺服器啟動中...
|
||
📌 管理員後台: http://localhost:8000/admin
|
||
📌 API 端點: http://localhost:8000/v1
|
||
```
|
||
|
||
## 🌐 服務訪問
|
||
|
||
啟動後可訪問以下服務:
|
||
|
||
| 服務 | 網址 | 說明 |
|
||
|------|------|------|
|
||
| **Open WebUI** | http://localhost:3000 | 用戶對話介面 |
|
||
| **管理員後台** | http://localhost:8000/admin | 真人回覆訊息 |
|
||
| **NPM 管理面板** | http://localhost:82 | Nginx Proxy Manager |
|
||
| **Cloudflare Tunnel** | 自動連線 | 無需手動訪問 |
|
||
|
||
預設帳號密碼(NPM):
|
||
- Email: `admin@example.com`
|
||
- Password: `changeme`
|
||
|
||
### 在 Open WebUI 中設定
|
||
|
||
1. 開啟 http://localhost:3000
|
||
2. 進入 **Settings** → **Connections**
|
||
3. 點擊 **+ Add OpenAI Connection**
|
||
4. 填入設定:
|
||
- **API Base URL**: `http://human-reply-server:8000/v1`
|
||
- **API Key**: 隨便填 (例如: `sk-human`)
|
||
5. 儲存後,模型列表會出現 **human-admin**
|
||
|
||
### 開始使用
|
||
|
||
1. **用戶端**: 在 Open WebUI (http://localhost:3000) 選擇 `human-admin` 模型,發送訊息
|
||
2. **管理員**: 訪問 http://localhost:8000/admin,查看並回覆訊息
|
||
3. **自動刷新**: 後台每 5 秒自動刷新,顯示新訊息
|
||
|
||
## 📋 運作流程
|
||
|
||
```
|
||
用戶發送訊息
|
||
↓
|
||
Open WebUI 調用 API (轉圈圈等待)
|
||
↓
|
||
訊息進入待處理隊列
|
||
↓
|
||
管理員在後台看到訊息
|
||
↓
|
||
管理員輸入並送出回覆
|
||
↓
|
||
API 回傳給 Open WebUI
|
||
↓
|
||
用戶收到回覆
|
||
```
|
||
|
||
## 🔧 技術架構
|
||
|
||
- **FastAPI**: 輕量級 Python Web 框架
|
||
- **AsyncIO**: 異步等待管理員回覆
|
||
- **偽裝 OpenAI API**:
|
||
- `/v1/models` - 模型列表
|
||
- `/v1/chat/completions` - 聊天完成端點
|
||
|
||
## 🐳 Docker 部署
|
||
|
||
### 檔案結構
|
||
```
|
||
tobiichiGPT/
|
||
├── docker/ # Docker 相關檔案
|
||
│ ├── human_reply_server.py # 主程式
|
||
│ ├── requirements.txt # Python 依賴
|
||
│ ├── Dockerfile # Docker 映像檔
|
||
│ └── .dockerignore # Docker 忽略檔案
|
||
├── docker-stack/ # Docker Compose 配置
|
||
│ ├── docker-compose.yml # 服務編排檔案
|
||
│ └── .env.example # 環境變數範例
|
||
├── README.md # 專案說明
|
||
├── QUICKSTART.md # 快速開始指南
|
||
└── LICENSE # 授權檔案
|
||
```
|
||
|
||
### Docker 指令
|
||
|
||
```powershell
|
||
# 建立映像檔
|
||
cd docker
|
||
docker build -t tobiichi-gpt .
|
||
|
||
# 直接執行容器
|
||
docker run -d -p 8000:8000 --name tobiichi-gpt tobiichi-gpt
|
||
|
||
# 使用 Docker Compose(推薦)
|
||
cd .\docker-stack
|
||
docker-compose up -d
|
||
|
||
# 查看容器狀態
|
||
docker ps
|
||
|
||
# 查看日誌
|
||
docker logs -f tobiichi-gpt
|
||
|
||
# 停止並移除
|
||
docker-compose down
|
||
```
|
||
|
||
### 與 Open WebUI 整合
|
||
|
||
如果 Open WebUI 也在 Docker 中運行,將兩者加入同一網路:
|
||
|
||
```yaml
|
||
# 在 docker-compose.yml 中加入 Open WebUI
|
||
version: '3.8'
|
||
|
||
services:
|
||
human-reply-server:
|
||
build: .
|
||
container_name: tobiichi-gpt
|
||
ports:
|
||
- "8000:8000"
|
||
networks:
|
||
- tobiichi-network
|
||
|
||
open-webui:
|
||
image: ghcr.io/open-webui/open-webui:main
|
||
container_name: open-webui
|
||
ports:
|
||
- "3000:8080"
|
||
volumes:
|
||
- open-webui:/app/backend/data
|
||
networks:
|
||
- tobiichi-network
|
||
|
||
networks:
|
||
tobiichi-network:
|
||
driver: bridge
|
||
|
||
volumes:
|
||
open-webui:
|
||
```
|
||
|
||
然後在 Open WebUI 中使用:
|
||
- **API Base URL**: `http://human-reply-server:8000/v1`
|
||
|
||
## 📝 進階設定
|
||
|
||
### 修改等待超時時間
|
||
|
||
編輯 `docker/human_reply_server.py` 第 79 行:
|
||
|
||
```python
|
||
timeout = 600 # 預設 10 分鐘,可改為其他秒數
|
||
```
|
||
|
||
### 修改伺服器埠號
|
||
|
||
**方法 1: 修改 docker-compose.yml**
|
||
```yaml
|
||
# 編輯 docker-stack/docker-compose.yml
|
||
ports:
|
||
- "9000:8000" # 本機 9000 對應容器 8000
|
||
```
|
||
|
||
**方法 2: 修改程式碼**
|
||
```python
|
||
# 編輯 docker/human_reply_server.py
|
||
uvicorn.run(app, host="0.0.0.0", port=8000) # 改為其他埠號
|
||
```
|
||
|
||
### 設定 Cloudflare Tunnel
|
||
|
||
詳細設定步驟請參考專案根目錄的說明文件,或參考 `docker-stack/.env.example`:
|
||
|
||
```powershell
|
||
cd docker-stack
|
||
Copy-Item .env.example .env
|
||
notepad .env # 填入您的 CLOUDFLARE_TUNNEL_TOKEN
|
||
```
|
||
|
||
### 支援多管理員
|
||
|
||
目前版本採「先搶先贏」機制,任何管理員都可以回覆任何訊息。若需要分配機制,可以加入:
|
||
- 管理員登入系統
|
||
- 訊息認領機制
|
||
- 管理員負載平衡
|
||
|
||
## ⚠️ 注意事項
|
||
|
||
- 此為**最簡化版本**,適合小規模使用
|
||
- 訊息儲存在記憶體中,重啟會遺失
|
||
- 沒有身份驗證,建議僅在內網使用
|
||
- 若需生產環境,建議加入:
|
||
- 資料庫持久化
|
||
- 身份驗證
|
||
- WebSocket 即時推送
|
||
- 訊息隊列系統
|
||
|
||
## 🎨 管理員後台截圖
|
||
|
||
後台提供:
|
||
- 待處理訊息列表
|
||
- 用戶訊息顯示
|
||
- 回覆文字框
|
||
- 一鍵送出功能
|
||
- 自動刷新
|