Ai_GirlFriend/语音对话快速开始.md

286 lines
5.8 KiB
Markdown
Raw Permalink Normal View History

2026-03-05 17:18:04 +08:00
# 语音对话功能 - 快速开始
## ✅ 已完成的功能
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