response_format sur une complétion de clavardage demande du JSON : {"type": "json_object"} pour n’importe quel JSON, ou {"type": "json_schema", "json_schema": {"name", "schema", "strict"}} pour un JSON conforme à un schéma. Le même champ fonctionne avec tout modèle ; ce que chaque fournisseur reçoit diffère, et figure ci-dessous.
curl https://autonomousrelay.com/v1/chat/completions \
-H "Authorization: Bearer $AUTONOMOUSRELAY_API_KEY" \
-H 'content-type: application/json' \
-d '{
"model": "anthropic/claude-sonnet-5",
"messages": [{"role": "user", "content": "Extract the invoice number and total from: INV-2041, $1,250.00"}],
"response_format": {
"type": "json_schema",
"json_schema": {
"name": "invoice",
"strict": true,
"schema": {
"type": "object",
"properties": {"number": {"type": "string"}, "total_usd": {"type": "number"}},
"required": ["number", "total_usd"],
"additionalProperties": false
}
}
}
}'Ce que reçoit chaque fournisseur
- Les fournisseurs au protocole OpenAI (OpenAI, xAI, Mistral, Groq et les autres) : le champ tel que vous l’avez envoyé.
- Gemini : le mode JSON, avec votre schéma comme schéma de réponse.
- Anthropic : un
json_schemadevient les sorties structurées d’Anthropic. Les bornes qu’Anthropic n’applique pas (minimum,maxLength,maxItemset semblables) restent non vérifiées, etadditionalProperties: falseest présumé là où vous ne l’avez pas fixé. Un schéma qu’Anthropic ne peut pas exprimer —additionalPropertiesautre quefalse, un$refrécursif ou externe — est envoyé sans format, etjson_objectn’a pas d’équivalent chez Anthropic ; dans les deux cas, c’est l’invite qui demande du JSON.
Seulement les points d’accès qui le prennent en charge
Chaque point d’accès du catalogue déclare les paramètres qu’il prend en charge (Modèles et fournisseurs). Avec "provider": {"require_parameters": true}, la requête n’est acheminée qu’aux points d’accès qui déclarent chaque paramètre qu’elle envoie — response_format compris, avec tools, seed, les paramètres d’échantillonnage, stop, logprobs et reasoning. Un point d’accès qui ne déclare aucun ensemble de paramètres n’est pas exclu.
Réparer une réponse qui n’est pas du JSON
"plugins": [{"id": "response-healing"}]Un modèle à qui l’on demande du JSON l’enveloppe parfois d’une clôture markdown ou d’une phrase, ou laisse une virgule en trop. Le plugiciel response-healing répare les clôtures, le texte environnant, les virgules finales, les commentaires, les clés sans guillemets et les crochets non fermés, et ne garde la réparation que si elle s’analyse : il ne rend jamais un texte qui n’est toujours pas du JSON, et ne touche jamais une réponse qui en est déjà. Une réponse coupée par max_tokens (finish_reason: "length") est renvoyée telle quelle — fermer les crochets d’un demi-objet inventerait une réponse. Pas en diffusion en continu. Quand il a changé la réponse, la liste pipeline des métadonnées de la requête contient response_healing.
Agents hébergés
Le output.schema d’une définition d’agent (un objet JSON Schema d’au plus 8 Ko) est envoyé comme response_format sur la réponse finale de l’exécution, et l’enveloppe de résultat porte alors output_json à côté du texte.