Aprende

Detección de actividad de voz: VAD para agentes de voz

Rene, Kabir Goel 
Detección de actividad de voz: VAD para agentes de voz

La detección de actividad de voz, o VAD, identifica habla en un flujo de audio. Para un agente de voz, ayuda a responder a “¿Está hablando alguien?”. La pregunta difícil es “¿Ha terminado?”.

Una persona dice “Mi dirección es…” y hace una pausa para consultar el número del edificio. Un detector de habla puede identificar correctamente el silencio mientras el agente empieza a hablar por error. Nadie pidió una interrupción especialmente segura de sí misma.

Si estás creando un agente conversacional, usa VAD donde necesites delimitar el habla y elige después una política explícita de gestión de turnos. Veamos cómo encajan estas piezas, dónde ayudan los detectores independientes y qué probar antes de que tu agente atienda llamadas.

Cómo funciona la detección de actividad de voz

Un VAD procesa ventanas breves de audio y estima si contienen habla. Según la implementación, devuelve una decisión binaria, una probabilidad o marcas de tiempo de habla construidas a partir de esas decisiones.

Un umbral simple de energía considera habla cualquier audio suficientemente fuerte. Su coste computacional es bajo, pero un portazo también puede ser fuerte. Los detectores más avanzados usan características acústicas o modelos neuronales para distinguir el habla de otros sonidos. El VAD moderno no se limita a medir el volumen.

La aplicación suele añadir lógica alrededor del detector. Puede exigir varias tramas de habla antes de iniciar un segmento, conservar un pequeño búfer de audio anterior a la activación y esperar durante un breve silencio antes de cerrar el segmento. Esa lógica afecta a lo que oye el usuario. Sin un búfer, una detección correcta de habla puede llegar demasiado tarde para conservar el principio de una palabra.

VAD no transcribe palabras, identifica a un hablante concreto ni elimina el ruido de la grabación. Son tareas distintas. Un detector puede reconocer correctamente una voz de televisión como habla y aun así activar un comportamiento incorrecto en un agente que solo debería escuchar a quien llama.

VAD, detección de final y detección semántica de turnos

Estos términos describen decisiones distintas:

ComponentePregunta que respondeLimitación que debes tener en cuenta
Detección de actividad de voz¿Contiene habla este audio?Una pausa dice poco sobre si una idea está completa.
Detección de final basada en silencio¿Ha cesado el habla durante el tiempo suficiente para cerrar el turno?Un tiempo de espera fijo trata de forma parecida una pausa para pensar y una frase terminada.
Detección semántica de turnos¿El audio y el contexto lingüístico sugieren que el hablante ha terminado?Las predicciones pueden adelantarse o retrasarse; la aplicación necesita poder recuperarse.
Gestión de interrupciones¿Debe el agente detener su respuesta actual cuando empieza el habla?También hay que detener o descartar los búferes de reproducción y la generación en curso.

La detección de final basada en silencio suele ser un punto de partida razonable. Su compromiso es directo. Un tiempo de espera menor responde antes, pero puede cortar a alguien que sigue pensando. Uno mayor le da espacio, pero retrasa las respuestas cuando ya ha terminado.

La detección semántica de turnos usa contexto adicional para distinguir esos casos. “Mi correo electrónico es…” y “Eso es todo, gracias” pueden merecer esperas distintas aunque después haya una pausa similar. Sigue siendo una estimación, no un permiso para asumir que la persona nunca cambiará de idea.

El anuncio de Ink 2 explica por qué integramos la detección semántica de final en el reconocimiento de voz. Queremos que las personas puedan terminar sus ideas y recibir respuestas a tiempo. Optimizar solo la precisión de las tramas de habla no garantiza esa experiencia.

Cuándo usar un VAD independiente

Un detector independiente resulta útil cuando necesitas localizar el habla antes de decidir qué hacer con ella. Puede marcar regiones habladas en grabaciones, controlar un indicador de habla o proporcionar eventos de inicio de habla a tu propio flujo del agente. La detección local también permite ejecutar esa etapa en el dispositivo. Eso no convierte el resto de un agente conectado a la nube en un sistema privado o sin conexión.

Dos implementaciones que conviene evaluar son WebRTC VAD mediante py-webrtcvad y Silero VAD.

ImplementaciónConsideraciones de entrada y ejecuciónQué comprobar en tu aplicación
WebRTC VADEl adaptador de Python acepta PCM mono de 16 bits a 8, 16, 32 o 48 kHz, en tramas de 10, 20 o 30 ms. Ofrece cuatro modos de agresividad.Si un filtrado más estricto pierde habla suave y si tu flujo de captura entrega tramas válidas.
Silero VADDetector neuronal con opciones de PyTorch y ONNX; el proyecto documenta compatibilidad con 8 y 16 kHz.Coste del modelo y del entorno de ejecución en el dispositivo previsto, requisitos de los fragmentos y activaciones falsas con tu audio.

Estos requisitos de formato dependen de la implementación. Una cabecera WAV no es una muestra PCM y un paquete MP3 no es una trama que puedas pasar directamente a WebRTC VAD. Decodifica y convierte el audio antes de detectarlo cuando la entrada lo requiera. Consulta la documentación actual de la implementación en vez de asumir que acepta la frecuencia de muestreo predeterminada del micrófono del navegador.

Ningún detector es un gestor completo de conversaciones. Sigues necesitando detección de final, gestión de interrupciones y una forma de recuperarte cuando la persona continúa hablando.

