音声区間検出(VAD)は、ユーザーが話し始めた時点と話し終えた時点を自動で検出する Realtime API の機能です。
Realtime API の音声変換セッションではデフォルトで有効ですが、必要に応じて無効にできます。
Realtime API の文字起こしセッションでターン検出を使用できるかどうかは、文字起こしモデルによって異なります。VAD に対応するモデルでは、ターン検出のデフォルト値は server_vad です。gpt-live-transcribe と gpt-realtime-whisper では、ターン検出の設定を省略するか、null に設定する必要があります。この 2 つのモデルでは、音声ターンごとに input_audio_buffer.commit を送信してターンを終了します。
概要
VAD を有効にすると、音声が自動的に区切られ、Realtime API が次のイベントでユーザーの発話の開始と終了を通知します。
input_audio_buffer.speech_started:発話ターンの開始input_audio_buffer.speech_stopped:発話ターンの終了
アプリケーションでは、これらのイベントを使って発話ターンごとに処理できます。たとえば、会話の状態を管理したり、文字起こし結果を区間ごとに処理したりできます。
VAD を設定するには、クライアントイベント session.update で session.audio.input.turn_detection を指定します。
VAD には 2 つのモードがあります。
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-live-transcribe と gpt-realtime-whisper では、ターン検出の設定を省略するか、null に設定してください。
create_response と interrupt_response の各フィールドは、音声変換による会話でのみ使用します。文字起こしセッションでは、VAD は音声の区切り方だけを制御します。
セマンティック VAD
セマンティック VAD は、意味分類器を使い、ユーザーが話した内容から発話の終了を検出する新しいモードです。 この分類器は、ユーザーが話し終えた確率に基づいて入力音声を評価します。確率が低ければモデルはタイムアウトまで待機し、確率が高ければ待機する必要はありません。 たとえば、ユーザーの語尾が次第に弱まる場合は、はっきりと言い切った場合よりもタイムアウトまでの時間が長くなります。
このモードでは、音声変換による会話でモデルがユーザーの発話を遮ったり、ユーザーが話し終える前に文字起こし結果を区切ったりすることが少なくなります。
セマンティック VAD を有効にするには、session.audio.input.turn_detection.type を semantic_vad に設定します。
設定例を示します。
{
"type": "session.update",
"session": {
"type": "realtime",
"audio": {
"input": {
"turn_detection": {
"type": "semantic_vad",
"eagerness": "auto", // optional
"create_response": true, // only in conversation mode
"interrupt_response": true, // only in conversation mode
},
},
},
},
}
VAD に対応するモデルを使った文字起こしセッションでも、同じ session.audio.input.turn_detection フィールドを使用します。create_response と interrupt_response の各フィールドは会話専用です。
省略可能な eagerness プロパティでは、最大待機時間を調整して、モデルがどの程度早くユーザーの発話に割り込むかを制御できます。文字起こしモードでは、モデルが応答しなくても、この設定が音声の区切り方に影響します。
autoはデフォルト値で、mediumと同じ動作になります。lowにすると、ユーザーは時間をかけて話せます。highにすると、音声をできるだけ早く区切ります。
会話モードでモデルの応答頻度を上げたい場合や、文字起こしモードで文字起こしイベントをより早く受け取りたい場合は、eagerness を high に設定します。
一方、会話モードでユーザーが話を遮られずに済むようにしたい場合や、文字起こしモードでより長い区間の文字起こし結果をまとめて受け取りたい場合は、eagerness を low に設定します。