Documentación de la API: Crear Salidas Estructuradas
Descripción de la Interfaz
Dado un prompt (indicación), el modelo devolverá una o más respuestas predictivas, y admite forzar al modelo a generar datos estructurados de acuerdo con un esquema JSON (JSON Schema) especificado.
Documentación oficial de referencia: OpenAI Structured Outputs
Información Básica de la Interfaz
- Método de solicitud:
POST - Ruta de solicitud:
https://api.codingplanx.ai/v1/chat/completions - Formato de datos:
application/json
Encabezados de la Solicitud (Headers)
| Nombre del Parámetro | Obligatorio | Tipo | Valor de Ejemplo | Descripción |
|---|---|---|---|---|
Content-Type | Sí | string | application/json | Especifica el tipo de datos del cuerpo de la solicitud |
Accept | Sí | string | application/json | Especifica el tipo de datos que recibe el cliente |
Authorization | No | string | Bearer {{YOUR_API_KEY}} | Credenciales de autenticación |
Cuerpo de la Solicitud (Request Body)
| Nombre del Parámetro | Obligatorio | Tipo | Descripción |
|---|---|---|---|
model | Sí | string | El ID del modelo a utilizar (ej. gpt-4.1-2025-04-14). |
messages | Sí | array | Lista de mensajes que componen la conversación hasta el momento. |
? messages[].role | Sí | string | El rol del emisor del mensaje, como system, user, assistant. |
? messages[].content | Sí | string | El contenido específico del mensaje. |
tools | Sí | array | Lista de herramientas que el modelo puede llamar. Actualmente solo admite funciones. Se utiliza para proporcionar una lista de funciones para las cuales el modelo puede generar una entrada JSON. |
tool_choice | Sí | object | Controla qué función llama el modelo. none significa que no se llama ninguna, auto significa selección automática. También se puede forzar una llamada mediante {"type": "function", "function": {"name": "my_function"}}. |
temperature | No | integer | Temperatura de muestreo, entre 0 y 2. Valores más altos (ej. 0.8) hacen que la salida sea más aleatoria, valores más bajos (ej. 0.2) la hacen más enfocada y determinista. Se recomienda modificar este valor o top_p, pero no ambos a la vez. |
top_p | No | integer | Parámetro de muestreo de núcleo (nucleus sampling). 0.1 significa que solo se consideran los tokens que componen el 10% superior de la masa de probabilidad. Se recomienda modificar este valor o temperature, pero no ambos. |
n | No | integer | Cuántas opciones de respuesta generar por cada mensaje de entrada. Por defecto es 1. |
stream | No | boolean | Si se habilita la salida en flujo (streaming). Si es true, se enviarán incrementos parciales del mensaje como Server-Sent Events (SSE) y terminará con data: [DONE]. Por defecto es false. |
stop | No | string | Secuencias (hasta 4) donde la API dejará de generar tokens adicionales. Por defecto es null. |
max_tokens | No | integer | El número máximo de tokens a generar en la respuesta del chat. Por defecto es inf (infinito). |
presence_penalty | No | number | Penalización de presencia (-2.0 a 2.0). Los valores positivos penalizan los nuevos tokens en función de si ya han aparecido en el texto hasta el momento, lo que aumenta la probabilidad de que el modelo hable sobre nuevos temas. |
frequency_penalty | No | number | Penalización de frecuencia (-2.0 a 2.0). Los valores positivos penalizan los nuevos tokens en función de su frecuencia de aparición actual en el texto, reduciendo la probabilidad de que el modelo repita el mismo contenido. |
logit_bias | No | null/object | Acepta un objeto JSON que mapea los ID de los tokens a un valor de sesgo asociado (de -100 a 100), utilizado para modificar la probabilidad de que tokens específicos aparezcan en la respuesta. |
user | No | string | Un identificador único que representa al usuario final, útil para monitorear y detectar abusos. |
response_format | No | object | Especifica el objeto de formato que el modelo debe emitir. Al configurar {"type": "json_schema", "json_schema": {...}} se habilitan las salidas estructuradas, garantizando que el modelo genere un formato JSON válido. |
seen | No | integer | (Función Beta) Establece una semilla aleatoria (Seed). El sistema hará todo lo posible por realizar un muestreo determinista; las solicitudes repetidas con la misma semilla y parámetros deberían devolver el mismo resultado. |
Ejemplo de Solicitud (Request Example)
{
"model": "gpt-4.1-2025-04-14",
"messages": [
{
"role": "system",
"content": "Determine if the user input violates specific guidelines and explain if they do."
},
{
"role": "user",
"content": "How do I prepare for a job interview?"
}
],
"response_format": {
"type": "json_schema",
"json_schema": {
"name": "content_compliance",
"description": "Determines if content is violating specific moderation rules",
"schema": {
"type": "object",
"properties": {
"is_violating": {
"type": "boolean",
"description": "Indicates if the content is violating guidelines"
},
"category": {
"type": ["string", "null"],
"description": "Type of violation, if the content is violating guidelines. Null otherwise.",
"enum": ["violence", "sexual", "self_harm"]
},
"explanation_if_violating": {
"type": ["string", "null"],
"description": "Explanation of why the content is violating"
}
},
"required": ["is_violating", "category", "explanation_if_violating"],
"additionalProperties": false
},
"strict": true
}
}
}
Cuerpo de la Respuesta (Response Body)
| Nombre del Parámetro | Tipo | Descripción |
|---|---|---|
id | string | Identificador único de la solicitud de respuesta. |
object | string | Tipo de objeto, siempre es chat.completion. |
created | integer | Marca de tiempo de creación (segundos Unix). |
choices | array | Lista de opciones de respuesta. |
? choices[].index | integer | Índice de la opción en la lista. |
? choices[].message | object | Objeto del mensaje generado por el modelo. |
? choices[].message.role | string | Nombre del rol (generalmente assistant). |
? choices[].message.content | string | Contenido específico del mensaje. |
? choices[].finish_reason | string | Razón por la cual el modelo dejó de generar (por ejemplo, stop, length). |
usage | object | Estadísticas de uso de tokens. |
? usage.prompt_tokens | integer | Cantidad de tokens consumidos por el prompt (indicación). |
? usage.completion_tokens | integer | Cantidad de tokens consumidos por la respuesta generada (Completion). |
? usage.total_tokens | integer | Cantidad total de tokens consumidos. |
Ejemplo de Respuesta (Response Example)
{
"id": "chatcmpl-123",
"object": "chat.completion",
"created": 1677652288,
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "\r
\r
Hello there, how may I assist you today?"
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 9,
"completion_tokens": 12,
"total_tokens": 21
}
}
Preguntas Frecuentes (FAQs)
1. ¿Qué es response_format y cómo garantiza que el modelo emita un JSON estricto?
El parámetro response_format le permite solicitar que el modelo devuelva datos en un formato específico. Si desea utilizar "Salidas Estructuradas" (Structured Outputs), debe establecerlo en {"type": "json_schema"}, definir su esquema JSON en el interior y activar strict: true. Esto garantiza al 100% que el modelo generará el contenido de acuerdo con los campos y tipos de datos que haya definido, eliminando la necesidad de realizar un análisis adicional de tolerancia a errores JSON en su código.
2. ¿Por qué mi salida JSON está truncada o incompleta?
Si el valor de choices[0].finish_reason en sus datos de respuesta es length, significa que el texto generado alcanzó el límite de max_tokens o superó el límite de longitud de contexto máximo del modelo. Se recomienda aumentar el valor del parámetro max_tokens en su solicitud.
3. ¿Cuál es la diferencia entre los parámetros temperature y top_p? ¿Cuál debería ajustar?
Ambos son parámetros utilizados para controlar la aleatoriedad de la salida del modelo:
temperatureescala la distribución de probabilidad de salida del modelo. Valores más bajos producen salidas más rigurosas y deterministas; valores más altos generan salidas más divergentes y creativas.top_p(muestreo de núcleo o nucleus sampling) restringe al modelo a elegir solo del vocabulario más frecuente cuya probabilidad acumulada alcancep. Recomendación oficial: Ajuste solo uno de los dos parámetros, no modifiquetemperatureytop_pal mismo tiempo.
4. ¿Qué sucede al activar stream: true?
Cuando se establece stream: true, la API no esperará a que se genere toda la respuesta para devolverla, sino que transmitirá fragmentos de datos en tiempo real (streaming), como una máquina de escribir. El formato de los datos devueltos cambiará a Server-Sent Events (SSE). El cliente debe escuchar el flujo de datos para concatenar delta.content hasta recibir la marca [DONE], que indica el final de la transmisión.
5. ¿Cómo garantizar que la misma llamada (Prompt) obtenga exactamente la misma respuesta en todo momento?
Aunque los modelos de lenguaje grande (LLM) tienen cierta aleatoriedad intrínseca, puede lograr el máximo grado de determinismo en la salida pasando un parámetro seen (Semilla / Seed) específico y configurando la temperature en 0. Si observa que el system_fingerprint en los resultados devueltos cambia, significa que hay actualizaciones o ajustes finos (fine-tuning) en la configuración del modelo de backend; en este caso, incluso con la misma semilla, el resultado puede mostrar ligeras diferencias.