feat: 语音交互网页初始版本 - 前端+后端

This commit is contained in:
2026-04-21 18:19:04 +08:00
commit b3cfae14a9
6 changed files with 850 additions and 0 deletions

110
README.md Normal file
View File

@@ -0,0 +1,110 @@
# 语音交互网页
基于 Qwen2-Audio 的语音对话网页点击按钮录音AI 实时回复。
## 端口
- **服务端口**: 19019
- **模型服务**: 19018需要单独部署
## 功能
- 点击按钮录音(再次点击停止)
- 录音状态可视化(波形动画)
- 多轮对话支持
- 服务状态检测
- 清除对话功能
## 架构
```
┌─────────────┐ ┌─────────────────┐ ┌───────────────────┐
│ 浏览器前端 │ ──── │ 本机后端(19019) │ ──── │ 模型服务(19018) │
│ (录音/播放) │ HTTP │ (转发代理) │ HTTP │ (Qwen2-Audio) │
└─────────────┘ └─────────────────┘ └───────────────────┘
```
## 部署
### 1. 安装依赖
```bash
pip install -r requirements.txt
```
### 2. 启动模型服务(另一台电脑)
参考 `qwen-audio-server` 项目,在 GPU 机器上部署。
### 3. 启动网页服务
```bash
# 默认端口 19019
python main.py
# 或指定模型服务地址
MODEL_SERVICE_URL=http://192.168.2.5:19018 python main.py
```
### 4. 访问网页
```
http://localhost:19019
```
## 环境变量
| 变量 | 说明 | 默认值 |
|------|------|--------|
| PORT | 服务端口 | 19019 |
| MODEL_SERVICE_URL | 模型服务地址 | http://localhost:19018 |
## API 接口
### 语音对话
```bash
POST /api/voice/chat
Content-Type: multipart/form-data
参数:
- audio: 音频文件
- conversation_id: 对话ID可选
返回:
{
"reply": "AI回复文本",
"conversation_id": "xxx",
"timestamp": "..."
}
```
### 服务状态
```bash
GET /api/status
返回:
{
"status": "ok",
"model_service": "http://...",
"model_online": true
}
```
## 前端功能
| 功能 | 说明 |
|------|------|
| 录音按钮 | 点击开始/停止录音 |
| 波形动画 | 录音时显示动态波形 |
| 消息列表 | 显示对话历史 |
| 状态指示 | 模型服务连接状态 |
| 清除对话 | 重置对话历史 |
## 注意事项
1. 需要浏览器支持 MediaRecorder APIChrome/Firefox/Edge
2. 需要用户授权麦克风权限
3. 模型推理较慢约10-30秒请耐心等待
4. 录音格式为 WebM模型服务会自动转换