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

Lista de verificación del despliegue de la API

Guía centrada en decisiones de diseño de gran valor que suelen aprovecharse poco y que pueden marcar una diferencia real en la calidad, la velocidad, el costo y la confiabilidad del despliegue.

Usa la API Responses

Empieza siempre con la API Responses. Es la API insignia de OpenAI y la mejor opción para acceder a los comportamientos más recientes de los modelos, las herramientas integradas, los flujos de trabajo con estado y las funciones para agentes.

Elige un modelo GPT-5.6

Elige un modelo GPT-5.6 adecuado para la carga de trabajo en lugar de dirigir todas las solicitudes al nivel de mayor capacidad. Usa gpt-5.6 o gpt-5.6-sol para obtener las capacidades de un modelo insignia, gpt-5.6-terra para obtener un buen rendimiento a un precio menor y gpt-5.6-luna para procesar con eficiencia cargas de trabajo de gran volumen.

Al migrar, conserva la función del modelo actual en la carga de trabajo y su esfuerzo de razonamiento efectivo para la primera comparación. Ejecuta evaluaciones representativas antes de cambiar los prompts o agregar nuevas capacidades. Compara el éxito de las tareas, la latencia, los tokens de entrada, de salida, de razonamiento y de escritura en caché, y el costo por tarea completada con éxito.

Configura reasoning.effort

Usa reasoning.effort para decidir cuánto debe razonar el modelo antes de responder.

Para los modelos GPT-5.6, los valores admitidos son none, low, medium, high, xhigh y max. El valor predeterminado es medium. Un esfuerzo menor es más rápido y usa menos tokens de razonamiento. Un esfuerzo mayor le da al modelo más tiempo para planificar, depurar, sintetizar y evaluar ventajas y desventajas en varios pasos.

Usa low cuando la tarea consista principalmente en extracción, enrutamiento, clasificación o una reescritura rutinaria. Usa medium o high cuando el modelo necesite diagnosticar un problema, comparar opciones, elaborar un plan o razonar sobre código. Usa xhigh o max solo cuando las evaluaciones representativas demuestren que la mejora de calidad justifica la latencia y el costo adicionales. Al migrar desde GPT-5.5 o GPT-5.4, empieza con el esfuerzo actual y compara ese ajuste con uno de un nivel inferior. GPT-5.6 a menudo puede mantener o mejorar la calidad con menos tokens de razonamiento, por lo que el ajuste inferior también puede reducir la latencia y el costo.

Para las cargas de trabajo más difíciles que priorizan la calidad, compara también reasoning.mode: "pro" con el modo estándar al mismo nivel de esfuerzo. El modo y el esfuerzo de razonamiento son independientes. El modo Pro puede mejorar la confiabilidad al hacer que el modelo trabaje más antes de devolver una única respuesta final, pero aumenta la latencia y el uso de tokens.

Ajusta el esfuerzo de razonamiento según la tarea
from openai import OpenAI

client = OpenAI()

prompt = """
Our CI job started failing after a dependency bump.

Error:
TypeError: Timeout.__init__() got an unexpected keyword argument 'connect'

Identify the likeliest root cause and the smallest safe fix.
"""

response = client.responses.create(
    model="gpt-6-astra",
    reasoning={"effort": "xhigh", "mode": "pro"},
    input=prompt,
)

print(response.output_text)

Configura text.verbosity

text.verbosity es el principal control para equilibrar la brevedad y la exhaustividad. Usa un nivel de detalle menor cuando el producto necesite una respuesta rápida y compacta, y uno mayor cuando la respuesta requiera una explicación más amplia, una estructura más clara o todo el contexto. Un nivel de detalle menor implica menos tokens de salida, por lo que el modelo genera menos texto y devuelve el resultado más rápido.

Para programar, medium y high suelen producir resultados más extensos y organizados, con una estructura más clara. low mantiene la respuesta más concisa y reducida a lo esencial.

