Documentation API : Créer des sorties structurées
Description de l'API
Étant donné un prompt (Invite), le modèle renvoie une ou plusieurs réponses de complétion prédites, et prend en charge le forçage du modèle à générer des données structurées selon un schéma JSON spécifié (JSON Schema).
Documentation officielle de référence : Sorties structurées OpenAI (Structured Outputs)
Informations de base de l'API
- Méthode de requête :
POST - Endpoint de la requête :
https://api.codingplanx.ai/v1/chat/completions - Format des données :
application/json
En-têtes de requête (Headers)
| Paramètre | Requis | Type | Valeur d'exemple | Description |
|---|---|---|---|---|
Content-Type | Oui | string | application/json | Spécifie le type de données du corps de la requête |
Accept | Oui | string | application/json | Spécifie le type de données accepté par le client |
Authorization | Non | string | Bearer {{YOUR_API_KEY}} | Identifiant d'authentification (Token) |
Corps de la requête (Request Body)
| Paramètre | Requis | Type | Description |
|---|---|---|---|
model | Oui | string | L'ID du modèle à utiliser (ex: gpt-4.1-2025-04-14). |
messages | Oui | array | Liste des messages composant la conversation jusqu'à présent. |
? messages[].role | Oui | string | Le rôle de l'expéditeur du message, tel que system, user, assistant. |
? messages[].content | Oui | string | Le contenu spécifique du message. |
tools | Oui | array | Une liste d'outils que le modèle peut appeler. Actuellement, seules les fonctions sont prises en charge. Utilisé pour fournir une liste de fonctions pour lesquelles le modèle peut générer des entrées JSON. |
tool_choice | Oui | object | Contrôle quelle fonction le modèle appelle. none signifie aucun appel, auto signifie sélection automatique. Peut également forcer un appel via {"type": "function", "function": {"name": "my_function"}}. |
temperature | Non | integer | Température d'échantillonnage, entre 0 et 2. Une valeur plus élevée (ex: 0.8) rendra la sortie plus aléatoire, tandis qu'une valeur plus faible (ex: 0.2) la rendra plus ciblée et déterministe. Il est recommandé de modifier ceci ou top_p, mais pas les deux en même temps. |
top_p | Non | integer | Paramètre d'échantillonnage de noyau (nucleus sampling). 0.1 signifie que seuls les tokens composant les 10 % supérieurs de la masse de probabilité sont pris en compte. Il est recommandé de modifier ceci ou temperature, mais pas les deux simultanément. |
n | Non | integer | Combien de choix de complétion générer pour chaque message d'entrée. La valeur par défaut est 1. |
stream | Non | boolean | Si true, active la sortie en streaming. Les deltas partiels des messages seront envoyés sous forme de Server-Sent Events (SSE) et se termineront par data: [DONE]. La valeur par défaut est false. |
stop | Non | string | Séquences (jusqu'à 4) où l'API arrêtera de générer d'autres tokens. La valeur par défaut est null. |
max_tokens | Non | integer | Le nombre maximum de tokens à générer dans la complétion de chat. La valeur par défaut est inf (infini). |
presence_penalty | Non | number | Pénalité de présence (-2.0 à 2.0). Les valeurs positives pénalisent les nouveaux tokens en fonction de leur apparition dans le texte jusqu'à présent, augmentant la probabilité que le modèle aborde de nouveaux sujets. |
frequency_penalty | Non | number | Pénalité de fréquence (-2.0 à 2.0). Les valeurs positives pénalisent les nouveaux tokens en fonction de leur fréquence actuelle dans le texte, diminuant la probabilité que le modèle répète les mêmes lignes. |
logit_bias | Non | null/object | Accepte un objet JSON qui mappe les ID de tokens à une valeur de biais associée (-100 à 100), utilisé pour modifier la probabilité que des tokens spécifiés apparaissent dans la complétion. |
user | Non | string | Un identifiant unique représentant votre utilisateur final, aidant à surveiller et à détecter les abus. |
response_format | Non | object | Spécifie l'objet de format que le modèle doit générer. La définition de {"type": "json_schema", "json_schema": {...}} active la sortie structurée, garantissant que le modèle génère un format JSON valide. |
seen | Non | integer | (Fonctionnalité Beta) Définit la graine aléatoire (Seed). Le système fera de son mieux pour échantillonner de manière déterministe ; des requêtes répétées avec la même graine et les mêmes paramètres devraient renvoyer le même résultat. |
Exemple de requête (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
}
}
}
Corps de la réponse (Response Body)
| Paramètre | Type | Description |
|---|---|---|
id | string | L'identifiant unique de la requête de complétion. |
object | string | Le type d'objet, toujours chat.completion. |
created | integer | L'horodatage de création (en secondes Unix). |
choices | array | La liste des choix de complétion. |
? choices[].index | integer | L'index du choix dans la liste. |
? choices[].message | object | L'objet message généré par le modèle. |
? choices[].message.role | string | Le nom du rôle (généralement assistant). |
? choices[].message.content | string | Le contenu spécifique du message. |
? choices[].finish_reason | string | La raison pour laquelle le modèle a cessé de générer (par exemple stop, length). |
usage | object | Statistiques d'utilisation des tokens. |
? usage.prompt_tokens | integer | Le nombre de tokens consommés par le prompt. |
? usage.completion_tokens | integer | Le nombre de tokens consommés par la complétion générée. |
? usage.total_tokens | integer | Le nombre total de tokens consommés. |
Exemple de réponse (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
}
}
Foire Aux Questions (FAQ)
1. Qu'est-ce que response_format et comment garantir que le modèle génère du JSON strict ?
Le paramètre response_format vous permet d'exiger que le modèle renvoie les données dans un format spécifique. Si vous souhaitez utiliser les "Sorties structurées", vous devez le définir sur {"type": "json_schema"}, définir votre JSON Schema à l'intérieur, et activer strict: true. Cela garantit que le modèle génère le contenu à 100 % en fonction des champs et des types de données que vous avez définis, éliminant ainsi le besoin de traitement de tolérance aux pannes JSON dans votre code.
2. Pourquoi ma sortie JSON est-elle tronquée ?
Si la valeur de choices[0].finish_reason dans les données de réponse est length, cela signifie que le texte généré a atteint la limite de max_tokens ou a dépassé la limite maximale de longueur de contexte du modèle. Il est recommandé d'augmenter la valeur du paramètre max_tokens dans votre requête.
3. Quelle est la différence entre les paramètres temperature et top_p ? Lequel dois-je ajuster ?
Les deux paramètres sont utilisés pour contrôler l'aléatoire de la sortie du modèle :
temperaturemet à l'échelle la distribution de probabilité de sortie du modèle. Plus la valeur est faible, plus la sortie est rigoureuse et déterministe ; plus la valeur est élevée, plus la sortie est divergente et créative.top_p(échantillonnage de noyau) restreint le modèle à choisir uniquement parmi le vocabulaire le plus fréquent dont la probabilité cumulée atteintp. Recommandation officielle : N'ajustez qu'un seul de ces paramètres à la fois. Ne modifiez pas simultanémenttemperatureettop_p.
4. Que se passe-t-il si j'active stream: true ?
Lorsque vous définissez stream: true, l'API n'attendra pas que l'intégralité de la réponse soit générée avant de la renvoyer. Au lieu de cela, elle renverra des fragments de données en temps réel (streaming), comme une machine à écrire. Le format des données renvoyées deviendra des Server-Sent Events (SSE). Le client doit écouter le flux de données pour concaténer delta.content jusqu'à ce qu'il reçoive la balise [DONE] indiquant la fin.
5. Comment s'assurer que l'appel du même Prompt donne exactement la même réponse à chaque fois ?
Bien que les grands modèles de langage aient une nature aléatoire, vous pouvez obtenir une sortie hautement déterministe en transmettant un paramètre seen (Seed) spécifique et en définissant la temperature à 0. Si vous remarquez que le system_fingerprint dans la réponse change, cela signifie qu'il y a eu un ajustement mineur dans la configuration du modèle en arrière-plan. Dans ce cas, même avec le même Seed, de légères différences dans les résultats peuvent apparaître.