La detección de actividad de voz (VAD) es una función de la Realtime API que permite detectar automáticamente cuándo el usuario empieza o deja de hablar.
Está habilitada de forma predeterminada en las sesiones Realtime de voz a voz, pero es opcional y se puede desactivar.
En las sesiones Realtime de transcripción, la compatibilidad con la detección de turnos depende del modelo de transcripción. Los modelos compatibles con VAD usan server_vad de forma predeterminada, mientras que gpt-realtime-whisper requiere que se omita la detección de turnos o se establezca en null.
Descripción general
Cuando la VAD está habilitada, el audio se divide automáticamente en segmentos y la Realtime API envía eventos para indicar cuándo el usuario empieza o deja de hablar:
input_audio_buffer.speech_started: el inicio de un turno de hablainput_audio_buffer.speech_stopped: el final de un turno de habla
Puedes usar estos eventos para gestionar los turnos de habla en tu aplicación. Por ejemplo, puedes usarlos para gestionar el estado de la conversación o procesar las transcripciones por segmentos.
Puedes configurar la VAD mediante el evento de cliente session.update, estableciendo session.audio.input.turn_detection.
Hay dos modos de VAD:
server_vad: divide automáticamente el audio en segmentos según los períodos de silencio.semantic_vad: divide el audio en segmentos cuando el modelo considera, a partir de las palabras del usuario, que este ha terminado su intervención.
Para las sesiones y los modelos compatibles con VAD, el valor predeterminado es server_vad.
Sigue leyendo para obtener más información sobre los distintos modos.
VAD del servidor
La VAD del servidor es el modo predeterminado para las sesiones de voz a voz y para las sesiones de transcripción con modelos compatibles con la detección de turnos. Usa los períodos de silencio para dividir automáticamente el audio en segmentos.
Puedes ajustar las siguientes propiedades para afinar la configuración de la VAD:
threshold: umbral de activación (de 0 a 1). Un umbral más alto requiere audio de mayor volumen para activar el modelo, por lo que podría funcionar mejor en entornos ruidosos.prefix_padding_ms: cantidad de audio (en milisegundos) que se incluye antes del habla detectada por la VAD.silence_duration_ms: duración del silencio (en milisegundos) necesaria para detectar que el usuario dejó de hablar. Con valores más cortos, los turnos se detectan más rápido.
Este es un ejemplo de configuración de la 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
}
}
}
}
}
Usa el mismo campo session.audio.input.turn_detection en las sesiones de transcripción. Para gpt-realtime-whisper, omite la detección de turnos o establécela en null.
Los campos create_response y interrupt_response solo se usan en las conversaciones de voz a voz. En las sesiones de transcripción, la VAD solo controla cómo se divide el audio en segmentos.
VAD semántica
La VAD semántica es un nuevo modo que usa un clasificador semántico para detectar cuándo el usuario ha terminado de hablar, a partir de las palabras que ha dicho. Este clasificador asigna una puntuación al audio de entrada según la probabilidad de que el usuario haya terminado de hablar. Cuando la probabilidad es baja, el modelo espera hasta que se agote un plazo; cuando es alta, no hace falta esperar. Por ejemplo, si la voz del usuario se apaga con un “mmm...”, el tiempo de espera será más largo que si termina con una afirmación concluyente.
Con este modo, es menos probable que el modelo interrumpa al usuario durante una conversación de voz a voz o divida una transcripción en segmentos antes de que el usuario termine de hablar.
Puedes activar la VAD semántica estableciendo session.audio.input.turn_detection.type en semantic_vad.
Puedes configurarla así:
{
"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
}
}
}
}
}
El mismo campo session.audio.input.turn_detection se aplica en las sesiones de transcripción. Los campos create_response y interrupt_response son exclusivos de las conversaciones.
La propiedad opcional eagerness permite controlar qué tan pronto el modelo interrumpe al usuario, ajustando el tiempo máximo de espera. En el modo de transcripción, aunque el modelo no responda, esta propiedad influye en cómo se divide el audio en segmentos.
autoes el valor predeterminado y equivale amedium.lowpermite que el usuario se tome su tiempo para hablar.highdivide el audio en segmentos lo antes posible.
Si quieres que el modelo responda con más frecuencia en el modo de conversación o devuelva eventos de transcripción más rápido en el modo de transcripción, puedes establecer eagerness en high.
Por otro lado, si quieres que el usuario hable sin interrupciones en el modo de conversación o prefieres segmentos de transcripción más grandes en el modo de transcripción, puedes establecer eagerness en low.