刚才测试时出现:
2025-10-09 23:03:16.568 | WARNING | websocket_handler:receive_from_doubao:160 - ⚠️ 豆包连接已失效 (has_fatal_error=True),尝试恢复...
2025-10-09 23:03:17.070 | WARNING | websocket_handler:receive_from_doubao:160 - ⚠️ 豆包连接已失效 (has_fatal_error=True),尝试恢复...
2025-10-09 23:03:17.572 | WARNING | websocket_handler:receive_from_doubao:160 - ⚠️ 豆包连接已失效 (has_fatal_error=True),尝试恢复...
... (每0.5秒重复一次)
错误代码(已修复):
if not self.doubao_client.is_connected():
logger.warning("⚠️ 豆包连接已失效,尝试恢复...")
await asyncio.sleep(0.5)
continue # ❌ BUG: 导致无限循环
为什么会死循环:
continue 继续下一次循环✅ 正确代码:
if not self.doubao_client.is_connected():
logger.warning("⚠️ 豆包连接已失效,停止接收循环")
break # ✅ 退出循环,等待下次录音时自动重连
修复逻辑:
break 退出接收循环handle_start_recording() 中自动重连backend/websocket_handler.py
continue → break服务已自动重启,日志显示:
✓ 连接池初始化成功
应用启动完成!
正确的日志应该是:
❌ 豆包错误: AudioASRIdleTimeoutError
⚠️ 豆包连接已失效,停止接收循环 ← 只输出1次!
[用户下次录音]
🔄 豆包连接已失效,重新获取连接...
✅ 成功获取新的豆包连接
🎙️ [开始录音] 新一轮对话
✅ 无需重启前端 - 前端代码未修改 ✅ 用户无感知 - 刷新页面即可 ✅ 不影响正常对话 - 只修复了异常场景
handle_start_recording 检查并重连continue 为 break快速验证流程:
如有问题,查看后端日志:
tail -f /tmp/tolan_backend.log
修复完成时间: 2025-10-09 23:04
服务状态: ✅ 正常运行