For the complete documentation index, see llms.txt. Markdown versions of documentation pages are available by appending .md to the page URL.
主要導覽

語音活動偵測 (VAD)

瞭解 Realtime API 的自動語音活動偵測功能。

語音活動偵測 (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_responseinterrupt_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_responseinterrupt_response 欄位僅適用於對話。

選用的 eagerness 屬性可調整最長等待時間,藉此控制模型打斷使用者的積極程度。在轉錄模式中,即使模型不會回覆,這項屬性仍會影響音訊的分段方式。

  • 預設值為 auto,等同於 medium
  • low 會讓使用者有充裕的時間說話。
  • high 會盡快將音訊分段。

如果你希望模型在對話模式中更頻繁地回應,或在轉錄模式中更快傳回轉錄事件,可以將 eagerness 設為 high

另一方面,如果你希望使用者在對話模式中能不受打斷地說話,或希望在轉錄模式中取得較大的轉錄文字區段,可以將 eagerness 設為 low