Thème
Langue
·3 min de lecture

Mode JSON et sorties structurées : quels modèles prennent quoi en charge

Une matrice modèle par modèle du mode JSON sur GetVibe API, la différence entre json_object et json_schema, ainsi qu'une solution de secours compatible avec tous les modèles : les appels d'outils forcés.

Mode JSON et sorties structurées : quels modèles prennent quoi en charge

Si votre code analyse la réponse du modèle, vous avez besoin d'un JSON analysable à chaque appel. GetVibe API propose trois façons de l'obtenir : le mode json_object, le mode strict json_schema et les appels d'outils forcés. Les modèles ne prennent pas tous en charge les mêmes options. Cet article présente la matrice de notre catalogue et indique quelle approche utiliser selon le cas.

Les trois approches

  • response_format: {"type": "json_object"} : le modèle renvoie un JSON valide. Vous décrivez les champs dans le prompt.
  • response_format: {"type": "json_schema", ...} avec strict: true : le modèle remplit exactement le schéma que vous transmettez. Pris en charge par GPT-5.x et les modèles compatibles.
  • Appel d'outil forcé (tools et tool_choice désignant une fonction) : le modèle renvoie les arguments de la fonction sous forme de JSON correspondant au schéma de paramètres de la fonction. Tous les modèles de texte de notre catalogue prennent en charge les appels d'outils ; c'est donc l'option la plus portable.

La matrice

La colonne du mode JSON correspond à caps.jsonMode dans https://getvibeapi.com/api/catalog, relevée le 25 septembre 2026.

ModèleMode JSONAppels d'outilsPrix
GPT-6 Lunaouioui$0.0055 entrée · $0.0274 sortie par million de tokens
GPT-6 Solouioui$0.1096 entrée · $0.548 sortie par million de tokens
GPT-6 Astranonoui$0.548 entrée · $2.7398 sortie par million de tokens
GPT-5.6 Sol (ainsi que Luna et Terra)ouioui$0.0667 entrée · $0.40 sortie par million de tokens
Claude Opus 5.5ouioui$0.1067 entrée · $0.5334 sortie par million de tokens
Claude Sonnet 5ouioui$0.3334 entrée · $1.6667 sortie par million de tokens
Gemini 3.1 Proouioui$0.2515 entrée · $1.5086 sortie par million de tokens
Gemini 3.8 Flash (ainsi que 3.7 Flash)nonoui$0.0097 entrée · $0.0483 sortie par million de tokens
DeepSeek V4.1 Flashouioui$0.0112 entrée · $0.0445 sortie par million de tokens
Qwen3.8 Max (ainsi que 3.8 Flash)ouioui$0.1543 entrée · $0.4629 sortie par million de tokens
Kimi K3ouioui$0.1715 entrée · $0.8572 sortie par million de tokens
MiniMax M3ouioui$0.0148 entrée · $0.0591 sortie par million de tokens
Tencent Hy4 Previewouioui$0.0334 entrée · $0.1001 sortie par million de tokens
GLM-5.3 (ainsi que 5.3 Flash et 5.2)nonoui$0.10 entrée · $0.3143 sortie par million de tokens

Pour les modèles marqués « non », utilisez un appel d'outil forcé, ou décrivez le JSON dans le prompt et validez-le de votre côté.

Fonctionnement du mode strict de notre côté

Avec strict: true dans une requête json_schema, la passerelle achemine la requête uniquement vers des variantes de modèles qui respectent réellement le schéma. Elle effectue cette vérification à chaque tentative, y compris lors du basculement vers un modèle de secours. Si aucune variante adaptée n'est disponible, vous obtenez une erreur explicite structured_output_unsupported au lieu d'un texte brut alors qu'un JSON était attendu. Cette protection repose sur nos mesures et couvre uniquement les variantes que nous avons mesurées.

Un cas connu : l'API de DeepSeek ne propose pas de mode json_schema. Pour les modèles DeepSeek, utilisez json_object, ou un appel d'outil forcé lorsque vous avez besoin d'une structure exactement définie.

Exemples

Schéma strict :

from openai import OpenAI
import json

client = OpenAI(base_url="https://getvibeapi.com/v1", api_key="sk-pv-...")
schema = {
    "type": "object",
    "properties": {"name": {"type": "string"}, "score": {"type": "number"}},
    "required": ["name", "score"],
    "additionalProperties": False,
}
resp = client.chat.completions.create(
    model="gpt-6-luna",
    response_format={"type": "json_schema",
                     "json_schema": {"name": "review", "strict": True, "schema": schema}},
    messages=[{"role": "user", "content": "Évaluez ce produit : livraison rapide, emballage soigné"}],
)
print(json.loads(resp.choices[0].message.content))

Appel d'outil forcé, qui fonctionne avec les modèles dépourvus de mode JSON :

resp = client.chat.completions.create(
    model="gemini-3.8-flash",
    tools=[{"type": "function", "function": {"name": "save_review", "parameters": schema}}],
    tool_choice={"type": "function", "function": {"name": "save_review"}},
    messages=[{"role": "user", "content": "Évaluez ce produit : livraison rapide, emballage soigné"}],
)
args = json.loads(resp.choices[0].message.tool_calls[0].function.arguments)

Validez toujours

Même lorsque le mode JSON est activé, vérifiez l'objet analysé par rapport à votre schéma avant de l'utiliser, et effectuez une nouvelle tentative en cas d'échec. Cela est particulièrement important pour les sorties longues, lorsqu'une réponse interrompue par max_tokens contient un JSON tronqué. Vérifiez finish_reason : length signifie que la réponse a été interrompue.

Étapes suivantes

Consultez la documentation sur les sorties structurées et le guide des appels d'outils, ou trouvez un modèle compatible JSON à faible coût dans notre liste des API LLM les moins chères.

mode JSONsorties structuréesresponse_format json_schemasortie JSON des LLMjson_object vs json_schemaappels de fonction JSON

Essayez GetVibe API gratuitement

GPT, Claude, Gemini et bien plus via une seule API compatible avec OpenAI. Payez en USD par carte ou en cryptomonnaie.

Articles associés

Mode JSON et sorties structurées : quels modèles prennent quoi en charge | GetVibe API