語音活動偵測 (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。