STT_ISSUE_DIAGNOSIS.md 3.4 KB

STT 国际版问题诊断报告

问题现象

使用国际版配置(USE_DASHSCOPE_INTL=true)时:

  • ✅ LLM 正常工作
  • ✅ TTS 正常工作
  • ❌ STT 无识别结果(超时后使用默认文本)

日志显示:

[request_id] ⚠️  STT未识别到文本,使用默认
识别文本长度: 0字

根本原因

API Key 不匹配

国内版(北京地域)和国际版(新加坡地域)的 API Key 是在不同地域申请的,互不通用。

当设置 USE_DASHSCOPE_INTL=true 时:

  • ✅ URL 切换到 dashscope-intl.aliyuncs.com(正确)
  • ❌ 但仍使用国内版的 API Key(错误)

导致:

  • STT WebSocket 连接建立成功
  • 但 API 认证失败,无法返回识别结果
  • LLM/TTS 使用国内 key 仍能工作的原因可能是容错机制或缓存

解决方案

方案1:使用单个 key(简单,需手动切换)

在 .env 中根据地域设置对应的 key:

# 使用国内版
DASHSCOPE_API_KEY=sk-beijing-xxx
USE_DASHSCOPE_INTL=false

# 切换到国际版时,需要手动改 key
DASHSCOPE_API_KEY=sk-singapore-xxx
USE_DASHSCOPE_INTL=true

方案2:分别配置两个 key(推荐,自动切换)

已实现,在 .env 中同时配置:

# 国内版 key(北京地域申请)
DASHSCOPE_API_KEY=sk-beijing-xxx

# 国际版 key(新加坡地域申请)
DASHSCOPE_API_KEY_INTL=sk-singapore-xxx

# 切换地域(自动使用对应的 key)
USE_DASHSCOPE_INTL=false  # 或 true

系统会自动使用:

  • USE_DASHSCOPE_INTL=false → 使用 DASHSCOPE_API_KEY
  • USE_DASHSCOPE_INTL=true → 使用 DASHSCOPE_API_KEY_INTL(如果配置了)

代码修改

1. config.py

添加 active_dashscope_api_key 属性:

@property
def active_dashscope_api_key(self) -> str:
    """获取当前激活的API Key(根据国际版/国内版自动选择)"""
    if self.use_dashscope_intl and self.dashscope_api_key_intl:
        return self.dashscope_api_key_intl
    return self.dashscope_api_key

2. websocket_handler.py

STT 使用动态 key:

dashscope.api_key = settings.active_dashscope_api_key

3. ai_service.py

LLM/TTS 使用动态 key:

dashscope.api_key = settings.active_dashscope_api_key

验证方法

test_stt_xjp.py 成功的原因

该测试脚本成功的关键:

# 明确使用国际版 key
dashscope.api_key = "sk-28defb4cde1c440c9f26191b0c781aaf"

# 明确使用国际版 URL
url='wss://dashscope-intl.aliyuncs.com/api-ws/v1/realtime'

Key 和 URL 匹配,所以成功。

修复后测试步骤

  1. 在 .env 中配置:

    DASHSCOPE_API_KEY=sk-国内版key
    DASHSCOPE_API_KEY_INTL=sk-28defb4cde1c440c9f26191b0c781aaf
    USE_DASHSCOPE_INTL=true
    
    1. 重启后端: bash python main.py
  2. 观察日志:

    🔧 预解析DNS (dashscope-intl.aliyuncs.com)...
    [request_id] 🔗 STT连接已打开
    [request_id] 💬 STT识别(⏳中间): xxx  # 应该有识别结果
    [request_id] ✓ STT识别完成: "xxx" (长度: xx字)
    

关键点总结

  1. API Key 地域绑定:北京 key ≠ 新加坡 key
  2. URL 和 Key 必须匹配:
    • dashscope.aliyuncs.com + 北京 key ✅
    • dashscope-intl.aliyuncs.com + 新加坡 key ✅
    • dashscope-intl.aliyuncs.com + 北京 key ❌
  3. LLM/TTS 可能有容错:所以单独 STT 失败更明显
  4. 解决方案:使用 active_dashscope_api_key 自动选择正确的 key