GPT-5.6 suele ser más conciso de forma predeterminada que GPT-5.5. Al migrar, verifica si las instrucciones generales como “Sé conciso” siguen siendo útiles. En algunos casos, pueden hacer que las respuestas sean demasiado breves. Consérvalas solo si siguen siendo útiles y prioriza el uso de text.verbosity para controlar el nivel de detalle predeterminado; luego usa el prompt para especificar el contenido requerido, la estructura y una extensión más concreta, si corresponde.

Configura un nivel de detalle menor para obtener resultados compactos
from openai import OpenAI

client = OpenAI()

response = client.responses.create(
    model="gpt-6-astra",
    text={"verbosity": "low"},
    input="""
    Summarize this incident for the next on-call engineer.
    - checkout latency spiked from 220 ms to 4.8 s
    - only us-east-1 was affected
    - rollback is complete
    - likely trigger: cache stampede after deploy
    """,
)

print(response.output_text)

Configura el parámetro phase del asistente

phase es una etiqueta de los mensajes del asistente en el historial de la conversación. Le indica al modelo si un mensaje anterior del asistente era un comentario intermedio sobre el trabajo en curso o la respuesta final. Usa phase: "commentary" para las actualizaciones de progreso, las notas previas a las llamadas a herramientas y otros mensajes intermedios. Usa phase: "final_answer" para la respuesta terminada.

El asistente podría decir algo como:

Mensaje de comentario del asistente
{
  "role": "assistant",
  "phase": "commentary",
  "content": "I'm checking the logs and comparing them to the last successful deploy."
}

Esa no es la respuesta. Es una nota de progreso. Más adelante, el asistente podría decir:

Mensaje de respuesta final del asistente
{
  "role": "assistant",
  "phase": "final_answer",
  "content": "The deploy failed because the migration referenced a column that does not exist in production."
}

Esto es útil en flujos de trabajo de larga duración o con uso intensivo de herramientas, donde el asistente puede mostrar actualizaciones de progreso antes de terminar. Cuando vuelvas a enviar ese historial en solicitudes de seguimiento a gpt-5.3-codex y modelos posteriores, conserva y reenvía phase en los mensajes del asistente para que el modelo pueda distinguir las actualizaciones de progreso del resultado final. Esto ayuda a reducir las interrupciones prematuras y aumenta la probabilidad de que el agente continúe hasta llegar a la respuesta final.

En lugar de cargar el catálogo completo de herramientas en cada solicitud, usa la búsqueda de herramientas: agrega {"type": "tool_search"} y marca las definiciones de herramientas costosas con defer_loading: true. Así, el modelo puede cargar el subconjunto que necesita en tiempo de ejecución. Al inicio de la solicitud, el modelo solo ve el nombre y la descripción de la herramienta de búsqueda. Si decide que necesita una herramienta de carga diferida, ejecuta la búsqueda de herramientas y, solo entonces, se cargan las definiciones de esas herramientas en el contexto. Solo a partir de ese momento el modelo las llama. Esto ahorra tokens y mantiene el rendimiento de la caché.

La búsqueda de herramientas tiene dos modos:

  • La búsqueda de herramientas alojada es la opción más sencilla. Úsala cuando ya sepas qué herramientas podrían estar disponibles para la solicitud.
  • La búsqueda de herramientas ejecutada por el cliente sirve para los casos en que tu aplicación debe decidir qué herramientas están disponibles, por ejemplo, según el tenant, el proyecto, los permisos o el registro interno del usuario.

Empieza con la búsqueda de herramientas alojada a menos que tu aplicación realmente necesite controlar por sí misma la detección de herramientas.

Agrupa tus herramientas según la intención del usuario. Usa espacios de nombres o servidores MCP cuando puedas. Al modelo le resulta más fácil elegir entre unos pocos grupos claros que entre una larga lista de funciones sin agrupar. Recomendamos mantener cada espacio de nombres por debajo de unas 10 funciones para optimizar el uso de tokens y el rendimiento del modelo.

