语音活动检测(VAD)是 Realtime API 提供的一项功能,可自动检测用户何时开始或停止说话。
该功能在语音到语音实时会话中默认启用,但属于可选功能,可以关闭。
在转录实时会话中,是否支持轮次检测取决于转录模型。支持 VAD 的模型默认使用 server_vad,而 gpt-realtime-whisper 要求省略轮次检测设置或将其设为 null。
概览
启用 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 是语音到语音会话的默认模式,也是使用支持轮次检测的模型进行转录会话时的默认模式。它根据静音时段自动对音频分段。
您可以调整以下属性,微调 VAD 设置:
threshold:激活阈值(0 到 1)。阈值越高,激活模型所需的音量就越大,因此在嘈杂环境中可能表现更好。prefix_padding_ms:在 VAD 检测到的语音起点之前,额外保留的音频时长(以毫秒为单位)。silence_duration_ms:判定说话结束所需的静音时长(以毫秒为单位)。值越小,检测到轮次结束的速度越快。
以下是 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-realtime-whisper,请省略轮次检测设置或将其设为 null。
create_response 和 interrupt_response 字段仅用于语音到语音对话。在转录会话中,VAD 仅控制音频的分段方式。
语义 VAD
语义 VAD 是一种新模式,它使用语义分类器,根据用户所说的内容检测用户是否已说完。 该分类器根据用户已说完的概率对输入音频进行评分。概率较低时,模型会等待,直到超时;概率较高时,则无需等待。 例如,如果用户的语音以拖长的“嗯……”收尾,等待超时时间就会比以明确的陈述收尾时更长。
使用此模式时,模型在语音到语音对话中打断用户的可能性会降低,也更不容易在用户尚未说完时就将转录文本分段。
将 session.audio.input.turn_detection.type 设为 semantic_vad 即可启用语义 VAD。
配置方式如下:
{
"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。