For the complete documentation index, see llms.txt. Markdown versions of documentation pages are available by appending .md to the page URL.
Navegación principal
Theme

Detección de actividad de voz (VAD)

Conoce cómo funciona la detección automática de actividad de voz en la Realtime API.

La detección de actividad de voz (VAD) es una función de la Realtime API que detecta automáticamente cuándo el usuario empieza o deja de hablar. Está activada de forma predeterminada en las sesiones de voz a voz de la Realtime API, pero es opcional y puedes desactivarla. En las sesiones de transcripción de la Realtime API, 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. Con gpt-live-transcribe y gpt-realtime-whisper, debes omitir la detección de turnos o establecerla en null. Envía input_audio_buffer.commit para finalizar cada turno de audio con estos modelos.

Descripción general

Cuando la VAD está activada, 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: inicio de un turno de voz
  • input_audio_buffer.speech_stopped: fin de un turno de voz

Puedes usar estos eventos para gestionar los turnos de voz en tu aplicación. Por ejemplo, puedes usarlos para gestionar el estado de la conversación o procesar las transcripciones por segmentos.

Para configurar la VAD, envía el evento de cliente session.update con la configuración en el campo session.audio.input.turn_detection.

La VAD tiene dos modos:

  • server_vad: divide el audio automáticamente en segmentos según los períodos de silencio.
  • semantic_vad: divide el audio en segmentos cuando el modelo determina, a partir de las palabras del usuario, que terminó de expresar lo que quería decir.

En las sesiones y los modelos compatibles con VAD, el valor predeterminado es server_vad.

A continuación se describe cada modo con más detalle.

VAD del servidor

La VAD del servidor es el modo predeterminado en las sesiones de voz a voz y en las sesiones de transcripción con modelos compatibles con la detección de turnos. Usa los períodos de silencio para dividir el audio automáticamente en segmentos.

Puedes ajustar las siguientes propiedades para afinar la configuración de la VAD:

  • threshold: umbral de activación (de 0 a 1). Con un umbral más alto, se necesita un mayor volumen de audio para activar el modelo, lo que puede mejorar su desempeño en entornos ruidosos.
  • prefix_padding_ms: cantidad de audio (en milisegundos) que se incluye antes del punto en que la VAD detecta voz.
  • silence_duration_ms: duración del silencio (en milisegundos) necesaria para detectar que el usuario dejó de hablar. Con valores más bajos, el final de cada turno se detecta más rápido.

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. Con gpt-live-transcribe y gpt-realtime-whisper, omite la detección de turnos o establécela en null.

Los campos create_response e 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 modo nuevo que usa un clasificador semántico para detectar, a partir de las palabras del usuario, cuándo termina de hablar. El clasificador asigna una puntuación al audio de entrada según la probabilidad de que el usuario haya terminado de hablar. Si la probabilidad es baja, el modelo deja que transcurra el tiempo de espera. Si es alta, no necesita esperar. Por ejemplo, si el usuario deja una frase en el aire, el tiempo de espera será mayor 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 que divida una transcripción en segmentos antes de que el usuario termine de hablar.

Para activar la VAD semántica, establece session.audio.input.turn_detection.type en semantic_vad.

Puedes configurarla de la siguiente manera:

{
  "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
        },
      },
    },
  },
}

El mismo campo session.audio.input.turn_detection se usa en las sesiones de transcripción con modelos compatibles con VAD. Los campos create_response e interrupt_response se usan solo en el modo de conversación.

La propiedad opcional eagerness permite ajustar el tiempo máximo de espera para controlar con qué rapidez el modelo puede interrumpir al usuario. En el modo de transcripción, afecta la forma en que se divide el audio en segmentos, incluso si el modelo no responde.

  • auto es el valor predeterminado y equivale a medium.
  • low permite que el usuario se tome su tiempo para hablar.
  • high divide el audio en segmentos lo antes posible.

Si quieres que el modelo responda con mayor frecuencia en el modo de conversación o que devuelva eventos de transcripción más rápido en el modo de transcripción, puedes establecer eagerness en high.

Si prefieres que el usuario hable sin interrupciones en el modo de conversación o que los segmentos de transcripción sean más largos en el modo de transcripción, puedes establecer eagerness en low.