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
22 sept 2025 API

Por qué creamos la API Responses

Cómo la API Responses permite usar razonamiento persistente, herramientas alojadas y flujos de trabajo multimodales con GPT-5.

Autores: Steve Coffey, Prashant Mital

Por qué creamos la API Responses

Ahora que GPT-5 está disponible, queríamos ofrecer más contexto sobre la mejor manera de integrarlo, la API Responses, y explicar por qué Responses está diseñada a la medida de los modelos de razonamiento y de un futuro con agentes.

Cada generación de API de OpenAI se ha desarrollado en torno a la misma pregunta: ¿cuál es la forma más sencilla y potente de que los desarrolladores se comuniquen con los modelos?

El diseño de nuestras API siempre se ha guiado por el funcionamiento de los propios modelos. El primer punto de acceso, /v1/completions, era sencillo, pero limitado: le dabas un prompt al modelo y este simplemente completaba tu idea. Con técnicas como los prompts con pocos ejemplos, los desarrolladores podían intentar guiar al modelo para que generara JSON o respondiera preguntas, pero esos modelos tenían capacidades mucho más limitadas que los que usamos hoy.

Luego llegaron RLHF, ChatGPT y la era del posentrenamiento. De pronto, los modelos ya no se limitaban a completar los textos que dejabas a medias: respondían como un interlocutor. Para adaptarnos, creamos /v1/chat/completions (en un solo fin de semana, como cuenta la conocida historia). Al ofrecer roles como system, user y assistant, proporcionamos una estructura para crear rápidamente interfaces de chat con instrucciones y contexto personalizados.

Nuestros modelos siguieron mejorando. Pronto comenzaron a ver, oír y hablar. La llamada a funciones, que llegó a finales de 2023, resultó ser una de nuestras funciones más apreciadas. Por esa misma época lanzamos la versión beta de Assistants API: nuestro primer intento de crear una interfaz totalmente orientada a agentes, con herramientas alojadas como el intérprete de código y la búsqueda de archivos. A algunos desarrolladores les gustó, pero nunca logró una adopción masiva porque el diseño de la API imponía limitaciones y era difícil de adoptar en comparación con Chat Completions.

A finales de 2024, era evidente que necesitábamos unificar estas propuestas: algo tan accesible como Chat Completions y tan potente como Assistants, pero diseñado específicamente para modelos multimodales y de razonamiento. Así nació /v1/responses.

/v1/responses es un bucle de agente

Chat Completions ofrecía una interfaz de chat sencilla, basada en turnos. Responses ofrece un bucle estructurado para razonar y actuar. Imagínalo como trabajar con un detective: le das pruebas, investiga, puede consultar a expertos (herramientas) y, al final, te informa de sus hallazgos. El detective conserva sus notas privadas (el estado de razonamiento) entre pasos, pero nunca se las entrega al cliente.

Y aquí es donde los modelos de razonamiento realmente se destacan: Responses conserva el estado de razonamiento del modelo a lo largo de esos turnos. En Chat Completions, el razonamiento se descarta entre llamadas, como si el detective olvidara las pistas cada vez que sale de la habitación. Responses mantiene el cuaderno abierto; los procesos de pensamiento paso a paso se conservan hasta el siguiente turno. Eso se refleja en las pruebas de rendimiento (TAUBench +5 %), en un uso más eficiente de la caché y en una menor latencia.

Responses frente a Chat Completions

Responses también puede emitir varios elementos de salida: no solo lo que el modelo dijo, sino también lo que hizo. Obtienes registros de sus acciones: llamadas a herramientas, resultados estructurados y pasos intermedios. Es como recibir tanto el ensayo terminado como los cálculos del borrador. Esto resulta útil para depurar, auditar y crear interfaces de usuario más completas.

