OpenAI 语音活动检测

2026-11-06 12:39 更新

语音活动检测(VAD)是 Realtime API 的一项功能,自动检测用户开始或停止说话。

它在语音到语音 Realtime 会话中默认启用,但可选择关闭。转录会话是否支持轮次检测取决于模型:支持 VAD 的模型默认用 server_vad;gpt-live-transcribe 与 gpt-realtime-whisper 则要求省略轮次检测或设为 null,通过 input_audio_buffer.commit 结束每个音频轮次。

概览

启用 VAD 后,音频自动分块,Realtime API 用事件表明用户开始或停止说话:

  • input_audio_buffer.speech_started:讲话轮次开始。
  • input_audio_buffer.speech_stopped:讲话轮次结束。

应用可用这些事件处理轮次,例如管理对话状态或分块处理转录。

通过 session.update 客户端事件,设置 session.audio.input.turn_detection 来配置 VAD。

VAD 有两种模式:

  • server_vad:根据静音区间自动划分音频。
  • semantic_vad:模型根据用户说的话判断表达已结束时划分音频。

支持 VAD 的会话和模型默认值为 server_vad。以下说明两者差别。

服务端 VAD

服务端 VAD 是语音到语音会话及支持轮次检测的转录模型的默认模式,根据静音区间自动分块。

可调整以下属性:

  • threshold:激活阈值,范围 0 到 1。值越高,越需要较响音频才会激活,因此可能更适合嘈杂环境。
  • prefix_padding_ms:VAD 检测到语音前,额外包含的音频时长,单位毫秒。
  • silence_duration_ms:用于判定讲话停止的静音时长,单位毫秒。越短,检测轮次越快。

配置示例:

来源示例 1(json):字段名、事件类型和示意值保留原样,含义见相邻正文;片段中的省略号不表示完整可运行程序。

// [中文] 按原代码构造或处理这些事件:session.update、realtime、server_vad;保留请求与服务端确认的区别。
{
  "type": "session.update",
  "session": {
    "type": "realtime",
    "audio": {
      "input": {
        "turn_detection": {
          "type": "server_vad",
          "threshold": 0.5,
          "prefix_padding_ms": 300,
          "silence_duration_ms": 500,
          "create_response": true, // only in conversation mode
          "interrupt_response": true, // only in conversation mode
        },
      },
    },
  },
}

转录会话同样使用 session.audio.input.turn_detection。gpt-live-transcribe、gpt-realtime-whisper 应省略该设置或设为 null。

create_response、interrupt_response 仅用于语音到语音对话。转录会话的 VAD 只控制音频分块。

语义 VAD

语义 VAD 使用语义分类器,根据已说出的话检测用户是否结束表达。分类器评估用户已说完的概率:概率低时等待超时,概率高时无需等待。例如,声音逐渐拖尾的表达会比明确陈述获得更长等待时间。

这种模式在语音对话中较不容易打断用户,转录时也较不容易在用户没说完时切块。

将 session.audio.input.turn_detection.type 设为 semantic_vad 即可启用,配置如下:

来源示例 2(json):字段名、事件类型和示意值保留原样,含义见相邻正文;片段中的省略号不表示完整可运行程序。

// [中文] 按原代码构造或处理这些事件:session.update、realtime、semantic_vad;保留请求与服务端确认的区别。
{
  "type": "session.update",
  "session": {
    "type": "realtime",
    "audio": {
      "input": {
        "turn_detection": {
          "type": "semantic_vad",
          "eagerness": "auto", // optional
          "create_response": true, // only in conversation mode
          "interrupt_response": true, // only in conversation mode
        },
      },
    },
  },
}

支持 VAD 的模型在转录会话中也使用相同字段。create_response、interrupt_response 仅限对话。

可选 eagerness 调整模型结束等待的积极程度,也就是最大等待超时。转录模式即使不生成回复,该设置仍影响音频如何分块。

  • auto 为默认值,等同于 medium。
  • low 给用户更多说话时间。
  • high 尽早划分音频。

希望对话模式更频繁回复,或转录模式更快返回事件时,可设为 high。希望对话中减少打断,或转录时得到更大文本块时,可设为 low。

以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号