Mantén las descripciones de los espacios de nombres breves y fáciles de distinguir entre sí. Coloca las instrucciones detalladas en las definiciones de las herramientas de carga diferida. Evita crear un único espacio de nombres enorme para todo.

Usa la búsqueda de herramientas alojada con herramientas de carga diferida
from openai import OpenAI

client = OpenAI()

billing_namespace = {
    "type": "namespace",
    "name": "billing",
    "description": "Billing tools for invoices, payments, taxes, and credits.",
    "tools": [
        {
            "type": "function",
            "name": "lookup_invoice",
            "description": "Look up invoice state, taxes, credits, and payment attempts.",
            "parameters": {
                "type": "object",
                "properties": {
                    "invoice_id": {"type": "string"},
                },
                "required": ["invoice_id"],
                "additionalProperties": False,
            },
            "strict": True,
            "defer_loading": True,
        }
    ],
}

crm_namespace = {
    "type": "namespace",
    "name": "crm",
    "description": "CRM tools for account ownership, plans, health, and payment history.",
    "tools": [
        {
            "type": "function",
            "name": "get_account",
            "description": "Fetch account owner, plan, health, and payment history.",
            "parameters": {
                "type": "object",
                "properties": {
                    "account_id": {"type": "string"},
                },
                "required": ["account_id"],
                "additionalProperties": False,
            },
            "strict": True,
            "defer_loading": True,
        }
    ],
}

response = client.responses.create(
    model="gpt-6-astra",
    input=(
        "Find the right billing tool and explain why invoice INV-1043 still "
        "shows overdue after a payment yesterday."
    ),
    tools=[billing_namespace, crm_namespace, {"type": "tool_search"}],
)

print(response.output)

Usa la llamada programática a herramientas

La llamada programática a herramientas permite que GPT-5.6 escriba JavaScript que llame a herramientas compatibles y reduzca sus resultados intermedios dentro de un entorno de ejecución alojado. Úsala en etapas acotadas en las que el código pueda filtrar, unir, ordenar, eliminar duplicados, combinar o verificar resultados extensos de herramientas antes de devolver al modelo un resultado estructurado más pequeño.

Agrega la herramienta programmatic_tool_calling y habilita cada herramienta compatible. Usa allowed_callers: ["programmatic"] para las herramientas que solo pueden llamarse desde programas, o usa allowed_callers: ["direct", "programmatic"] cuando el modelo también pueda llamar a la herramienta directamente. Mantén las llamadas directas cuando cada resultado pueda cambiar la siguiente decisión del modelo, una acción requiera aprobación o la respuesta final deba conservar citas o artefactos nativos. Documenta los campos que devuelven las herramientas y su comportamiento ante errores para que el modelo pueda escribir un programa correcto sin tener que inspeccionar primero un resultado.

Tu bucle de herramientas debe manejar los elementos program y program_output, así como los elementos function_call emitidos por el programa y sus elementos function_call_output. Conserva cada call_id y copia el valor de caller de la llamada a función en su salida para que el servicio pueda reanudar el programa correcto.

Prueba tanto program_output como el mensaje final del asistente. Un resultado correcto del programa puede aun así dar lugar a una respuesta final incompleta. Compara el éxito de la tarea, la evidencia requerida, el total de tokens, la latencia y el costo con los del mismo flujo de trabajo usando llamadas directas a herramientas.

Usa Multiagente para trabajar en paralelo

Multiagente es una función de GPT-5.6 que permite que un agente raíz delegue líneas de trabajo independientes a subagentes y sintetice sus resultados. Úsala cuando puedas dividir la investigación, el análisis o la implementación en tareas concretas y acotadas que usen contextos separados y se ejecuten en paralelo.

Establece multi_agent.enabled en true en la solicitud. Para HTTP, usa el SDK beta de Responses con client.beta.responses y pasa responses_multi_agent=v1 en betas. Para conexiones HTTP directas o WebSocket, envía OpenAI-Beta: responses_multi_agent=v1. Los esquemas de los elementos pueden cambiar mientras Multiagente esté en versión beta.

