¡Invita a amigos y gana tokens gratuitos!Saber más

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ámetroObligatorioTipoValor de EjemploDescripción
Content-TypeSístringapplication/jsonEspecifica el tipo de datos del cuerpo de la solicitud
AcceptSístringapplication/jsonEspecifica el tipo de datos que recibe el cliente
AuthorizationNostringBearer {{YOUR_API_KEY}}Credenciales de autenticación

Cuerpo de la Solicitud (Request Body)

Nombre del ParámetroObligatorioTipoDescripción
modelSístringEl ID del modelo a utilizar (ej. gpt-4.1-2025-04-14).
messagesSíarrayLista de mensajes que componen la conversación hasta el momento.
? messages[].roleSístringEl rol del emisor del mensaje, como system, user, assistant.
? messages[].contentSístringEl contenido específico del mensaje.
toolsSíarrayLista 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_choiceSíobjectControla 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"}}.
temperatureNointegerTemperatura 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_pNointegerPará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.
nNointegerCuántas opciones de respuesta generar por cada mensaje de entrada. Por defecto es 1.
streamNobooleanSi 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.
stopNostringSecuencias (hasta 4) donde la API dejará de generar tokens adicionales. Por defecto es null.
max_tokensNointegerEl número máximo de tokens a generar en la respuesta del chat. Por defecto es inf (infinito).
presence_penaltyNonumberPenalizació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_penaltyNonumberPenalizació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_biasNonull/objectAcepta 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.
userNostringUn identificador único que representa al usuario final, útil para monitorear y detectar abusos.
response_formatNoobjectEspecifica 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.
seenNointeger(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ámetroTipoDescripción
idstringIdentificador único de la solicitud de respuesta.
objectstringTipo de objeto, siempre es chat.completion.
createdintegerMarca de tiempo de creación (segundos Unix).
choicesarrayLista de opciones de respuesta.
? choices[].indexintegerÍndice de la opción en la lista.
? choices[].messageobjectObjeto del mensaje generado por el modelo.
? choices[].message.rolestringNombre del rol (generalmente assistant).
? choices[].message.contentstringContenido específico del mensaje.
? choices[].finish_reasonstringRazón por la cual el modelo dejó de generar (por ejemplo, stop, length).
usageobjectEstadísticas de uso de tokens.
? usage.prompt_tokensintegerCantidad de tokens consumidos por el prompt (indicación).
? usage.completion_tokensintegerCantidad de tokens consumidos por la respuesta generada (Completion).
? usage.total_tokensintegerCantidad 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:

  • temperature escala 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 alcance p. Recomendación oficial: Ajuste solo uno de los dos parámetros, no modifique temperature y top_p al 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.