Nous utilisons des cookies. Les cookies et le stockage du navigateur vous gardent connecté et mémorisent vos préférences. Avec votre accord, nous mesurons aussi l’utilisation du site. Vous pouvez à tout moment. Consultez notre politique relative aux cookies.

Sorties structurées

Endpoints

Sorties structurées

Forcez un JSON valide conforme à un JSON Schema avec response_format, pour l'extraction, la classification et toute réponse analysée par votre code.

Essayer dans le playground

Les sorties structurées font renvoyer par un modèle un JSON conforme à un JSON Schema que vous fournissez. Utilisez-les pour l'extraction, la classification et toute réponse que votre code analyse. Définissez response_format sur les Chat completions (ou text.format sur Responses).

Paramètres de la requête

ParamètreTypeDescription
response_format.typestring"json_schema" pour une sortie contrainte par schéma. "json_object" pour le mode JSON libre.
response_format.json_schema.namestringUn nom pour le schéma.
response_format.json_schema.strictbooleantrue applique le schéma à la lettre quand le fournisseur le permet.
response_format.json_schema.schemaobjectUn JSON Schema. Avec strict, utilisez additionalProperties: false et listez chaque propriété dans 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));

Réponse

Le JSON arrive sous forme de chaîne dans 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 }
}

Les helpers des SDK fonctionnent comme d'habitude, par exemple client.chat.completions.parse(...) avec Zod en Node ou Pydantic en Python.

Prise en charge par les modèles

  • Pour trouver les modèles qui le prennent en charge, cherchez structured_outputs ou response_format dans supported_parameters sur Modèles.
  • Pour que la requête n'aille qu'aux fournisseurs qui respectent le schéma, ajoutez provider: { "require_parameters": true }.
  • Les modèles sans prise en charge native peuvent quand même produire du JSON si vous le demandez dans le prompt, mais le résultat n'est pas garanti. Validez-le toujours.
  • Si finish_reason vaut "length", le JSON est tronqué. Augmentez max_tokens.

Erreurs

Un schéma invalide renvoie généralement un 400 du fournisseur avec son message. Les autres erreurs sont les mêmes que pour les Chat completions. Voir Erreurs.