{
  "message": {
    "role": "assistant",
    "content": "I'm going to use the get_weather tool to find the weather.",
    "tool_calls": [
      {
        "id": "call_88O3ElkW2RrSdRTNeeP1PZkm",
        "type": "function",
        "function": {
          "name": "get_weather",
          "arguments": "{\"location\":\"New York, NY\",\"unit\":\"f\"}"
        }
      }
    ],
    "refusal": null,
    "annotations": []
  }
}
Chat Completions emite un mensaje por solicitud. La estructura de un mensaje impone limitaciones: ¿qué ocurrió primero, el mensaje o la llamada a la función?
  {
    "id": "rs_6888f6d0606c819aa8205ecee386963f0e683233d39188e7",
    "type": "reasoning",
    "summary": [
      {
        "type": "summary_text",
        "text": "**Determining weather response**\n\nI need to answer the user's question about the weather in San Francisco. ...."
      },
  },
  {
    "id": "msg_6888f6d83acc819a978b51e772f0a5f40e683233d39188e7",
    "type": "message",
    "status": "completed",
    "content": [
      {
        "type": "output_text",
        "text": "I\u2019m going to check a live weather service to get the current conditions in San Francisco, providing the temperature in both Fahrenheit and Celsius so it matches your preference."
      }
    ],
    "role": "assistant"
  },
  {
    "id": "fc_6888f6d86e28819aaaa1ba69cca766b70e683233d39188e7",
    "type": "function_call",
    "status": "completed",
    "arguments": "{\"location\":\"San Francisco, CA\",\"unit\":\"f\"}",
    "call_id": "call_XOnF4B9DvB8EJVB3JvWnGg83",
    "name": "get_weather"
  },
Responses emite una lista de elementos polimórficos. El orden de las acciones que realizó el modelo queda claro. Como desarrollador, puedes elegir cuáles quieres mostrar, registrar o ignorar por completo.

Subir de nivel de abstracción con herramientas alojadas

En los primeros días de la llamada a funciones, observamos un patrón clave: los desarrolladores usaban el modelo tanto para invocar API como para buscar en almacenes de documentos e incorporar fuentes de datos externas, lo que hoy se conoce como RAG. Pero, si estás empezando a desarrollar, crear un flujo de recuperación desde cero es una tarea compleja y costosa. Con Assistants, presentamos nuestras primeras herramientas alojadas : file_search y code_interpreter, que permitían al modelo usar RAG y escribir código para resolver los problemas que le planteabas. Con Responses, fuimos aún más lejos al incorporar búsqueda web, generación de imágenes y MCP. Y como la ejecución de herramientas ocurre del lado del servidor mediante herramientas alojadas como el intérprete de código o MCP, no necesitas reenviar cada llamada a través de tu propio backend, lo que reduce la latencia y los costos de las comunicaciones de ida y vuelta.

Conservar el razonamiento de forma segura

Entonces, ¿por qué tomarse tantas molestias para ocultar la cadena de pensamiento (CoT) sin procesar del modelo? ¿No sería más fácil exponerla y dejar que los clientes la trataran como cualquier otra salida del modelo? La respuesta breve es que exponer la CoT sin procesar conlleva varios riesgos, como alucinaciones y contenido dañino que no se generaría en una respuesta final. Para OpenAI, también implica riesgos competitivos.

Cuando lanzamos o1-preview a finales del año pasado, nuestro científico jefe, Jakub Pachocki, escribió lo siguiente en nuestro blog:

Creemos que una cadena de pensamiento oculta ofrece una oportunidad única para monitorear los modelos. Suponiendo que sea fiel y legible, la cadena de pensamiento oculta nos permite “leer la mente” del modelo y comprender su proceso de pensamiento. Por ejemplo, en el futuro podríamos querer monitorear la cadena de pensamiento en busca de señales de manipulación del usuario. Sin embargo, para que esto funcione, el modelo debe tener libertad para expresar sus pensamientos sin alteraciones, por lo que no podemos entrenar la cadena de pensamiento para que se ajuste a políticas o preferencias del usuario. Tampoco queremos que los usuarios vean directamente una cadena de pensamiento no alineada.

Responses aborda esto de la siguiente manera:

  • Conserva el razonamiento internamente, cifrado y oculto para el cliente.
  • Permite continuar de forma segura mediante previous_response_id o elementos de razonamiento, sin exponer la CoT sin procesar.

Por qué /v1/responses es la mejor opción para desarrollar

Diseñamos Responses para que conserve el estado, sea multimodal y funcione de manera eficiente.

  • Uso de herramientas por agentes: la API Responses facilita potenciar los flujos de trabajo con agentes mediante herramientas como búsqueda de archivos, generación de imágenes, intérprete de código y MCP.
  • Conservación del estado de forma predeterminada. Las conversaciones y el estado de las herramientas se registran automáticamente. Esto simplifica enormemente el razonamiento y los flujos de trabajo de varios turnos. GPT-5 integrado mediante Responses obtiene una puntuación un 5 % mejor en TAUBench que con Chat Completions, únicamente por aprovechar el razonamiento conservado.
  • Multimodal desde su concepción. Texto, imágenes, audio y llamadas a funciones: todos cuentan con soporte nativo. No añadimos modalidades a una API de texto como un parche; diseñamos la casa con suficientes habitaciones desde el primer día.
  • Menores costos, mejor rendimiento. Las pruebas internas muestran un aprovechamiento de la caché entre un 40 y un 80 % mejor que con Chat Completions. Eso significa menor latencia y menores costos.
  • Mejor diseño: aprendimos mucho de las API de Chat Completions y Assistants e incorporamos varias pequeñas mejoras para facilitar el uso de la API Responses y el SDK, entre ellas
    • Eventos semánticos de streaming.
    • Polimorfismo con etiquetas internas.
    • Utilidades output_text en el SDK (ya no hace falta usar choices.[0].message.content).
    • Mejor organización de los parámetros multimodales y de razonamiento.

¿Qué pasa con Chat Completions?

Chat Completions no va a desaparecer. Si te funciona, sigue usándolo. Pero si buscas razonamiento persistente, interacciones multimodales que se sientan nativas y un bucle de agente que no necesite soluciones improvisadas, Responses es el camino a seguir.

De cara al futuro

Así como Chat Completions reemplazó a Completions, esperamos que Responses se convierta en la opción predeterminada de los desarrolladores para crear con los modelos de OpenAI. Es sencilla cuando lo necesitas, potente cuando lo quieres y lo bastante flexible como para afrontar lo que traiga el próximo paradigma.

Esta es la API sobre la que seguiremos desarrollando en los próximos años.