feat: 优化 语音速度

This commit is contained in:
liqupan
2025-12-06 22:41:44 +08:00
parent c20aca3da0
commit c82d24ddae
20 changed files with 3942 additions and 33 deletions

View File

@@ -0,0 +1,251 @@
# TTS连接预热优化测试指南
## 测试目标
验证TTS WebSocket连接预热和复用功能确保
1. 用户连接时成功预热TTS连接
2. 多句话复用同一个TTS连接
3. 连接断开后自动重连
4. 用户断开时正确清理连接
5. 性能提升符合预期
## 测试环境准备
1. 启动后端服务
2. 确保MiniMax TTS API配置正确
3. 使用微信小程序或WebSocket客户端
## 测试用例
### 测试1连接预热验证
**目的**验证用户连接时是否成功预热TTS连接
**步骤**
1. 前端连接到语音流WebSocket`ws://your-server:8091/ws/voice-stream`
2. 观察后端日志
**预期日志**
```
[VoiceStreamHandler] 语音流WebSocket连接建立 - SessionId: xxx, UserId: null
[VoiceStreamService] 预热TTS连接 - SessionId: xxx
[MinimaxTtsStreamService] 开始预热TTS连接 - SessionId: xxx
[MinimaxTtsStreamService] MiniMax TTS连接已建立 - SessionId: xxx
[MinimaxTtsStreamService] 收到connected_success发送task_start - SessionId: xxx
[MinimaxTtsStreamService] 收到task_started连接就绪 - SessionId: xxx
[MinimaxTtsStreamService] TTS连接预热成功 - SessionId: xxx, 耗时: XXXms
[VoiceStreamHandler] TTS连接预热成功 - SessionId: xxx
```
**成功标准**
- ✅ 连接建立后立即开始预热
- ✅ 预热在1-2秒内完成
- ✅ 连接状态变为IDLE
---
### 测试2连接复用验证
**目的**验证多句话是否复用同一个TTS连接
**步骤**
1. 确保已建立连接并预热成功
2. 发送一段音频(用户说:"你好,今天天气怎么样?"
3. 等待AI回复多句话例如"你好!今天天气很好。阳光明媚。"
4. 观察后端日志
**预期日志**
```
[VoiceStreamService] STT识别结果 - SessionId: xxx, Text: 你好,今天天气怎么样?
[VoiceStreamService] 检测到完整句子 - SessionId: xxx, Sentence: 你好!
[MinimaxTtsStreamService] 使用已有TTS连接 - SessionId: xxx, Text: 你好!
[MinimaxTtsStreamService] 缓冲音频块 - SessionId: xxx: 2048 bytes, 总计: 2048 bytes
...
[MinimaxTtsStreamService] TTS完成 - SessionId: xxx, Text: 你好!, 音频总大小: 24576 bytes
[MinimaxTtsStreamService] TTS完成 - SessionId: xxx, 耗时: 300ms复用连接节省约1秒
[VoiceStreamService] 检测到完整句子 - SessionId: xxx, Sentence: 今天天气很好。
[MinimaxTtsStreamService] 使用已有TTS连接 - SessionId: xxx, Text: 今天天气很好。
[MinimaxTtsStreamService] TTS完成 - SessionId: xxx, 耗时: 250ms复用连接节省约1秒
```
**成功标准**
- ✅ 日志显示"使用已有TTS连接"而不是"创建MiniMax TTS连接"
- ✅ 每句TTS完成时间在200-500ms而非1-1.5s
- ✅ 日志显示"复用连接节省约1秒"
- ✅ 没有重复的连接建立日志
---
### 测试3自动重连验证
**目的**:验证连接断开后是否自动重连
**步骤**
1. 正常建立连接
2. 手动关闭MiniMax TTS WebSocket连接模拟网络断开
3. 发送一段音频触发TTS
4. 观察后端日志
**预期日志**
```
[MinimaxTtsStreamService] MiniMax TTS连接关闭 - SessionId: xxx, Code: 1006, Reason: ..., Remote: true
[MinimaxTtsStreamService] 尝试自动重连TTS - SessionId: xxx, 第1次重连
[MinimaxTtsStreamService] 开始预热TTS连接 - SessionId: xxx
[MinimaxTtsStreamService] TTS连接预热成功 - SessionId: xxx, 耗时: XXXms
[MinimaxTtsStreamService] 使用已有TTS连接 - SessionId: xxx, Text: ...
```
**成功标准**
- ✅ 检测到连接断开
- ✅ 自动触发重连最多3次
- ✅ 重连成功后可正常使用
- ✅ 重连失败3次后停止尝试
---
### 测试4连接清理验证
**目的**验证用户断开时是否正确清理TTS连接
**步骤**
1. 建立连接并预热成功
2. 前端主动断开WebSocket连接
3. 观察后端日志
**预期日志**
```
[VoiceStreamHandler] 语音流WebSocket连接关闭 - SessionId: xxx, Status: CloseStatus[code=1000, reason=null]
[VoiceStreamService] 关闭TTS连接 - SessionId: xxx
[MinimaxTtsStreamService] 关闭TTS连接 - SessionId: xxx
[MinimaxTtsStreamService] 发送task_finish - SessionId: xxx
[MinimaxTtsStreamService] MiniMax TTS连接关闭 - SessionId: xxx, Code: 1000, Reason: ...
```
**成功标准**
- ✅ 正确发送task_finish
- ✅ 正常关闭TTS连接
- ✅ 从连接池中移除
- ✅ 无内存泄漏
---
### 测试5性能对比验证
**目的**:验证性能提升是否符合预期
**测试场景**AI回复3句话
**修改前性能**
- 首句延迟1-1.5秒
- 第二句延迟1-1.5秒
- 第三句延迟1-1.5秒
- **总延迟**3-4.5秒
**修改后预期性能**
- 首句延迟0.5秒仅TTS合成
- 第二句延迟0.2-0.3秒
- 第三句延迟0.2-0.3秒
- **总延迟**0.9-1.1秒
**性能提升**:约 **65-70%**
**验证方法**
1. 在日志中记录每句TTS的开始和结束时间
2. 计算总耗时
3. 与预期值对比
---
### 测试6并发测试
**目的**:验证多用户同时使用时的连接管理
**步骤**
1. 创建3-5个WebSocket连接模拟多用户
2. 每个连接同时发送音频
3. 观察后端日志和性能
**成功标准**
- ✅ 每个用户有独立的TTS连接
- ✅ 连接之间互不影响
- ✅ 无连接混乱
- ✅ 性能稳定
---
## 性能监控指标
在日志中关注以下关键指标:
1. **连接建立时间**`TTS连接预热成功 - SessionId: xxx, 耗时: XXXms`
2. **连接复用次数**:统计"使用已有TTS连接"出现次数
3. **TTS合成时间**`TTS完成 - SessionId: xxx, 耗时: XXXms`
4. **重连次数**`尝试自动重连TTS - SessionId: xxx, 第X次重连`
5. **连接状态变化**观察状态从CONNECTING → CONNECTED → TASK_STARTED → IDLE的转换
---
## 常见问题排查
### 问题1预热失败
**现象**`TTS连接预热失败 - SessionId: xxx`
**可能原因**
- MiniMax API配置错误
- 网络连接问题
- API密钥过期
**解决方法**
- 检查application.yml中的MiniMax配置
- 验证API密钥是否有效
- 检查网络连接
### 问题2连接未复用
**现象**每次TTS都显示"创建MiniMax TTS连接"
**可能原因**
- 连接状态管理错误
- 连接在使用前被关闭
**解决方法**
- 检查连接状态日志
- 确认is_final后状态设为IDLE而非关闭
### 问题3自动重连失败
**现象**重连3次后仍无法恢复
**可能原因**
- MiniMax服务问题
- 网络持续不稳定
**解决方法**
- 检查MiniMax服务状态
- 降级为按需创建连接
---
## 测试清单
- [ ] 测试1连接预热验证
- [ ] 测试2连接复用验证
- [ ] 测试3自动重连验证
- [ ] 测试4连接清理验证
- [ ] 测试5性能对比验证
- [ ] 测试6并发测试
- [ ] 检查无内存泄漏
- [ ] 检查无连接泄漏
- [ ] 压力测试10+并发用户)
---
## 测试结论
完成所有测试后,记录:
1. 实际性能提升百分比
2. 连接复用成功率
3. 自动重连成功率
4. 发现的问题和改进建议