Prefiere un solo agente para tareas cortas, secuencias ordenadas en las que cada paso depende del anterior o trabajos que escriben en el mismo recurso mutable. Los subagentes pueden aumentar el uso de tokens, así que empieza con el valor predeterminado de max_concurrent_subagents, que es 3, y mide la calidad, la latencia y el costo de principio a fin. Para flujos de trabajo de Multiagente de larga duración o con uso intensivo de herramientas, el modo WebSocket puede reducir la sobrecarga de las continuaciones.

Antes de habilitar Multiagente, ten en cuenta sus limitaciones actuales: /responses/compact, reasoning.summary y max_tool_calls no se admiten. El servidor compacta automáticamente el contexto raíz y el contexto de cada subagente.

Aprovecha las herramientas integradas

Las herramientas integradas son capacidades nativas de la API. En lugar de crear cada herramienta por tu cuenta, puedes darle al modelo acceso a herramientas que ya funcionan dentro de la API Responses. Así, el modelo puede decidir cuándo usarlas.

OpenAI sigue agregando herramientas nativas, así que empieza con las herramientas integradas cuando se ajusten a tu flujo de trabajo. Crea herramientas personalizadas cuando las opciones nativas no cubran la tarea. Las herramientas integradas y las opciones relacionadas disponibles actualmente incluyen:

  • Búsqueda web: busca información actualizada en la web
  • Búsqueda de archivos: busca en archivos cargados o almacenes vectoriales
  • Intérprete de código: ejecuta Python para análisis, cálculos matemáticos, gráficos y procesamiento de archivos
  • Shell: ejecuta comandos de shell en un contenedor alojado o en tu propio entorno de ejecución
  • Uso de la computadora: opera una interfaz de usuario mediante capturas de pantalla, clics, escritura y desplazamiento
  • Generación de imágenes: genera o edita imágenes
  • MCP/conectores: conecta el modelo a servicios y herramientas externos
  • Habilidades: adjunta paquetes de instrucciones reutilizables y archivos de flujos de trabajo
  • Aplicar parches: realiza ediciones estructuradas de código

La calidad del modelo es otra razón para preferirlas. Las herramientas integradas forman parte de la distribución de datos de nuestro posentrenamiento, lo que significa que los modelos se entrenan y evalúan con los formatos, comportamientos y salidas de estas herramientas. Con las herramientas integradas, los modelos de OpenAI seleccionan mejor las herramientas, las ejecutan de forma más limpia y presentan menos fallos que con herramientas nuevas.

Aprovecha la compactación

La compactación es una herramienta de ingeniería de contexto: decide qué información conserva el modelo a lo largo de muchos turnos. En los agentes de larga duración, el problema no es solo “¿Alcanzaré el límite de contexto?”. También ocurre que los mensajes antiguos, los registros de herramientas, los reintentos y los detalles desactualizados desplazan el estado que el modelo necesita.

La compactación te permite reducir el tamaño del contexto de forma controlada y conservar el estado necesario para los turnos posteriores. Después de un hito significativo, como terminar una fase de depuración o acotar una causa raíz, puedes compactar la ventana anterior y continuar a partir de la salida compactada. Esto mantiene al modelo enfocado porque el siguiente turno se construye en torno al estado importante, no a cada razonamiento intermedio, comando fallido y línea de razonamiento obsoleta.

Puedes usar la compactación de dos maneras:

  • Deja que el servidor se encargue: si usas previous_response_id, activa context_management con un valor de compact_threshold. El servidor compactará automáticamente la conversación cuando sea demasiado grande. Tú sigues enviando solo el mensaje más reciente del usuario.
  • Hazlo por tu cuenta: si administras todo el arreglo de entrada, llama a client.responses.compact(). Devuelve una ventana de contexto más pequeña. Usa esa salida directamente en la siguiente llamada a responses.create().

