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