Ai_GirlFriend/语音对话快速开始.md
2026-03-05 17:18:04 +08:00

286 lines
5.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 语音对话功能 - 快速开始
## ✅ 已完成的功能
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