语音活动检测 (VAD) 是 Realtime API 中提供的一项功能,可自动检测用户何时开始或停止说话。该功能在 语音转语音 Realtime 会话中默认启用,但它是可选的且可以关闭。在 转录 Realtime 会话中,轮次检测支持取决于转录模型。支持 VAD 的模型默认值为 server_vad,而 gpt-realtime-whisper 要求轮次检测被省略或设置为 null.
概览
当启用 VAD 时,音频会自动分块,并且 Realtime API 会发送事件以指示用户何时开始或停止说话:
input_audio_buffer.speech_started:语音轮次的开始input_audio_buffer.speech_stopped:语音轮次的结束
您可以使用这些事件在应用程序中处理发言轮次。例如,您可以使用它们来管理对话状态或分块处理转录文本。
您可以通过设置 session.update 客户端事件来配置 VAD: session.audio.input.turn_detection.
VAD 有两种模式:
server_vad:根据静音时段自动对音频进行分块。semantic_vad:当模型根据用户所说的话判断其已完成发言时,对音频进行分块。
对于支持 VAD 的会话和模型,默认值为 server_vad.
请阅读以下内容以了解有关不同模式的更多信息。
服务端 VAD
服务端 VAD 是语音转语音会话以及支持轮次检测的模型在转录会话中的默认模式。它利用静音期来自动对音频进行分块。
您可以调整以下属性以微调 VAD 设置:
threshold:激活阈值(0 到 1)。较高的阈值将要求更大的音量来激活模型,因此在嘈杂环境中可能会有更好的表现。prefix_padding_ms:在 VAD 检测到语音之前包含的音频量(以毫秒为单位)。silence_duration_ms:用于检测语音停止的静音时长(以毫秒为单位)。值越小,检测到轮次的速度越快。
以下是一个 VAD 配置示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
"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-realtime-whisper,省略轮次检测或将其设置为 null.
The create_response and interrupt_response 字段仅在语音转语音对话中使用。在转录会话中,VAD 仅控制音频的分块方式。
语义 VAD
语义 VAD 是一种新模式,它使用语义分类器根据用户所说的话来检测用户何时结束发言。该分类器根据用户说完的概率对输入音频进行评分。当概率较低时,模型将等待超时;而当概率较高时,则无需等待。例如,用户音频以“嗯……”结尾时所等待的超时时间将长于明确的陈述。
使用此模式,在语音转语音对话期间,模型不太可能打断用户,或者在用户说完之前就对转录文本进行分块。
可以通过设置 session.audio.input.turn_detection.type to semantic_vad.
来激活语义 VAD。可以像这样进行配置:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{
"type": "session.update",
"session": {
"type": "realtime",
"audio": {
"input": {
"turn_detection": {
"type": "semantic_vad",
"eagerness": "low" | "medium" | "high" | "auto", // optional
"create_response": true, // only in conversation mode
"interrupt_response": true, // only in conversation mode
}
}
}
}
}The same session.audio.input.turn_detection 字段适用于转录会话。 create_response and interrupt_response 字段仅用于对话。
The optional eagerness 属性是一种控制模型打断用户意愿的方法,可调整最大等待超时。在转录模式下,即使模型不回复,它也会影响音频的分块方式。
auto是默认值,相当于medium.low将允许用户从容不迫地说话。high将尽快对音频进行分块。
如果您希望模型在对话模式下更频繁地响应,或者在转录模式下更快地返回转录事件,您可以设置 eagerness to high.
另一方面,如果您希望让用户在对话模式下不受打断地发言,或者如果您希望在转录模式下获得更大的转录文本块,您可以设置 eagerness to low.