Salidas estructuradas
Fuerza la salida JSON con response_format. Dos modos: json_object (cualquier JSON válido) y json_schema (conformidad estricta con el esquema). Ejemplos en curl y Python.
El parámetro response_format obliga al modelo a devolver JSON válido. Se admiten dos modos.
json_object mode
El modelo garantiza que el resultado sea un JSON válido. Tú defines la estructura en el prompt del sistema.
curl https://getvibeapi.com/v1/chat/completions \
-H "Authorization: Bearer $GETVIBE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-6.1-sol",
"response_format": { "type": "json_object" },
"messages": [
{"role": "system", "content": "Reply with JSON with fields: name (string), score (number)."},
{"role": "user", "content": "Rate this answer: very good"}
]
}'json_schema mode
Cumplimiento estricto del esquema JSON: el modelo completa exactamente los campos especificados. Compatible con GPT-5.x y modelos compatibles.
curl https://getvibeapi.com/v1/chat/completions \
-H "Authorization: Bearer $GETVIBE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-6.1-sol",
"response_format": {
"type": "json_schema",
"json_schema": {
"name": "review",
"strict": true,
"schema": {
"type": "object",
"properties": {
"name": { "type": "string" },
"score": { "type": "number", "minimum": 1, "maximum": 10 },
"summary": { "type": "string" }
},
"required": ["name", "score", "summary"],
"additionalProperties": false
}
}
},
"messages": [
{"role": "user", "content": "Rate this product: fast delivery, careful packaging"}
]
}'Con
strict: true, la pasarela dirige la solicitud únicamente a las variantes del modelo que realmente respetan el esquema, y lo hace en cada intento, incluido el cambio a un proveedor de respaldo. Si no hay ninguna variante adecuada disponible en ese momento, recibes un error explícito structured_output_unsupported en lugar de texto sin formato cuando se solicitó JSON. Esta protección se basa en mediciones y solo cubre las variantes que hemos medido: en una variante no medida, el proveedor aún podría descartar el esquema silenciosamente.Los modelos difieren en lo bien que mantienen el JSON; comprueba el tuyo. Medido el 2026-09-12 en
deepseek-v4-flash-0731, 10 llamadas por celda: json_object analizó correctamente 10/10 en las variantes :cxa y :cxbc, y 8/10 en :network, mientras que un json_schema estricto analizó correctamente 0/10 en ambas variantes (:cxa responde 400, :cxbc responde 200 con texto plano) y 3/10 en :network. La API propia de DeepSeek no tiene un modo json_schema; usa json_object, y cuando necesitas exactamente una estructura, una llamada de función forzada (tools + tool_choice) devolvió argumentos analizables correctamente 10/10 en todas las variantes. Los números por variante se encuentran en el campo structuredOutput de GET /v1/model-capabilities. Cada uno es una medición puntual con su fecha (measurement: "point-in-time"), no una promesa: el proveedor detrás de una variante puede cambiar y no volvemos a medir según un calendario.Respuesta de ejemplo
{
"id": "chatcmpl-...",
"choices": [{
"message": {
"role": "assistant",
"content": "{\"name\":\"product X\",\"score\":9,\"summary\":\"Fast and convenient\"}"
},
"finish_reason": "stop"
}],
"usage": { "prompt_tokens": 42, "completion_tokens": 18, "total_tokens": 60 }
}