No edites la salida compactada. No es un resumen para personas, sino el estado de la máquina que ayuda al modelo a continuar. Pásala tal como está y luego agrega el siguiente mensaje del usuario.

Continúa a partir del estado compactado de la respuesta
from openai import OpenAI

client = OpenAI()

# Full window collected from a long debugging session:
# user messages, assistant outputs, tool calls, and tool outputs.
long_window = session_items

compacted = client.responses.compact(
    model="gpt-6-astra",
    input=long_window,
)

next_response = client.responses.create(
    model="gpt-6-astra",
    store=False,
    input=[
        *compacted.output,  # Use compact output as-is.
        {
            "type": "message",
            "role": "user",
            "content": (
                "We found the bad cache invalidation path. Write the fix plan "
                "and the verification checklist."
            ),
        },
    ],
)

print(next_response.output_text)

Optimiza el almacenamiento de prompts en caché

El almacenamiento de prompts en caché reduce automáticamente la latencia y el costo cuando las solicitudes reutilizan el mismo prefijo largo. Coloca primero las instrucciones, los ejemplos y el material de referencia que no cambian, seguidos del contenido dinámico específico del usuario. Mantén estables las definiciones de herramientas y su orden, y agrega nuevos turnos de conversación sin reescribir el contexto anterior.

GPT-5.6 introdujo el almacenamiento explícito de prompts en caché. El almacenamiento implícito sigue siendo la opción predeterminada, pero los modelos GPT-5.6 y las familias de modelos posteriores también admiten puntos de corte explícitos de caché y una política de caché para toda la solicitud. Si un sufijo que cambia aparece después de un prefijo estable, agrega un prompt_cache_breakpoint explícito al final de la parte reutilizable. Establece prompt_cache_options.mode en explicit solo cuando la solicitud deba usar únicamente los puntos de corte que proporciones y ninguno implícito. Los modelos anteriores siguen usando únicamente el almacenamiento automático de prompts en caché.

En los modelos GPT-5.6 y las familias de modelos posteriores, las escrituras en caché cuestan 1,25× la tarifa de los tokens de entrada sin caché. Registra cached_tokens y cache_write_tokens, y luego compara el volumen de escritura con las lecturas posteriores de caché para medir el costo neto y ajustar la ubicación de los puntos de corte.

Usa un valor estable de prompt_cache_key para las solicitudes que compartan un prefijo reutilizable para ayudar a dirigir las solicitudes relacionadas a la misma caché y optimizar las tasas de aciertos de caché en modelos anteriores a GPT-5.6. Para los grupos con mucho tráfico, sigue las recomendaciones para distribuir el tráfico entre más claves.

En GPT-5.6 y versiones posteriores, prompt_cache_key es opcional: puedes lograr tasas óptimas de aciertos de caché sin usarlo. Puedes usarlo para llevar una contabilidad de caché separada por cliente, usuario o espacio de trabajo. Esto puede facilitar la explicación del uso de tokens en caché y la facturación para cada grupo. Asigna una clave distinta a cada cliente y mantenla estable en todas las solicitudes relacionadas de ese cliente. Las claves separadas también ayudan a evitar sondeos de aciertos de caché entre clientes. Consulta Contabilidad de caché separada mediante claves.

Lleva una contabilidad de caché separada para un cliente
from openai import OpenAI

client = OpenAI()

instructions = """
You are the support agent for Acme.
Follow the Acme support policy and escalation rubric.
Use the same tone, safety rules, and tool plan for each ticket.
"""

response = client.responses.create(
    model="gpt-6-astra",
    prompt_cache_key="tenant-acme-support-agent",
    instructions=instructions,
    input="Summarize the current escalation for the on-call lead.",
)

print(response.output_text)

Usa reasoning.encrypted_content

