GPT-Live delega el razonamiento y el uso de herramientas a un backend mientras gestiona la conversación hablada. El trabajo del backend puede ejecutarse mediante el modelo de Responses configurado o, con la delegación al cliente, mediante cualquier modelo, agente o servicio que opere tu aplicación. En ambos modos, tu aplicación se encarga de los permisos, las confirmaciones, los registros del negocio y el estado de las tareas.
Obtén más información sobre cómo orientar al modelo en vivo para la delegación y el uso de herramientas en la guía de diseño de prompts.
Elegir un modo de delegación
Con la delegación a Responses, GPT-Live llama al modelo de Responses que elijas, proporciona el contexto de la conversación y devuelve los resultados del backend a la conversación en vivo. Con la delegación al cliente, tu aplicación prepara el contexto, ejecuta un agente o un flujo de trabajo y envía los resultados a GPT-Live.
Empieza con la delegación a Responses si su flujo de trabajo administrado se ajusta a tus necesidades. Elige la delegación al cliente cuando necesites más control sobre el contexto del backend, la ejecución o los resultados que se devuelven a GPT-Live.
| Aspecto a considerar | Prefiere la delegación a Responses cuando… | Prefiere la delegación al cliente cuando… |
|---|---|---|
| Esfuerzo de implementación | Quieres que GPT-Live prepare las solicitudes al backend, gestione las conexiones y devuelva los resultados a la conversación. | Quieres desarrollar y operar esos componentes por tu cuenta. |
| Revisión de los resultados del backend | La salida del backend puede volver directamente a GPT-Live. | Tu aplicación debe validar los resultados, ocultar información, combinarlos o descartarlos antes de que lleguen a GPT-Live. |
| Capacidades del backend | Tu flujo de trabajo se ajusta a la configuración y las herramientas de Responses que admite GPT-Live. | Necesitas otro backend, varios modelos o capacidades de la API que van más allá de la configuración administrada. |
| Control del contexto | El contexto de conversación que proporciona GPT-Live se ajusta a tu aplicación. | Necesitas elegir exactamente qué historial, memoria y estado de la aplicación recibe cada solicitud al backend. |
| Política de ejecución | Un ciclo configurado de modelo y herramientas se ajusta a la tarea. | Necesitas enrutamiento personalizado entre código y modelos, alternativas de respaldo, puntos de control o presupuestos para los distintos pasos del backend. |
Por ejemplo, un asistente de viajes puede enviar preguntas sobre el estado de un vuelo a un servicio de la aerolínea y cambios de itinerario a un agente de planificación independiente. La aplicación elige a qué backend llamar y qué resultado verificado devolver a GPT-Live.
En ambos modos, tu aplicación gestiona el estado de las tareas y hace cumplir los permisos y las confirmaciones requeridas antes de ejecutar sus herramientas personalizadas. Revisar los resultados del backend es una decisión independiente: no implica aprobar cada palabra que dice GPT-Live ni garantiza que permanezca en silencio durante la validación. Consulta Controlar la reproducción cuando sea necesario.
La delegación al cliente también requiere que tu aplicación mantenga el contexto de la conversación. El evento de delegación contiene metadatos, no el texto de la tarea; usa los eventos de transcripción y el estado de la aplicación para preparar la solicitud al backend.
Compara la latencia, el éxito de las tareas y el costo con tu propia carga de trabajo al evaluar tu agente de voz. Para obtener orientación específica para tu arquitectura actual, consulta Migrar a GPT-Live.
Elige el modo al crear la sesión; para cambiar de modo, inicia una sesión nueva.
Configurar la delegación a Responses
Agrega esta configuración de delegación al crear tu sesión de Live. Elige el modelo de Responses de forma independiente del modelo de voz:
export const session = {
model: "gpt-live-1",
delegation: {
type: "responses",
responses: {
model: "gpt-5.6-terra",
instructions: "[Your backend prompt]",
},
},
};Empieza con GPT-5.6 Terra o prueba GPT-5.6 Luna para cargas de trabajo en las que el costo sea un factor clave. Compara la calidad de las respuestas y la latencia en tus tareas antes de elegir un modelo para el backend.
Registra las herramientas compatibles en delegation.responses.tools. Usa delegation.responses.tool_choice para controlar qué herramientas puede usar el backend: "auto" le permite elegir, "required" exige una llamada a una herramienta y "none" la impide. También puedes seleccionar una función por su nombre. Establece delegation.responses.parallel_tool_calls en true para permitir consultas independientes simultáneas, o en false cuando las llamadas deban ejecutarse de forma secuencial. Tu aplicación sigue ejecutando sus funciones personalizadas y haciendo cumplir las dependencias y las aprobaciones. Estas opciones no obligan al modelo en vivo a delegar.
La configuración de Responses requiere un model para el backend al momento de la creación. Admite definiciones de function y entradas de web_search en tools. También ofrece max_output_tokens (al menos 16 si se establece), service_tier y las opciones de reasoning y text compatibles con el modelo de backend seleccionado. Consulta Reducir la latencia del backend para conocer las opciones que puedes ajustar.
Si el Modo rápido está disponible para tu modelo y proyecto, considera usarlo para llamadas sensibles a la latencia. En GPT-Live, selecciónalo con delegation.responses.service_tier: "priority".
A medida que cambie la conversación, envía session.update con cambios en session.delegation.responses para actualizar el modelo del backend, las instrucciones, las herramientas disponibles, tool_choice u otras opciones compatibles sin iniciar una nueva sesión de Live. Las opciones omitidas conservan sus valores. Establecer delegation en null selecciona el modo de cliente y no permite restablecer una sesión de Responses en ejecución; cambiar de modo falla con immutable_field_update.
Estas opciones usan conceptos conocidos de Responses, pero Live admite solo un subconjunto de la API Responses independiente. Live proporciona el contexto de la conversación e inicia el trabajo delegado. Configura el backend a través de la sesión; el comando response.create de Live usa esa configuración y no acepta el cuerpo de una solicitud independiente de Responses.
Dirigir la conversación en vivo desde tu aplicación
La delegación a Responses gestiona el flujo de trabajo del backend, pero tu aplicación puede seguir enviando contexto directamente al modelo GPT-Live. Si supervisas la llamada mediante un WebSocket de canal auxiliar o la conexión principal de eventos, puedes usar session.instructions.append, session.thinking.append o session.commentary.append con delegation_id: null. Por ejemplo, una medida de protección basada en la transcripción puede agregar una instrucción para redirigir la conversación. Esto orienta al modelo en vivo; no cambia el prompt del backend de Responses ni cancela el trabajo que ya está en curso.
Gestionar la delegación a Responses
Para el trabajo que usa Responses como backend, session.delegation.created contiene target: "responses" y un response_id. Los eventos posteriores de Responses llegan dentro de una envoltura response.event:
{
"type": "response.event",
"event_id": "event_response_1",
"delegation_id": "item_9tA2cB6n2V8c4X1z7Q5r9",
"event": {
"type": "response.output_text.delta",
"sequence_number": 4,
"item_id": "msg_123",
"output_index": 0,
"content_index": 0,
"delta": "The forecast is",
"logprobs": []
}
}Dirige cada evento al controlador correspondiente según envelope.event.type y conserva el delegation_id externo. No trates todos los valores response.* de nivel superior como eventos de Responses sin envoltura. Admite eventos anidados adicionales del ciclo de vida de Responses.
El habla en vivo y el trabajo delegado continúan de forma independiente. Una respuesta completada del backend no significa por sí sola que el usuario haya escuchado la respuesta. Usa la transcripción y el audio de salida de Live para la parte hablada de la interacción.
Completar una llamada a una función que el cliente puede ejecutar
Lee las llamadas a funciones completadas en los eventos anidados response.output_item.done. El elemento de función finalizado contiene call_id, name y arguments; un evento de finalización de argumentos por sí solo no basta para identificar la llamada.
Registra el ID de respuesta del evento anidado response.created junto con el delegation_id externo y recopila las llamadas a funciones de esa respuesta a partir de response.output_item.done. Las instantáneas reenviadas del ciclo de vida contienen deliberadamente response.output: [], incluso en response.completed; su arreglo tools está vacío, instructions es null y se omite input. Una lista de salida vacía al finalizar no significa que no haya llamadas a funciones pendientes. Usa las llamadas recopiladas para determinar qué resultados deben enviarse antes de continuar.
Después de ejecutar la operación autorizada, agrega el resultado como un elemento de Responses:
export function sendUpdate(connection) {
connection.send({
type: "response.item.create",
event_id: "tool_result_1",
item: {
type: "function_call_output",
call_id: "call_123",
output: '{"status":"confirmed","order_id":"order_123"}',
},
});
}Luego, continúa la respuesta de forma explícita:
export function sendUpdate(connection) {
connection.send({
type: "response.create",
event_id: "continue_1",
});
}Envía todos los resultados requeridos para las llamadas a herramientas pendientes antes de continuar. Agregar el resultado de una función no continúa la respuesta automáticamente. response.item.create no tiene una confirmación de éxito independiente; sigue procesando los errores y los eventos anidados posteriores del ciclo de vida de la respuesta.
response.create es un comando de Live para crear o continuar trabajo delegado a Responses mediante el backend configurado en la sesión. No adjuntes a este evento un cuerpo de creación de la API Responses, una anulación del modelo del backend ni delegation_id. Ambos comandos requieren delegación a Responses.
Configurar la delegación al cliente
Establece delegation al crear tu sesión de Live:
export const session = {
model: "gpt-live-1",
delegation: {
type: "client",
},
};Esto selecciona la delegación al cliente para la sesión. Configura el backend por separado: tu aplicación elige su modelo o servicio, sus instrucciones, sus herramientas y cómo dirigir el trabajo. Si usas la API Responses para ese backend, establece su modelo y sus herramientas en tus propias solicitudes a Responses. La sesión de Live no configura ni ejecuta esas herramientas del backend.
Cuando GPT-Live solicita ayuda, tu aplicación construye la solicitud al backend a partir del contexto de la conversación y de la aplicación, ejecuta el trabajo y decide qué resultados devolver. Aplica los permisos y exige las confirmaciones requeridas antes de ejecutar tus herramientas. Conserva el historial completo de la conversación en tu aplicación para poder proporcionar el contexto pertinente en cada solicitud al backend.
Conservar el contexto de la conversación en tu aplicación
Para la delegación al cliente, recopila las transcripciones y mantén tú mismo el estado actual de la tarea.
Escucha los eventos session.input_transcript.delta y session.output_transcript.delta. Estos eventos contienen el texto de la transcripción en delta, junto con las marcas de tiempo start_ms y end_ms. Conserva suficiente historial para entender respuestas breves como “sí”, correcciones como “jueves, no viernes” y detalles proporcionados antes. Un fragmento de transcripción no es un turno completo del usuario, y las transcripciones pueden contener errores.
El evento independiente session.delegation.created contiene una marca de tiempo offset_ms y metadatos de delegación, incluidos delegation.id y delegation.target. No contiene lo que dijo el usuario ni el texto de la tarea. Usa los eventos de transcripción y el estado de la aplicación para determinar qué quiere el usuario. Guarda delegation.id para poder asociar las actualizaciones con esa solicitud.
Conserva los registros extensos y la salida completa de las herramientas en el backend. Si creas una sesión de reemplazo, restaura el contexto pertinente desde tu aplicación y verifica qué acciones ya se ejecutaron antes de repetir cualquier trabajo.
Recibir una delegación al cliente
session.delegation.created identifica una delegación:
{
"type": "session.delegation.created",
"event_id": "event_delegation",
"offset_ms": 1000,
"delegation": {
"id": "item_9tA2bF3h7K9m2P5q8R1s4",
"type": "delegation",
"target": "client"
}
}Lee event.delegation.id. El objeto de delegación contiene metadatos, no el texto de la tarea. Mantén la transcripción y el contexto de la aplicación que necesita tu propio controlador de trabajo delegado. Los ID actuales tienen el prefijo item_, como se muestra aquí; trata el ID completo como un valor opaco y devuélvelo sin cambios, en lugar de construirlo o analizar su estructura.
Devuelve un resultado con ese ID:
export function sendUpdate(connection) {
connection.send({
type: "session.commentary.append",
event_id: "result_123",
delegation_id: "item_9tA2bF3h7K9m2P5q8R1s4",
content: "The order shipped today and should arrive tomorrow.",
});
}Usa session.thinking.append para agregar información al razonamiento interno del modelo sin que la diga en voz alta al incorporarla. Usa session.commentary.append para un resultado que el modelo deba decir en voz alta; el modelo está entrenado para parafrasear el texto agregado. Todas las operaciones de adición contienen una cadena simple y requieren delegation_id, incluso cuando su valor es null. Un ID no nulo debe identificar una delegación al cliente conocida.
Agregar resultados de forma sucesiva permite continuar la misma delegación al cliente. El acuse de recibo de la adición llega después del momento estimado de incorporación del contexto; no demuestra que el modelo haya procesado o dicho el resultado, ni que una acción externa se haya completado correctamente.
Partir del prompt actual de tu backend
Usa el prompt actual de tu agente de texto como punto de partida. Mantén sus instrucciones de tarea y reglas de negocio en el backend, y adapta las instrucciones que presuponen un chat de texto o el control directo del habla. Explica cómo manejar las transcripciones de voz y devolver resultados útiles. Haz cumplir los permisos y las confirmaciones requeridas en tu aplicación.
## Voice conversation context
You are helping an assistant in a live voice conversation. Transcripts
can contain mistakes, unfinished phrases, and later corrections. Use
the latest context and verified records. If a needed detail is still
unclear, ask for that detail instead of guessing.
## Task instructions
[Your task instructions, business rules, available tools,
and confirmation requirements.]
## Return the result
Return the relevant facts, whether the task is complete, and what comes next.
Use confirmed values. Do not invent a successful action.Mantén en el backend las cargas de datos estructurados de gran tamaño, los resultados extensos de las herramientas y el Markdown destinado a mostrarse en pantalla. Proporciona a GPT-Live los datos relevantes y deja que elija cómo expresarlos. Un resultado conciso de una herramienta no necesita una llamada adicional al modelo para adaptarlo al habla.
Con la delegación al cliente, devuelve el resultado directamente a GPT-Live. Con la delegación a Responses, sigue el flujo de resultados de funciones para continuar el trabajo del backend.
Los siguientes ejemplos de eventos del SDK usan connection, una conexión WebSocket principal de Live o una conexión auxiliar ya establecida según las guías de conexión. Llama a la función auxiliar después de session.started en una conexión principal; una conexión auxiliar adjunta ya pertenece a una sesión en ejecución.
Enviar el tipo de actualización adecuado
Elige un evento según cómo deba usar GPT-Live el contenido:
| Qué quieres enviar | Evento |
|---|---|
| Instrucciones de nivel de sistema para el modelo en vivo, como un saludo, un aviso informativo o una indicación para que deje de hablar | session.instructions.append |
| Información para el razonamiento interno que no se dice en voz alta al agregarla, pero puede usarse para responder preguntas pertinentes del usuario | session.thinking.append |
| Información que el modelo debe decir en voz alta, parafraseando el texto agregado | session.commentary.append |
Los tres usan content como cadena simple, con un límite de 500 tokens por adición. Incluye delegation_id: usa el ID original de la delegación al cliente para una actualización sobre esa tarea, o null para el contexto general de la sesión. Un ID no nulo debe identificar una delegación al cliente conocida. Las instrucciones siguen aplicándose a la sesión en vivo; un ID no las convierte en un prompt independiente para el backend.
Una instrucción agregada puede interrumpir el habla o el comportamiento actual del modelo. Úsala cuando la aplicación necesite redirigir la conversación; aplica cualquier bloqueo relacionado de herramientas o acciones en el estado de la aplicación.
Para informar del progreso sin hablar durante una tarea gestionada por el cliente:
export function sendUpdate(connection) {
connection.send({
type: "session.thinking.append",
event_id: "availability_progress",
delegation_id: "item_123",
content: "Checking Thursday availability. No appointment has been booked.",
});
}Para una reserva confirmada, envía el resultado que el usuario debe escuchar:
export function sendUpdate(connection) {
connection.send({
type: "session.commentary.append",
event_id: "appointment_result",
delegation_id: "item_123",
content: "Your appointment is confirmed for Thursday at 2:00 PM",
});
}Envía ese resultado solo después de que la reserva se haya realizado correctamente. Para una instrucción que se aplique a toda la sesión, usa session.instructions.append con delegation_id: null.
Por ejemplo, después de que tu aplicación bloquee una solicitud mediante sus medidas de protección, puedes redirigir la conversación:
export function sendUpdate(connection) {
connection.send({
type: "session.instructions.append",
event_id: "guardrail_block_17",
delegation_id: null,
content:
"Stop speaking about that request. Briefly explain that you cannot help with it, then wait for the user.",
});
}La instrucción no cancela el trabajo del backend. Bloquea la acción afectada y gestiona cualquier trabajo que ya esté en ejecución en tu aplicación.
Los acuses de recibo correspondientes son session.thinking.appended, session.commentary.appended y session.instructions.appended. Asocia su client_event_id con el event_id que enviaste. El acuse de recibo espera hasta el momento estimado de incorporación del contexto, no hasta que termine el habla o la reproducción. Consulta cuándo llega el contexto al modelo para obtener información sobre los tiempos y el manejo de errores.
El contexto que no se dice en voz alta puede influir en lo que el modelo diga después. No es un espacio privado para secretos ni razonamiento oculto. Envía datos útiles y resúmenes breves del progreso.
Mantener las actualizaciones precisas y útiles
Durante las tareas más largas, envía una actualización cuando haya un cambio relevante: se complete un paso, una demora sea significativa o el usuario deba responder una pregunta.
Usa session.thinking.append para informar del progreso en segundo plano en el modo de cliente. Usa session.commentary.append cuando sea útil decir la actualización en voz alta.
Para las actualizaciones habladas, envía session.commentary.append con contenido que coincida con el estado verificado de la tarea:
| Estado | Contenido de ejemplo |
|---|---|
| En curso | “I'm checking the available appointments.” |
| Completada | “You're booked for Thursday at 2:00 PM.” |
| Fallida | “That time is no longer available.” |
| Cancelación confirmada | “Your appointment has been canceled.” |
Una interrupción hablada no cancela automáticamente el trabajo del backend. Si el usuario cambia el viernes por el jueves, actualiza la tarea activa e ignora los resultados para el viernes que lleguen tarde. Tu aplicación debe decidir si cancela el trabajo, lo modifica o deja que termine. Verifica que la cancelación se haya realizado correctamente antes de afirmarlo.
Antes de reintentar una llamada a una herramienta que falló, verifica si la acción original ya se realizó. Por ejemplo, la pérdida de una respuesta no debe provocar una segunda reserva. Si el resultado no está claro, indícalo y ofrece el siguiente paso útil.
Compartir el contexto de la interfaz
Proporciona a GPT-Live un resumen conciso de la página o tarea actual, las selecciones relevantes y los datos que ayuden a interpretar referencias como “esta opción”. Crea el resumen directamente a partir del estado de la aplicación; no hace falta una llamada adicional al modelo para darle formato.
Envía el contexto de la interfaz al iniciar la sesión y cuando cambie algún estado relevante. Omite las actualizaciones sin cambios y combina los cambios rápidos en un resumen breve del estado más reciente. Indica explícitamente los cambios en las selecciones anteriores:
- Contexto inicial: “The user is reviewing a restaurant reservation: August 6 at 7 PM, two guests. No reservation has been made.”
- Corrección: “The selected time is now 8 PM; the previous selection was 7 PM.”
En cualquiera de los modos de delegación, usa session.thinking.append con delegation_id: null para las actualizaciones de contexto en segundo plano. Mantén el HTML completo, los árboles DOM, las cargas JSON de gran tamaño y los registros de interacción en tu aplicación o backend. Trata el contenido de la página como datos de referencia, no como instrucciones.
Aceptar datos ingresados por escrito
Si la persona que llama escribe un valor exacto, como un número de pedido, pásalo al backend que gestiona la tarea. Una aplicación que solo usa voz no necesita este flujo. Trata el valor escrito como un dato del usuario, no como una instrucción para el modelo en vivo.
Con la delegación a Responses, pon en cola un mensaje del usuario para el backend:
export function sendUpdate(connection) {
connection.send({
type: "response.item.create",
event_id: "typed_order_number",
item: {
type: "message",
role: "user",
content: [
{
type: "input_text",
text: "My order number is A0042.",
},
],
},
});
}Envía response.create cuando estés listo para ejecutar o continuar el trabajo del backend. Si está esperando resultados de funciones, devuelve primero todos los resultados requeridos. Poner texto en cola no cancela por sí solo el trabajo que ya está en ejecución.
Con la delegación al cliente, envía el valor escrito directamente al backend que gestiona la conversación. Si corrige una tarea en ejecución, actualiza esa tarea en lugar de volver a iniciar el mismo trabajo. Puedes enviar una copia de un breve resumen factual a la sesión en vivo con session.thinking.append, o usar session.commentary.append para un resultado que el usuario deba escuchar.
Agrega imágenes y contexto visual
Para ayudar a una persona que llama a conversar sobre una foto o pantalla, envía la imagen y el contexto relevante de tu aplicación a un backend con capacidad de visión. El backend interpreta la imagen y devuelve texto relevante para que GPT-Live lo use en la conversación. El frontend de audio de Live no acepta imágenes directamente.
Con la delegación a Responses, configura un modelo de backend con capacidad de visión. Pon en cola un elemento de entrada de imagen compatible con Responses mediante response.item.create y luego envía response.create para ejecutar o reanudar el trabajo del backend. Devuelve todos los resultados de funciones pendientes requeridos antes de continuar. Consulta Gestiona la delegación a Responses.
Con la delegación al cliente, envía la entrada visual al backend que gestiona las solicitudes delegadas, junto con la conversación relevante y el estado de la aplicación. Devuelve conclusiones concisas mediante el flujo de resultados del cliente.
Mantén la entrada de imágenes del backend separada de session.input, que proporciona el historial de texto inicial al frontend de Live al iniciarse. Consulta Imágenes y visión para conocer los formatos de imagen compatibles y las limitaciones del modelo.
Reduce la latencia del backend
Reduce el tiempo entre una solicitud de trabajo al backend y un resultado útil para la conversación. Mide la latencia en cada etapa para localizar las demoras. Compara el tiempo hasta obtener una respuesta hablada útil y el éxito de las tareas en los mismos escenarios, y consulta el Cookbook de evaluación de agentes de voz para obtener orientación sobre la evaluación.
Delegación a Responses
Live gestiona conexiones WebSocket persistentes con Responses, prepara de antemano la conexión y la configuración conocida de la solicitud, y reutiliza el estado de respuestas anteriores cuando está disponible. No necesitas implementar esos pasos para el backend alojado. La reutilización depende de la conexión activa y de que el estado sea compatible; no garantiza un acierto de caché ni una latencia específica.
Ajusta el backend mediante delegation.responses:
model: elige el modelo que se encarga del razonamiento y la selección de herramientas de forma independiente del modelo de voz.reasoning.effort: equilibra el tiempo de razonamiento y la calidad de la tarea con valores compatibles con ese modelo.service_tier: usaauto,default,flexopriority, según la compatibilidad del modelo y el acceso del proyecto.autosigue la configuración del proyecto. Evalúa el rendimiento y el costo del nivel que elijas.
Actualiza los ajustes compatibles durante la sesión con session.update. Tus herramientas personalizadas siguen ejecutándose en tu aplicación, por lo que las llamadas lentas a servicios, las colas y el almacenamiento en búfer de los resultados de herramientas pueden retrasar la respuesta incluso cuando Live gestiona la conexión con Responses. Devuelve cada resultado de herramienta requerido sin demora y continúa la respuesta del backend.
Delegación al cliente
Tu aplicación se encarga de todo el flujo, desde la recepción de la delegación hasta la devolución de un resultado. Prepara ese flujo mientras la sesión de voz está activa:
- Reutiliza las conexiones del backend. Mantén activos el cliente de la API y su grupo de conexiones entre delegaciones. Para llamadas repetidas a Responses, considera usar una conexión WebSocket de Responses persistente.
- Prepara la configuración conocida. Inicializa las instrucciones, las herramientas y las conexiones antes de que la primera solicitud las necesite. El modo WebSocket de Responses también permite preparar el estado conocido de la solicitud antes de la generación; sigue sus indicaciones de configuración.
- Transmite resultados útiles de forma incremental. Devuelve fragmentos coherentes y verificados con
session.commentary.append. Usasession.thinking.appendpara informar del progreso sin hablar en voz alta. Conserva el ID de delegación al cliente y respeta el límite de 500 tokens por adición. Mantén el razonamiento privado en el backend y confirma las acciones antes de anunciar que se completaron correctamente. - Mantén estable la entrada reutilizable. Conserva las instrucciones, las definiciones de herramientas y su orden, y los prefijos del historial que no hayan cambiado. Agrega la información nueva después del contenido reutilizable cuando tu backend admita el almacenamiento en caché y la continuación.
- Evita el almacenamiento innecesario en búfer. Envía un resultado útil en cuanto esté listo. Almacena en búfer solo lo suficiente para clasificar la salida y formar un fragmento coherente. Da preferencia a los metadatos estructurados de fase; si usas prefijos de texto para distinguir el progreso de los resultados, espera a tener el prefijo completo antes de enviar el texto.
Mide el tiempo hasta la primera respuesta hablada útil al comparar este flujo con la delegación a Responses.
Reacciona a los fragmentos de transcripción
Procesar fragmentos de transcripción en tu aplicación es opcional y funciona con cualquiera de los dos modos de delegación. Los fragmentos de transcripción del usuario y del asistente llegan a través de WebSocket o del canal de datos de WebRTC. Puedes procesarlos con la lógica de la aplicación o con un modelo ligero para iniciar el trabajo antes de que llegue un evento de delegación, o usar la propia transcripción para activar trabajo gestionado por la aplicación.
Usa este patrón para:
- Reducir la espera. Inicia una consulta especulativa cuando haya suficiente información disponible; por ejemplo, consulta la disponibilidad mientras el usuario sigue describiendo sus preferencias.
- Aplicar medidas de protección. Revisa la transcripción a medida que crece para detectar solicitudes o respuestas que requieran intervención. Consulta Aplica medidas de protección a la conversación.
- Adaptar la conversación. Busca expresiones que sugieran confusión o frustración y luego ajusta la experiencia o envía una instrucción específica.
- Actualizar la interfaz. Resalta los controles relevantes, completa los campos sugeridos o muestra los resultados a medida que estén disponibles.
En las aplicaciones de navegador, usa el canal de datos de WebRTC para los subtítulos y las actualizaciones locales de la interfaz. Cuando el procesamiento de transcripciones se ejecute en tu servidor, ya sea para aplicar medidas de protección, realizar comprobaciones con modelos ligeros o hacer llamadas especulativas a herramientas, usa una conexión WebSocket de canal lateral para recibir eventos y dirigir la misma sesión de GPT-Live directamente.
Procesa el texto acumulado cuando llegue información nueva relevante. Un fragmento puede estar incompleto, y lo que se diga después puede cambiar la solicitud. Descarta los resultados desactualizados, coordina el trabajo con las tareas delegadas posteriores para evitar acciones duplicadas y aplica tus comprobaciones habituales de permisos y confirmaciones antes de realizar acciones con consecuencias.
Para incorporar información de vuelta a la conversación:
| Intención | Evento |
|---|---|
| Cambiar el comportamiento del modelo en vivo o redirigir la conversación | session.instructions.append |
| Proporcionar contexto para respuestas posteriores sin que se diga en voz alta | session.thinking.append |
| Proporcionar información que el modelo deba decir en voz alta | session.commentary.append |
Para las actualizaciones ajenas a una delegación al cliente, usa delegation_id: null. Estas adiciones dirigen el modelo en vivo; tu aplicación controla los cambios de la interfaz, la ejecución de herramientas y la cancelación. Consulta Envía el tipo de actualización adecuado para ver ejemplos de adiciones.
Optimizaciones compartidas
Ambos modos de delegación se benefician de las mismas mejoras del backend:
- Elige el modelo y el esfuerzo de razonamiento adecuados para la tarea. Compara configuraciones que cumplan tus requisitos de precisión. Usa un esfuerzo de razonamiento menor cuando permita completar la tarea de forma confiable.
- Mantén las respuestas concisas. Devuelve los hechos y el estado que GPT-Live necesita para continuar la conversación. Evita las explicaciones largas y las llamadas adicionales al modelo destinadas únicamente a reformular los resultados para expresarlos de forma hablada.
- Reduce las demoras de las herramientas y las llamadas innecesarias. Inicia el trabajo autorizado cuando sus entradas estén listas, reutiliza los resultados mientras sigan siendo válidos y evita repetir una consulta ya completada.
- Ejecuta el trabajo independiente de forma concurrente. Las llamadas de consulta independientes pueden ejecutarse al mismo tiempo. Respeta las dependencias y las confirmaciones requeridas para las acciones.
parallel_tool_callspermite que un modelo solicite varias llamadas; tu aplicación sigue siendo responsable de programar y ejecutar sus funciones personalizadas.
Consulta Optimización de la latencia para obtener orientación general sobre Responses y Almacenamiento de prompts en caché para reutilizar entradas estables.
Verifica la interacción completa
Prueba tanto el estado de la aplicación que sirve como fuente de verdad como el audio que reprodujo el cliente. Una respuesta del backend puede completarse mientras se interrumpe el resultado hablado, y un acuse de recibo del contexto confirma su aceptación, no su reproducción. Mantén los ID de operación y las revisiones de tareas separados de los ID de delegación para que las reconexiones, los reintentos y los resultados tardíos no repitan ni reviertan una acción.
Usa Evaluación de agentes de voz para realizar pruebas repetibles. Si tienes un ciclo de herramientas de Realtime o un backend encadenado existente, sigue Migrar a GPT-Live.