EN

语音活动检测:实现指南

检测并分割音频流中的语音

返回教程列表🌐 Read in English
进阶8 分钟

语音活动检测:实现指南

检测并分割音频流中的语音

语音活动检测(VAD)实现指南(2026):在转写/语音 Agent 前判断哪段是语音,省钱降延迟、判断说话结束。Silero vs webrtcvad、真实代码、VAD→分段→ASR 管线与实时 end-of-turn 调参。

语音活动检测:实现指南(2026)

语音活动检测(VAD)决定音频流的哪些部分包含语音,哪些是静音或噪声。它是转写和语音 Agent 的守门员:仅在语音段上运行昂贵的 ASR,并检测用户何时停止说话(“说话结束”),以便 Agent 可以响应。

为什么需要它

没有 VAD,你会转写静音、浪费 API 调用,并且无法判断说话者何时结束。有了它,你可以降低成本、减少延迟,并在语音 Agent 中实现自然的轮流说话。

实用选项

  • webrtcvad: 轻量、快速、经典的基于能量/GMM 的 VAD——非常适合在 ASR 之前进行分块。
  • Silero VAD: 一个小巧、准确的神经 VAD,处理噪声远优于基于能量的方法;现代默认选择。
  • python
    

    pip install silero-vad torch torchaudio

    from silero_vad import load_silero_vad, read_audio, get_speech_timestamps

    model = load_silero_vad() wav = read_audio("call.wav", sampling_rate=16000) segments = get_speech_timestamps(wav, model, sampling_rate=16000)

    segments = [{'start': 1280, 'end': 20480}, ...] → 只将这些段送入 ASR

    将 VAD 与转写结合使用

    标准管线:VAD → 分段 → ASR。将音频切片成语音段,然后将每个段发送给 Whisper 或流式 ASR。这避免了转写无声部分并提高了准确性。关于 ASR 步骤,请参阅多语言 ASROpenAI Whisper API

    为实时 Agent 调优

  • 说话结束检测: 在 N 毫秒的尾部静音后触发响应(例如 500–800ms)。太短会打断用户;太长会感觉延迟。
  • 激进程度: webrtcvad 有模式 0–3;越高拒绝更多非语音,但可能截断轻柔语音。
  • 前后填充: 在每个段前后添加少量音频,以便 ASR 不会截断单词边缘。
  • FAQ

    webrtcvad 还是 Silero? 噪声环境下选 Silero 以获得准确性;需要极小且超快时选 webrtcvad。 VAD 会转写吗? 不会——它只标记语音区域;ASR 负责转写。 如何检测说话结束? 在调优的尾部静音窗口后触发。 为什么要填充段? 避免在 ASR 前截断首尾单词。

    总结

    VAD 是任何语音管线中廉价且高杠杆的前端:使用 Silero(或 webrtcvad)检测语音,只将语音送入 ASR,并调优尾部静音阈值以实现自然的轮流说话。它降低成本、减少延迟,同时提高转写质量。


    *最后更新:2026 年 6 月。请对照 Silero VAD / webrtcvad 文档验证 API。*

    相关工具

    openaipython
    所属主题:OpenAI 开发实战