语音活动检测 (VAD) 是 Realtime API 中的一项功能,允许自动检测用户何时开始或停止说话。它在语音到语音 (speech-to-speech) 的 Realtime 会话中默认启用,但属于可选功能,可以关闭。在转录 (transcription) Realtime 会话中,对轮次检测(turn detection)的支持取决于转录模型。支持 VAD 的模型默认使用 server_vad,而 gpt-realtime-whisper 则要求省略轮次检测或将其设置为 null。
概述
启用 VAD 后,音频会自动分块,并且 Realtime API 会发送事件以指示用户何时开始或停止说话
input_audio_buffer.speech_started:语音轮次的开始input_audio_buffer.speech_stopped:语音轮次的结束
您可以使用这些事件来处理应用程序中的语音轮次。例如,您可以使用它们来管理对话状态或分块处理转录内容。
您可以通过设置 session.audio.input.turn_detection,使用 session.update 客户端事件来配置 VAD。
VAD 有两种模式
server_vad:根据静音时段自动对音频进行分块。semantic_vad:当模型根据用户所说的内容判断用户已完成表达时,对音频进行分块。
对于支持 VAD 的会话和模型,默认值为 server_vad。
请阅读下文以了解有关不同模式的更多信息。
Server VAD
Server 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。
create_response 和 interrupt_response 字段仅用于语音到语音的对话。在转录会话中,VAD 仅控制音频如何分块。
Semantic VAD
Semantic VAD 是一种新模式,它使用语义分类器根据用户所说的词语来检测用户何时完成说话。该分类器根据用户已完成说话的概率对输入音频进行评分。当概率较低时,模型会等待超时;而当概率较高时,则无需等待。例如,用户说话时如果结尾带有“嗯……”的拖长音,会导致比果断的陈述更长的超时时间。
使用此模式,模型在语音到语音的对话中打断用户的可能性更小,或者在用户说完话之前切断转录的可能性也更小。
可以通过将 session.audio.input.turn_detection.type 设置为 semantic_vad 来激活 Semantic 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
}
}
}
}
}同样的 session.audio.input.turn_detection 字段也适用于转录会话。create_response 和 interrupt_response 字段仅适用于对话模式。
可选的 eagerness 属性可以控制模型打断用户的积极程度,从而调整最大等待超时时间。在转录模式下,即使模型不回复,它也会影响音频的分块方式。
auto为默认值,等同于medium。low将允许用户从容地完成发言。high将尽快对音频进行分块。
如果您希望模型在对话模式中更频繁地响应,或者在转录模式中更快地返回转录事件,您可以将 eagerness 设置为 high。
另一方面,如果您希望让用户在对话模式中不受干扰地说话,或者希望在转录模式中获得更大的转录片段,您可以将 eagerness 设置为 low。