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

Transcripción en tiempo real

Transcribe audio en vivo en una sesión en tiempo real.

Usa la transcripción en tiempo real cuando tu aplicación necesite obtener texto de un micrófono, una llamada u otra transmisión de audio en vivo sin una respuesta hablada del asistente. El modelo recomendado devuelve deltas de transcripción a medida que recibe la voz y una transcripción final cuando tu aplicación confirma cada turno de audio.

Empieza con gpt-live-transcribe. Usa la transcripción de archivos si el audio ya está grabado, o consulta la descripción general de la transcripción para comparar los flujos de trabajo.

Crear una sesión de transcripción

Crea una sesión con type: "transcription" y selecciona gpt-live-transcribe. Conéctate mediante WebSocket para flujos de procesamiento de audio del lado del servidor o WebRTC para audio en el navegador.

{
  "type": "session.update",
  "session": {
    "type": "transcription",
    "audio": {
      "input": {
        "format": {
          "type": "audio/pcm",
          "rate": 24000
        },
        "transcription": {
          "model": "gpt-live-transcribe"
        },
        "turn_detection": null
      }
    }
  }
}

Este ejemplo usa audio PCM de 24 kHz y desactiva la detección automática de turnos para que puedas confirmar cada turno de forma explícita. Para ver la configuración completa de la sesión, consulta la referencia de sesiones en tiempo real.

Transmitir audio

Envía fragmentos de audio con input_audio_buffer.append:

ws.send(
  JSON.stringify({
    type: "input_audio_buffer.append",
    audio: base64Pcm16,
  })
);

Con la detección automática de turnos desactivada, confirma el búfer cuando quieras finalizar un turno de audio:

ws.send(
  JSON.stringify({
    type: "input_audio_buffer.commit",
  })
);

Si prefieres que el servidor detecte y confirme los límites de cada turno, configura la detección de actividad de voz.

Manejar eventos de transcripción

Escucha los deltas incrementales de transcripción y los eventos de finalización:

ws.on("message", (data) => {
  const event = JSON.parse(data);

  if (event.type === "conversation.item.input_audio_transcription.delta") {
    process.stdout.write(event.delta);
  }

  if (event.type === "conversation.item.input_audio_transcription.completed") {
    console.log("\nFinal transcript:", event.transcript);
  }
});

Un evento delta contiene el texto de transcripción recién disponible:

{
  "type": "conversation.item.input_audio_transcription.delta",
  "item_id": "item_003",
  "content_index": 0,
  "delta": "Hello,"
}

Un evento de finalización contiene la transcripción final del elemento confirmado:

{
  "type": "conversation.item.input_audio_transcription.completed",
  "item_id": "item_003",
  "content_index": 0,
  "transcript": "Hello, how are you?"
}

No se garantiza el orden de los eventos de finalización de distintos turnos de voz. Usa item_id para vincular los eventos de transcripción con los elementos de entrada confirmados.

Agregar contexto para la transcripción

Agrega contexto cuando el audio contenga vocabulario especializado o se espere más de un idioma. Envía otro evento session.update para cambiar la configuración de transcripción durante una sesión existente.

{
  "type": "session.update",
  "session": {
    "type": "transcription",
    "audio": {
      "input": {
        "format": {
          "type": "audio/pcm",
          "rate": 24000
        },
        "transcription": {
          "model": "gpt-live-transcribe",
          "prompt": "A customer support call about a premium plan and account AC-42.",
          "keywords": ["premium plan", "AC-42", "billing"],
          "languages": ["en", "fr"],
          "delay": "low"
        },
        "turn_detection": null
      }
    }
  }
}
  • Usa prompt para describir la grabación o su contexto.
  • Usa keywords para nombres de productos, acrónimos y otros términos literales que puedan aparecer en el audio.
  • Usa languages para los idiomas de entrada esperados.

Los formatos de códigos de idioma compatibles incluyen:

  • Códigos ISO 639-1, como en, es y fr.
  • Algunos códigos ISO 639-3, como eng, spa, yue y cmn.
  • Códigos de configuración regional de zh, como zh-cn, zh-tw y zh-hk.

La Realtime API rechaza los códigos de idioma no compatibles o con un formato incorrecto.

Las palabras clave sirven como pistas; no tienen que aparecer en la salida. Mantén cada palabra clave en una sola línea y no incluyas <, >, retornos de carro ni saltos de línea. La Realtime API rechaza la actualización de la sesión si una palabra clave contiene alguno de estos caracteres o si prompt supera el límite de longitud del modelo.

