Skip to content

听觉设置中语音监测无法触发转录(VAD 模型在线加载失败导致 transcribeForMediaStream 不被调用) #1832

@daowuyuan

Description

@daowuyuan

问题描述

在听觉设置页面中,点击主「开始监测」按钮后,麦克风有拾音,但始终不会触发对 Whisper 网关的 POST 请求,转录功能完全无反应。
而同一页面中的「Speech-to-Text Test」功能可以正常使用(点击 Start → 说话 → Stop → 成功 POST 到 Whisper 网关并返回结果)。

版本信息

  • AIRI v0.10.2(Windows x64)
  • 同样存在于 v0.9.0

复现步骤

  1. 打开设置 → 听觉
  2. 选择正确的麦克风设备和转录 Provider(如 OpenAI-compatible / Whisper)
  3. 点击主「开始监测」按钮 → 指示灯正常,音量条有跳动
  4. 说话 → 没有 POST 请求发送到 Whisper 网关
  5. 切换到下方「Speech-to-Text Test」区域
  6. 点击 Start → 说话 → 点击 Stop → 成功发出 POST 请求并返回转录结果

根因分析(阅读源码后)

主监测流程的调用链是:

开始监测 → setupAudioMonitoring() → startStream() → initVAD() → startVAD(stream) → VAD 检测到语音 → onSpeechStart → handleSpeechStart() → transcribeForMediaStream() → POST 到 Whisper

而 STT Test 的调用链是:

Start Test → startStream() → startRecord() → Stop → transcribeForRecording() → POST 到 Whisper

关键差异:

  1. 主监测必须经过 initVAD() 初始化语音活动检测模型(HuggingFace 上的 onnx-community/silero-vad,~16MB ONNX 模型)
  2. 只有 VAD 的 onSpeechStart 回调才会触发 handleSpeechStart(),进而调用 transcribeForMediaStream()
  3. 如果 VAD 模型加载失败(国内网络无法访问 HuggingFace、超时、CORS 问题),initVAD() 抛出异常,整个监测流程静默失败
  4. 即使关闭「Model Based」切换到音量检测模式,isSpeechVolume 也仅仅用于显示指示灯,不会触发 transcribeForMediaStream()

STT Test 不依赖 VAD,直接录音后调用 transcribeForRecording(),因此正常工作。

建议修复方向

  1. 在 VAD 模型加载失败时提供降级方案:fallback 到 transcribeForMediaStream() 并使用音量检测代替 VAD 触发
  2. 或让音量检测模式也能触发 handleSpeechStart()startRecord()
  3. 或显示明确的 VAD 加载失败错误信息,而不是静默失败
  4. 建议将 silero-vad 模型做本地打包或提供离线加载选项,避免依赖在线 HuggingFace 下载

环境

  • OS: Windows 10 x64
  • AIRI: v0.10.2(v0.9.0 同样存在)
  • 转录 Provider: OpenAI-compatible (Whisper)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions