5.8 KiB
5.8 KiB
语音对话功能 - 快速开始
✅ 已完成的功能
- ✅ ASR 语音识别 - 用户语音转文字
- ✅ LLM 对话生成 - AI 智能回复
- ✅ TTS 语音合成 - AI 回复转语音
- ✅ 前端播放 - 播放 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. 测试完整对话流程
在前端应用中:
- 打开语音通话页面
- 按住"按住说话"按钮
- 说话 2-3 秒:"你好,今天天气怎么样?"
- 松开按钮
- 等待处理(约 5-10 秒)
- 看到提示:"你说: 你好,今天天气怎么样?"
- 听到 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 模式:
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
使用对话模式(当前默认):
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 语音]
↓
[自然的对话体验]
🚀 下一步
立即可以做的
- ✅ 测试完整对话流程
- ✅ 调整 AI 回复风格(修改 personality_prompt)
- ✅ 更换音色(修改 voice_id)
- ✅ 优化录音时长
需要开发的
- ⏳ 对话历史记录
- ⏳ 多轮对话上下文
- ⏳ 流式 TTS(边生成边播放)
- ⏳ 打断功能
💡 优化建议
提升响应速度
-
使用更快的模型
LLM_MODEL=qwen-flash # 更快但质量略低 -
限制回复长度
LLM_MAX_TOKENS=500 # 减少生成时间 -
优化网络
- 使用 CDN 加速
- 选择就近的 OSS 区域
提升对话质量
-
完善人格设定
- 在数据库中设置详细的 personality_prompt
- 包含性格、说话风格、兴趣爱好等
-
添加对话历史
- 保存最近 5-10 轮对话
- 提供更连贯的上下文
-
情感调节
- 根据用户语气调整回复
- 使用不同的 TTS 参数
📝 测试检查清单
基础功能
- 录音功能正常
- ASR 识别准确(准确率 > 90%)
- LLM 回复合理
- TTS 语音自然
- 播放功能正常
用户体验
- 响应时间可接受(< 15秒)
- 提示信息清晰
- 错误处理友好
- 音质清晰
边界情况
- 录音时间太短
- 录音时间太长
- 网络中断
- 识别失败
- 合成失败
🎉 恭喜!
你已经完成了完整的语音对话功能!现在可以:
- ✅ 用户说话,AI 听懂
- ✅ AI 智能回复
- ✅ AI 用语音回答
- ✅ 自然的对话体验
享受与 AI 恋人的语音对话吧!💕
最后更新: 2026-03-05 版本: v2.0