GPT-5.6 puede conservar el razonamiento entre llamadas. Usa reasoning.context: "all_turns" cuando los objetivos, los supuestos y las prioridades de la tarea se mantengan estables. Usa current_turn cuando el razonamiento anterior ya no sea relevante y pueda aferrar al modelo a un enfoque desactualizado. Si omites reasoning.context o lo estableces en auto, inspecciona el campo reasoning.context de la respuesta para confirmar el modo efectivo.

El razonamiento persistente solo funciona cuando los elementos de razonamiento anteriores están disponibles. Usa previous_response_id para las respuestas almacenadas. Si tus requisitos de retención cero de datos (ZDR) no permiten almacenar datos de respuesta, el contenido de razonamiento cifrado permite transferirlos sin mantener estado.

Los elementos de razonamiento en la salida de la respuesta incluyen contenido de razonamiento cifrado de forma predeterminada. Puedes acceder a ese contenido mediante la propiedad encrypted_content de cada elemento de razonamiento. Tu aplicación no necesita interpretar ese valor. Solo conserva cada elemento de razonamiento exactamente como se devuelve y lo reenvía en el siguiente turno, para que el modelo pueda usarlo y continuar el flujo de trabajo.

Pasa el razonamiento cifrado entre turnos sin estado
from openai import OpenAI

client = OpenAI()

history = [
    {
        "role": "user",
        "content": "Investigate why invoice INV-1043 has mismatched tax totals.",
    }
]

first = client.responses.create(
    model="gpt-6-astra",
    store=False,
    reasoning={"effort": "medium", "context": "current_turn"},
    input=history,
)

history.extend(item.model_dump(exclude={"status"}) for item in first.output)
history.append(
    {
        "role": "user",
        "content": "Now write the customer-facing explanation in plain English.",
    }
)

second = client.responses.create(
    model="gpt-6-astra",
    store=False,
    reasoning={"effort": "medium", "context": "all_turns"},
    input=history,
)

print(second.output_text)

Elige el nivel de detalle de las imágenes de forma deliberada

En los modelos GPT-5.6, omitir detail de la imagen o usar detail: "auto" produce el mismo comportamiento de dimensionamiento que original. El servicio conserva las dimensiones de entrada, excepto cuando las imágenes superan los 65 535 píxeles en cualquiera de sus lados: en ese caso, las reduce para ajustarlas a ese límite. La API rechaza las imágenes que aún superan el límite de 30 000 parches, en lugar de redimensionarlas para ajustarlas. Las imágenes grandes pueden consumir más tokens de entrada y, como resultado, aumentar la latencia.

Elige detail según la tarea. Redimensiona la imagen, usa low cuando los detalles visuales finos no sean importantes o usa high para una comprensión de imágenes estándar de alta fidelidad. Reserva original para tareas con imágenes grandes o con mucha información, sensibles a las coordenadas, de OCR, de localización o de inspección visual en las que el detalle adicional mejore la calidad. Mide el consumo de tokens de imagen y la latencia en el peor de los casos antes del despliegue.

Envía un identificador de seguridad

Si tu aplicación atiende a usuarios finales individuales, envía en cada solicitud un identificador safety_identifier estable que preserve la privacidad. Ayuda a OpenAI a detectar usos indebidos y le ofrece a tu equipo una forma estable de rastrear infracciones de las políticas. También reduce la probabilidad de que el uso indebido por parte de un usuario interrumpa el acceso del resto de tu organización.

Aplica una función hash al nombre de usuario o a la dirección de correo electrónico del usuario en lugar de enviar información que permita identificarlo. Para experiencias sin inicio de sesión, usa un ID de sesión estable.

Usa background=True

Usa background=True para solicitudes que puedan tardar mucho tiempo. En lugar de mantener abierta la conexión del cliente, la API inicia una tarea y devuelve un ID. Tu aplicación puede consultar periódicamente esa tarea hasta que termine, falle o se cancele. Úsalo para análisis de gran escala, ejecuciones prolongadas de herramientas o trabajos que necesiten seguimiento del estado y reintentos.

Ejecuta una respuesta en segundo plano y consulta su estado periódicamente
# Replace the illustrative IDs and URLs below with your own resource values.
from openai import OpenAI
import time

