A detecção de atividade de voz (VAD) é um recurso da Realtime API que identifica automaticamente quando o usuário começa ou para de falar.
Nas sessões de fala para fala da Realtime API, esse recurso vem ativado por padrão, mas você pode desativá-lo.
Nas sessões de transcrição da Realtime API, o suporte à detecção de turnos depende do modelo de transcrição. Os modelos compatíveis com VAD usam server_vad por padrão. Já os modelos gpt-live-transcribe e gpt-realtime-whisper exigem que você omita a configuração de detecção de turnos ou defina seu valor como null. Ao usar esses modelos, envie input_audio_buffer.commit para encerrar cada turno de áudio.
Visão geral
Com a VAD ativada, a Realtime API divide o áudio em trechos automaticamente e envia eventos para indicar quando o usuário começa ou para de falar.
input_audio_buffer.speech_startedindica o início de um turno de fala.input_audio_buffer.speech_stoppedindica o fim de um turno de fala.
Você pode usar esses eventos para lidar com os turnos de fala no seu aplicativo. Por exemplo, eles permitem gerenciar o estado da conversa ou processar a transcrição em trechos.
Para configurar a VAD, use o evento de cliente session.update e defina o campo session.audio.input.turn_detection.
A VAD tem dois modos.
server_vaddivide o áudio em trechos automaticamente com base nos períodos de silêncio.semantic_vadencerra um trecho de áudio quando o modelo entende, pelas palavras do usuário, que ele terminou de falar.
Para sessões e modelos compatíveis com VAD, o valor padrão é server_vad.
Veja a seguir como funciona cada modo.
VAD no servidor
A VAD no servidor é o modo padrão nas sessões de fala para fala e nas sessões de transcrição com modelos compatíveis com a detecção de turnos. Esse modo usa os períodos de silêncio para dividir o áudio em trechos automaticamente.
Use as propriedades a seguir para ajustar a detecção.
thresholddefine o limiar de ativação (de 0 a 1). Quanto maior o limiar, mais alto precisa ser o volume do áudio para ativar o modelo. Por isso, um limiar mais alto pode funcionar melhor em ambientes ruidosos.prefix_padding_msdefine quantos milissegundos de áudio anteriores ao início da fala detectado pela VAD devem ser incluídos no trecho.silence_duration_msdefine quantos milissegundos de silêncio são necessários para detectar o fim da fala. Com valores menores, a VAD detecta o fim do turno mais rapidamente.
Veja um exemplo de configuração da 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
},
},
},
},
}
Use o mesmo campo session.audio.input.turn_detection nas sessões de transcrição. Para gpt-live-transcribe e gpt-realtime-whisper, omita esse campo ou defina seu valor como null.
Os campos create_response e interrupt_response se aplicam apenas a conversas de fala para fala. Nas sessões de transcrição, a VAD controla apenas como o áudio é dividido em trechos.
VAD semântica
A VAD semântica é um novo modo que usa um classificador semântico para detectar, com base nas palavras do usuário, quando ele termina de falar. O classificador atribui uma pontuação ao áudio de entrada de acordo com a probabilidade de o usuário já ter terminado de falar. Se a probabilidade for baixa, o modelo aguarda até o fim do tempo de espera. Se for alta, não é preciso esperar. Por exemplo, se o usuário deixar uma frase em suspenso, o modelo esperará mais tempo do que se ele terminar com uma afirmação conclusiva.
Nesse modo, é menos provável que o modelo interrompa o usuário durante uma conversa de fala para fala ou encerre um trecho da transcrição antes que o usuário termine de falar.
Para ativar a VAD semântica, defina session.audio.input.turn_detection.type como semantic_vad.
Veja um exemplo de configuração.
{
"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
},
},
},
},
}
O mesmo campo session.audio.input.turn_detection se aplica às sessões de transcrição com modelos compatíveis com VAD. Os campos create_response e interrupt_response se aplicam apenas ao modo de conversa.
A propriedade opcional eagerness ajusta o tempo máximo de espera e, com isso, controla a rapidez com que o modelo pode interromper o usuário. No modo de transcrição, essa propriedade afeta a divisão do áudio em trechos, mesmo que o modelo não responda.
autoé o valor padrão e equivale amedium.lowdá ao usuário mais tempo para falar no próprio ritmo.highfaz com que o modelo divida o áudio em trechos assim que possível.
Se quiser que o modelo responda com mais frequência no modo de conversa ou retorne eventos de transcrição mais rapidamente no modo de transcrição, defina eagerness como high.
Se preferir que o usuário fale sem interrupções no modo de conversa ou que os trechos da transcrição sejam mais longos no modo de transcrição, defina eagerness como low.