Cómo usar la detección de turnos integrada de Ink

Si quieres transcripción en streaming y límites de turno juntos, la API Realtime Speech-to-Text (Auto) de Cartesia incluye ambos. No hace falta un VAD independiente para determinar esos límites.

El ciclo de eventos distingue entre un posible final y uno confirmado:

EventoQué debe contemplar la aplicación
turn.startLa persona ha empezado a hablar. Aplica tu política de interrupción a cualquier respuesta activa.
turn.updateActualiza la transcripción mostrada o almacenada para este turno.
turn.eager_endEl turno podría haber terminado. Puedes empezar a generar una respuesta de forma especulativa.
turn.resumeLa persona ha continuado. Cancela o descarta el trabajo basado en el final provisional.
turn.endEl detector confirma que el turno ha terminado. Usa la transcripción completa para continuar.

Por ejemplo, a un final anticipado tras “Necesito cancelar” puede seguirle “la segunda cita, no la primera”. Empieza a preparar una respuesta si ayuda a reducir la latencia, pero espera a confirmar el final para reproducirla. Las acciones con consecuencias, como cancelar una reserva, deben seguir las reglas de validación y confirmación de la aplicación. Una predicción anticipada de final no es una autorización del usuario.

Es fácil pasar por alto dos detalles de integración. Primero, los eventos que contienen transcripción incluyen el texto acumulado del turno. Sustituye el texto actual; concatenar cada actualización repite palabras. Segundo, la API espera audio continuo, incluido el silencio. No uses un VAD previo para descartar fragmentos silenciosos. La ausencia de audio se interpreta como una espera de más entrada, no como prueba de que la persona ha dejado de hablar.

La documentación de detección de turnos explica los umbrales, la cancelación y cómo vaciar los eventos pendientes al cerrar una conexión. Empieza por los valores predeterminados y cambia un ajuste cada vez usando fallos conversacionales grabados.

Prueba la conversación, además del detector

Decide cómo debe ser la interacción antes de elegir umbrales. Un recepcionista que recoge una dirección debe dar tiempo a consultarla. Un intercambio breve de sí o no puede requerir menos espera. Un único tiempo de espera de silencio global no refleja todos los requisitos.

Usa grabaciones obtenidas con el permiso correspondiente e incluye el micrófono o la conexión telefónica reales que usará tu agente. Escucha intercambios completos, no solo clips aislados:

EscenarioFallo que debes buscar
Una primera sílaba suave tras el silencioLa grabación o la transcripción pierden el principio de la palabra.
Una pausa a mitad de una direcciónEl agente responde antes de que la persona termine.
Una respuesta breve y completaEl agente sigue esperando cuando el turno ha terminado claramente.
”Mejor el jueves” mientras habla el agenteEl agente sigue reproduciendo audio almacenado por encima de la corrección.
Habla de fondo, ruido de teclado o eco del altavozEl agente se detiene o empieza a responder al sonido equivocado.
Distintos acentos, velocidades de habla y vacilacionesUn ajuste funciona para quien creó la prueba, pero interrumpe a otras personas.

Registra los finales prematuros y las interrupciones no detectadas junto con el retraso de respuesta. Separa la espera antes del cierre del turno del tiempo empleado por el LLM, las llamadas a herramientas, la generación de voz y la reproducción. Reducir el tiempo de espera del VAD no arregla una consulta lenta al calendario.

Cuando interrumpan al agente, examina todo el flujo de salida. Cancelar la generación de texto no elimina necesariamente el audio ya encolado en el cliente. A quien dice “para” le importa cuándo se detiene el sonido, no qué tarea del servidor recibió una cancelación.

Para probar la detección de turnos integrada, usa la demo de Ink en el navegador y haz una pausa deliberada en mitad de una frase. Después ejecuta el ejemplo de STT en tiempo real con tus propias condiciones de audio. La prueba útil es si el agente deja terminar a tus usuarios y responde cuando están preparados.

Preguntas frecuentes

¿Qué es la detección de actividad de voz?

La detección de actividad de voz (VAD) identifica qué partes de un flujo de audio contienen habla. Puede devolver una decisión o una probabilidad de habla para tramas breves de audio. Las aplicaciones usan esos resultados para localizar segmentos hablados, gestionar la grabación o ayudar a detectar interrupciones. VAD por sí sola no determina si una persona ha terminado su idea.

¿En qué se diferencian VAD y la detección de turnos?

VAD determina si hay habla. La detección de turnos determina si ha empezado o terminado el turno conversacional del hablante. Un detector de fin de turno basado en silencio combina VAD con un tiempo de espera; la detección semántica de turnos también usa el contexto lingüístico o conversacional para decidir cuándo responder.

¿Debo usar WebRTC VAD o Silero VAD?

WebRTC VAD permite detectar habla por tramas con requisitos estrictos de formato PCM. Silero VAD es un detector neuronal con opciones de PyTorch y ONNX. Compáralos con audio de los dispositivos, condiciones de ruido y hablantes previstos. Ninguno de estos detectores independientes decide si una frase está completa.

¿Cartesia Ink necesita un VAD independiente?

La API Realtime Speech-to-Text (Auto) de Cartesia incluye detección de turnos y no necesita un VAD independiente para delimitar esos turnos. Espera audio continuo, incluido el silencio. Su evento turn.eager_end es provisional; turn.resume indica que ese final provisional debe ignorarse.