Usamos cookies. Las cookies y el almacenamiento del navegador mantienen tu sesión iniciada y recuerdan tus preferencias. Con tu permiso, también medimos cómo se usa el sitio. Puedes en cualquier momento. Consulta nuestra política de cookies.

Salidas estructuradas

Endpoints

Salidas estructuradas

Fuerza una salida JSON válida que cumpla un JSON Schema con response_format en chat completions o text.format en Responses.

Pruébalo en el playground

Las salidas estructuradas hacen que un modelo devuelva JSON que cumple un JSON Schema que tú proporcionas. Úsalas para extracción, clasificación y cualquier respuesta que tu código analice. Establece response_format en Chat completions (o text.format en Responses).

Parámetros de la petición

ParámetroTipoDescripción
response_format.typestring"json_schema" para salida restringida por esquema. "json_object" para el modo JSON libre.
response_format.json_schema.namestringUn nombre para el esquema.
response_format.json_schema.strictbooleantrue aplica el esquema exactamente donde el proveedor lo admite.
response_format.json_schema.schemaobjectUn JSON Schema. Con strict, usa additionalProperties: false y lista todas las propiedades en required.
{
  "model": "openai/gpt-5-mini",
  "messages": [{ "role": "user", "content": "Extract: Ada Lovelace, born 1815 in London." }],
  "response_format": {
    "type": "json_schema",
    "json_schema": {
      "name": "person",
      "strict": true,
      "schema": {
        "type": "object",
        "properties": {
          "name": { "type": "string" },
          "born": { "type": "integer" },
          "city": { "type": "string" }
        },
        "required": ["name", "born", "city"],
        "additionalProperties": false
      }
    }
  }
}
import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://api14.com/api/v1",
  apiKey: process.env.API14_API_KEY,
});

const result = await client.chat.completions.create({
  "model": "openai/gpt-5-mini",
  "messages": [
    {
      "role": "user",
      "content": "Extract the city and country from: \"I live in Lisbon, Portugal.\""
    }
  ],
  "response_format": {
    "type": "json_schema",
    "json_schema": {
      "name": "place",
      "strict": true,
      "schema": {
        "type": "object",
        "properties": {
          "city": {
            "type": "string"
          },
          "country": {
            "type": "string"
          }
        },
        "required": [
          "city",
          "country"
        ],
        "additionalProperties": false
      }
    }
  }
});
console.log(JSON.parse(result.choices[0].message.content));

Respuesta

El JSON llega como un string en message.content:

{
  "id": "gen-1760000000-json1",
  "model": "openai/gpt-5-mini",
  "choices": [
    {
      "index": 0,
      "finish_reason": "stop",
      "message": { "role": "assistant", "content": "{\"name\":\"Ada Lovelace\",\"born\":1815,\"city\":\"London\"}" }
    }
  ],
  "usage": { "prompt_tokens": 71, "completion_tokens": 18, "total_tokens": 89, "cost": 0.0000538 }
}

Los helpers de los SDK funcionan como de costumbre, por ejemplo client.chat.completions.parse(...) con Zod en Node o con Pydantic en Python.

Compatibilidad de modelos

  • Para encontrar modelos que lo admitan, busca structured_outputs o response_format en supported_parameters en Modelos.
  • Para asegurarte de que la petición solo va a proveedores que respetan el esquema, añade provider: { "require_parameters": true }.
  • Los modelos sin compatibilidad nativa pueden producir JSON si se lo pides en el prompt, pero la salida no está garantizada. Valídala siempre.
  • Si finish_reason es "length", el JSON está truncado. Aumenta max_tokens.

Errores

Un esquema no válido suele devolver un 400 del proveedor con su mensaje. Los demás errores son los mismos que en Chat completions. Consulta Errores.