client = OpenAI()
log_bundle_file_id = "file_123"

job = client.responses.create(
    model="gpt-6-astra",
    background=True,
    store=False,
    input="Analyze this large log bundle and cluster the primary failure modes.",
    tools=[
        {
            "type": "code_interpreter",
            "container": {
                "type": "auto",
                "file_ids": [log_bundle_file_id],
            },
        }
    ],
)

while job.status in {"queued", "in_progress"}:
    time.sleep(2)
    job = client.responses.retrieve(job.id)

print(job.output_text)

Puedes combinarlo con stream=True para recibir eventos de progreso, pero el primer evento puede tardar más que en una solicitud normal.

Desde la perspectiva de la interfaz, el modo en segundo plano indica: “Esto está en ejecución; este es el estado; el resultado aparecerá aquí cuando esté listo”.

Usa el modo WebSocket

El modo WebSocket está diseñado para flujos de trabajo de larga duración con muchas llamadas a herramientas, en los que mantienes abierta una conexión persistente y continúas enviando solo los nuevos elementos de entrada junto con previous_response_id. Para ejecuciones con 20 o más llamadas a herramientas, este enfoque es aproximadamente un 40 % más rápido de principio a fin.

Cómo funciona: el primer mensaje se verá como una solicitud normal de Responses: modelo, instrucciones, herramientas y entrada del usuario. El servidor devuelve eventos en streaming. Si el modelo solicita una herramienta, tu aplicación la ejecuta. Luego, en lugar de enviar una nueva solicitud HTTP, envías otro evento response.create por el mismo socket con el previous_response_id anterior y el nuevo elemento. De ahí proviene la reducción de latencia. Con HTTP convencional, cada interacción posterior es una solicitud nueva. En el modo WebSocket, la conexión permanece abierta y el estado de la respuesta más reciente se mantiene listo en la memoria de esa conexión. Cuando el siguiente turno continúa a partir de esa respuesta, el backend necesita menos trabajo de preparación.

Si tu flujo de trabajo consiste en una solicitud y una respuesta, sigue usando HTTP. Si tu flujo de trabajo se comporta como un agente de larga duración, prueba el modo WebSocket.

Una sola conexión WebSocket maneja una respuesta en curso a la vez, por lo que el trabajo en paralelo requiere varias conexiones. Actualmente, las conexiones tienen una duración máxima de 60 minutos. La continuación usa la misma semántica de previous_response_id que el modo HTTP, con una caché local de la conexión para la respuesta más reciente.

Nota: el modo WebSocket funciona con ZDR porque tus datos no se almacenan en disco, sino únicamente en memoria.

El ejemplo de Python usa pip install "openai[realtime]>=3.8.0". El ejemplo de JavaScript usa npm install openai@^7.10.0 ws. El ejemplo de Ruby usa gem install openai async-websocket.

Inicia una sesión WebSocket de la API Responses
from openai import OpenAI

client = OpenAI()

with client.responses.connect() as connection:
    # Use the same typed parameters as client.responses.create(...).
    connection.response.create(
        model="gpt-6-astra",
        store=False,
        input=[
            {
                "type": "message",
                "role": "user",
                "content": [
                    {
                        "type": "input_text",
                        "text": (
                            "Find the flaky test in this run, call the tools "
                            "you need, and keep going until you can explain "
                            "the root cause."
                        ),
                    }
                ],
            }
        ],
        tools=[test_log_tool, code_search_tool],
    )
    first_event = connection.recv()
    print(first_event.type)

Conclusión

La API Responses es la base para crear aplicaciones de OpenAI más inteligentes y con mayores capacidades. Su principal ventaja es que permite a los desarrolladores pasar de prompts puntuales a flujos de trabajo persistentes que usan herramientas, tienen en cuenta el contexto y se adaptan a la complejidad de la tarea. Sigue esta guía para mejorar el rendimiento en despliegues reales.