gpt-live-transcribe usa languages en lugar del campo en singular language. No envíes ambos.

Transcribir un turno confirmado

Usa gpt-transcribe en una sesión en tiempo real solo cuando necesites específicamente que la transcripción comience después de confirmar un turno de audio o que la salida incluya los idiomas detectados. Este flujo de trabajo especializado requiere una conexión WebSocket.

Cuando gpt-transcribe transcribe la entrada en una sesión de la Realtime API o se ejecuta en una sesión dedicada a la transcripción, usa automáticamente los turnos transcritos anteriormente como contexto.

{
  "type": "session.update",
  "session": {
    "type": "transcription",
    "audio": {
      "input": {
        "format": {
          "type": "audio/pcm",
          "rate": 24000
        },
        "transcription": {
          "model": "gpt-transcribe"
        },
        "turn_detection": null
      }
    }
  }
}

Agrega audio y envía input_audio_buffer.commit. El modelo podrá entonces emitir deltas de transcripción antes del evento de finalización. Ese evento también incluye los idiomas detectados:

{
  "type": "conversation.item.input_audio_transcription.completed",
  "item_id": "item_003",
  "content_index": 0,
  "transcript": "Bonjour, pouvez-vous m'entendre ?",
  "languages": [{ "code": "fr" }]
}

Cuando gpt-transcribe no puede predecir el idioma de forma confiable, languages es un arreglo vacío. gpt-live-transcribe no devuelve predicciones de idiomas detectados.

Ajustar la latencia y la precisión

La transcripción en streaming implica un equilibrio entre la latencia y la calidad de la transcripción. Los ajustes de menor demora pueden producir texto parcial antes. Los ajustes de mayor demora le dan al modelo más contexto de audio antes de emitir texto y pueden mejorar la tasa de error por palabra.

Empieza por configurar audio.input.transcription.delay y hacer pruebas con tu audio real. Estos son algunos puntos de partida útiles:

  • minimal para las interacciones más sensibles a la latencia;
  • low para subtítulos en vivo de baja latencia;
  • medium para un equilibrio entre latencia y precisión;
  • high cuando la precisión importe más que mostrar el texto de inmediato;
  • xhigh cuando tu flujo de trabajo pueda tolerar la mayor demora a cambio de más contexto.

La demora exacta en milisegundos puede variar según la configuración del modelo, así que mide el rendimiento con audio representativo en lugar de suponer un tiempo fijo por nivel.

No elijas un ajuste basándote solo en audio sintético. Haz pruebas con micrófonos, audio telefónico, acentos, ruido de fondo, alternancia de idiomas, vocabulario especializado y sesiones largas que sean representativos del uso real.

Manejar la confianza, las marcas de tiempo y las etiquetas de hablantes

gpt-live-transcribe no devuelve marcas de tiempo por palabra, etiquetas de hablantes ni puntuaciones de confianza de la transcripción. Si tu aplicación requiere marcas de tiempo o etiquetas de hablantes, usa un modelo compatible de transcripción de archivos o agrega una alternativa en la aplicación.

Lista de verificación para producción

  • Define una latencia objetivo y un umbral de precisión antes de hacer ajustes.
  • Haz pruebas con audio real de producción, no solo con muestras sin ruido.
  • Haz pruebas con cada idioma objetivo.
  • Incluye números, fechas, monedas, direcciones de correo electrónico, nombres de productos y términos especializados en tu conjunto de evaluación.
  • Lleva un registro de las transcripciones vacías, truncadas y demoradas por separado de la tasa de error por palabra.
  • Decide cómo debe actualizar tu interfaz el texto parcial cuando las actualizaciones incrementales posteriores corrijan el texto anterior.
  • Usa item_id para ordenar y conciliar las transcripciones finales.
  • Mantén una alternativa para las marcas de tiempo, las etiquetas de hablantes o los campos de confianza que no se admitan.
Descripción general de tiempo real y audio

Compara las sesiones de agentes de voz, traducción y transcripción.

Traducción en tiempo real

Traduce voz en vivo con una sesión dedicada a la traducción.

Conexión WebSocket

Transmite audio sin procesar a través de un flujo de procesamiento multimedia del lado del servidor.

Detección de actividad de voz

Configura la detección de turnos para transmisiones de audio en vivo.