286 lines
5.8 KiB
Markdown
286 lines
5.8 KiB
Markdown
|
|
# 语音对话功能 - 快速开始
|
|||
|
|
|
|||
|
|
## ✅ 已完成的功能
|
|||
|
|
|
|||
|
|
1. ✅ **ASR 语音识别** - 用户语音转文字
|
|||
|
|
2. ✅ **LLM 对话生成** - AI 智能回复
|
|||
|
|
3. ✅ **TTS 语音合成** - AI 回复转语音
|
|||
|
|
4. ✅ **前端播放** - 播放 AI 语音
|
|||
|
|
|
|||
|
|
## 🚀 快速测试
|
|||
|
|
|
|||
|
|
### 1. 启动后端服务
|
|||
|
|
|
|||
|
|
**双击运行**:`启动项目.bat`
|
|||
|
|
|
|||
|
|
这会自动启动:
|
|||
|
|
- PHP 服务器:http://127.0.0.1:30100
|
|||
|
|
- Python 后端:http://127.0.0.1:30101
|
|||
|
|
|
|||
|
|
应该看到两个窗口打开,显示:
|
|||
|
|
```
|
|||
|
|
[PHP 服务器] 正在启动...
|
|||
|
|
[PHP 服务器] 端口: 30100
|
|||
|
|
|
|||
|
|
[Python 后端] 正在启动...
|
|||
|
|
[Python 后端] 端口: 30101
|
|||
|
|
INFO: Uvicorn running on http://0.0.0.0:30101
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2. 测试完整对话流程
|
|||
|
|
|
|||
|
|
在前端应用中:
|
|||
|
|
|
|||
|
|
1. 打开语音通话页面
|
|||
|
|
2. 按住"按住说话"按钮
|
|||
|
|
3. 说话 2-3 秒:"你好,今天天气怎么样?"
|
|||
|
|
4. 松开按钮
|
|||
|
|
5. 等待处理(约 5-10 秒)
|
|||
|
|
6. 看到提示:"你说: 你好,今天天气怎么样?"
|
|||
|
|
7. 听到 AI 的语音回复
|
|||
|
|
|
|||
|
|
### 3. 查看日志
|
|||
|
|
|
|||
|
|
**前端控制台**:
|
|||
|
|
```
|
|||
|
|
📤 开始发送音频进行语音对话
|
|||
|
|
📊 音频数据大小: XXX bytes
|
|||
|
|
📤 发送语音对话请求...
|
|||
|
|
✅ 对话响应: ...
|
|||
|
|
✅ 识别结果: 你好,今天天气怎么样?
|
|||
|
|
✅ AI回复: 今天天气很好哦...
|
|||
|
|
🔊 开始播放 AI 语音回复...
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**后端日志**:
|
|||
|
|
```
|
|||
|
|
INFO - 收到语音对话请求,用户: XXX, 格式: wav
|
|||
|
|
INFO - 音频数据大小: XXX 字节
|
|||
|
|
INFO - 开始 ASR 识别...
|
|||
|
|
INFO - 音频已上传: https://...
|
|||
|
|
INFO - ASR 任务创建: xxx
|
|||
|
|
INFO - ASR 识别结果: 你好,今天天气怎么样?
|
|||
|
|
INFO - 开始 LLM 对话生成...
|
|||
|
|
INFO - LLM 回复: 今天天气很好哦...
|
|||
|
|
INFO - 开始 TTS 语音合成...
|
|||
|
|
INFO - TTS 合成完成,音频大小: XXX 字节
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2. 验证服务运行
|
|||
|
|
|
|||
|
|
打开浏览器访问:
|
|||
|
|
- Python API 文档:http://127.0.0.1:30101/docs
|
|||
|
|
- PHP 后台:http://127.0.0.1:30100/admin
|
|||
|
|
|
|||
|
|
如果能正常访问,说明服务启动成功。
|
|||
|
|
|
|||
|
|
## 📋 对比:两种模式
|
|||
|
|
|
|||
|
|
### 模式 1: 仅 ASR 识别
|
|||
|
|
|
|||
|
|
**端点**: `/voice/call/asr`
|
|||
|
|
|
|||
|
|
**流程**:
|
|||
|
|
```
|
|||
|
|
用户录音 → ASR → 返回文字
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**用途**:
|
|||
|
|
- 快速测试 ASR 功能
|
|||
|
|
- 仅需要语音转文字
|
|||
|
|
- 调试识别准确度
|
|||
|
|
|
|||
|
|
**响应时间**: 3-5 秒
|
|||
|
|
|
|||
|
|
### 模式 2: 完整语音对话(推荐)
|
|||
|
|
|
|||
|
|
**端点**: `/voice/call/conversation`
|
|||
|
|
|
|||
|
|
**流程**:
|
|||
|
|
```
|
|||
|
|
用户录音 → ASR → LLM → TTS → 返回文字+语音
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**用途**:
|
|||
|
|
- 完整的语音对话体验
|
|||
|
|
- AI 智能回复
|
|||
|
|
- 自然的语音交互
|
|||
|
|
|
|||
|
|
**响应时间**: 7-15 秒
|
|||
|
|
|
|||
|
|
## 🎯 使用建议
|
|||
|
|
|
|||
|
|
### 什么时候用 ASR 模式?
|
|||
|
|
|
|||
|
|
- ✅ 测试语音识别准确度
|
|||
|
|
- ✅ 调试录音功能
|
|||
|
|
- ✅ 快速验证音频质量
|
|||
|
|
- ✅ 不需要 AI 回复
|
|||
|
|
|
|||
|
|
### 什么时候用对话模式?
|
|||
|
|
|
|||
|
|
- ✅ 正式的语音通话功能
|
|||
|
|
- ✅ 需要 AI 智能回复
|
|||
|
|
- ✅ 完整的用户体验
|
|||
|
|
- ✅ 生产环境使用
|
|||
|
|
|
|||
|
|
## 🔧 切换模式
|
|||
|
|
|
|||
|
|
### 前端代码修改
|
|||
|
|
|
|||
|
|
**使用 ASR 模式**:
|
|||
|
|
```javascript
|
|||
|
|
const response = await uni.request({
|
|||
|
|
url: this.baseURLPy + '/voice/call/asr',
|
|||
|
|
method: 'POST',
|
|||
|
|
data: {
|
|||
|
|
audio_data: base64Audio,
|
|||
|
|
format: 'wav'
|
|||
|
|
}
|
|||
|
|
})
|
|||
|
|
|
|||
|
|
// 只返回识别文字
|
|||
|
|
const text = response.data.data.text
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**使用对话模式**(当前默认):
|
|||
|
|
```javascript
|
|||
|
|
const response = await uni.request({
|
|||
|
|
url: this.baseURLPy + '/voice/call/conversation',
|
|||
|
|
method: 'POST',
|
|||
|
|
data: {
|
|||
|
|
audio_data: base64Audio,
|
|||
|
|
format: 'wav'
|
|||
|
|
}
|
|||
|
|
})
|
|||
|
|
|
|||
|
|
// 返回识别文字 + AI回复 + 语音
|
|||
|
|
const userText = response.data.data.user_text
|
|||
|
|
const aiText = response.data.data.ai_text
|
|||
|
|
const audioData = response.data.data.audio_data
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 📊 功能对比表
|
|||
|
|
|
|||
|
|
| 功能 | ASR 模式 | 对话模式 |
|
|||
|
|
|------|---------|---------|
|
|||
|
|
| 语音识别 | ✅ | ✅ |
|
|||
|
|
| AI 回复 | ❌ | ✅ |
|
|||
|
|
| 语音合成 | ❌ | ✅ |
|
|||
|
|
| 响应时间 | 3-5秒 | 7-15秒 |
|
|||
|
|
| 网络流量 | 小 | 中 |
|
|||
|
|
| 用户体验 | 基础 | 完整 |
|
|||
|
|
| 适用场景 | 测试 | 生产 |
|
|||
|
|
|
|||
|
|
## 🎨 用户体验对比
|
|||
|
|
|
|||
|
|
### ASR 模式体验
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
用户: [按住] "你好" [松开]
|
|||
|
|
↓ (3秒)
|
|||
|
|
界面: "识别: 你好"
|
|||
|
|
↓
|
|||
|
|
[结束,等待用户下一次操作]
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 对话模式体验(推荐)
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
用户: [按住] "你好" [松开]
|
|||
|
|
↓ (3秒)
|
|||
|
|
界面: "你说: 你好"
|
|||
|
|
↓ (2秒)
|
|||
|
|
界面: "AI: 你好呀,很高兴见到你~"
|
|||
|
|
↓
|
|||
|
|
[播放 AI 语音]
|
|||
|
|
↓
|
|||
|
|
[自然的对话体验]
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 🚀 下一步
|
|||
|
|
|
|||
|
|
### 立即可以做的
|
|||
|
|
|
|||
|
|
1. ✅ 测试完整对话流程
|
|||
|
|
2. ✅ 调整 AI 回复风格(修改 personality_prompt)
|
|||
|
|
3. ✅ 更换音色(修改 voice_id)
|
|||
|
|
4. ✅ 优化录音时长
|
|||
|
|
|
|||
|
|
### 需要开发的
|
|||
|
|
|
|||
|
|
1. ⏳ 对话历史记录
|
|||
|
|
2. ⏳ 多轮对话上下文
|
|||
|
|
3. ⏳ 流式 TTS(边生成边播放)
|
|||
|
|
4. ⏳ 打断功能
|
|||
|
|
|
|||
|
|
## 💡 优化建议
|
|||
|
|
|
|||
|
|
### 提升响应速度
|
|||
|
|
|
|||
|
|
1. **使用更快的模型**
|
|||
|
|
```bash
|
|||
|
|
LLM_MODEL=qwen-flash # 更快但质量略低
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
2. **限制回复长度**
|
|||
|
|
```bash
|
|||
|
|
LLM_MAX_TOKENS=500 # 减少生成时间
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
3. **优化网络**
|
|||
|
|
- 使用 CDN 加速
|
|||
|
|
- 选择就近的 OSS 区域
|
|||
|
|
|
|||
|
|
### 提升对话质量
|
|||
|
|
|
|||
|
|
1. **完善人格设定**
|
|||
|
|
- 在数据库中设置详细的 personality_prompt
|
|||
|
|
- 包含性格、说话风格、兴趣爱好等
|
|||
|
|
|
|||
|
|
2. **添加对话历史**
|
|||
|
|
- 保存最近 5-10 轮对话
|
|||
|
|
- 提供更连贯的上下文
|
|||
|
|
|
|||
|
|
3. **情感调节**
|
|||
|
|
- 根据用户语气调整回复
|
|||
|
|
- 使用不同的 TTS 参数
|
|||
|
|
|
|||
|
|
## 📝 测试检查清单
|
|||
|
|
|
|||
|
|
### 基础功能
|
|||
|
|
- [ ] 录音功能正常
|
|||
|
|
- [ ] ASR 识别准确(准确率 > 90%)
|
|||
|
|
- [ ] LLM 回复合理
|
|||
|
|
- [ ] TTS 语音自然
|
|||
|
|
- [ ] 播放功能正常
|
|||
|
|
|
|||
|
|
### 用户体验
|
|||
|
|
- [ ] 响应时间可接受(< 15秒)
|
|||
|
|
- [ ] 提示信息清晰
|
|||
|
|
- [ ] 错误处理友好
|
|||
|
|
- [ ] 音质清晰
|
|||
|
|
|
|||
|
|
### 边界情况
|
|||
|
|
- [ ] 录音时间太短
|
|||
|
|
- [ ] 录音时间太长
|
|||
|
|
- [ ] 网络中断
|
|||
|
|
- [ ] 识别失败
|
|||
|
|
- [ ] 合成失败
|
|||
|
|
|
|||
|
|
## 🎉 恭喜!
|
|||
|
|
|
|||
|
|
你已经完成了完整的语音对话功能!现在可以:
|
|||
|
|
|
|||
|
|
1. ✅ 用户说话,AI 听懂
|
|||
|
|
2. ✅ AI 智能回复
|
|||
|
|
3. ✅ AI 用语音回答
|
|||
|
|
4. ✅ 自然的对话体验
|
|||
|
|
|
|||
|
|
享受与 AI 恋人的语音对话吧!💕
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
**最后更新**: 2026-03-05
|
|||
|
|
**版本**: v2.0
|