Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Obtenez des résultats JSON validés à partir de modèles
Les sorties structurées sont une fonctionnalité d'Amazon Bedrock qui garantit que les réponses des modèles sont conformes aux schémas JSON définis par l'utilisateur et aux définitions d'outils, réduisant ainsi le besoin de mécanismes d'analyse et de validation personnalisés dans les déploiements d'IA de production.
Avantages
Les sorties structurées répondent aux défis critiques des applications d'IA de production :
-
Garantit la conformité du schéma : élimine les taux d'erreur et les boucles de nouvelles tentatives liés aux approches basées sur des instructions
-
Complexité de développement réduite : élimine le besoin d'une logique d'analyse et de validation personnalisée
-
Réduction des coûts d'exploitation : réduit les demandes infructueuses et les nouvelles tentatives
-
Fiabilité de la production : permet de déployer en toute confiance des applications d'IA nécessitant des résultats prévisibles et lisibles par machine
Comment ça marche
Les sorties structurées obligent les réponses du modèle à suivre un schéma spécifique, garantissant ainsi une sortie valide et analysable pour le traitement en aval. Vous pouvez utiliser des sorties structurées par le biais de deux mécanismes complémentaires :
Format de sortie du schéma JSON
Pour InvokeModel l'API avec les modèles Anthropic Claude, utilisez le champ de output_config.format requête. Pour les modèles de poids ouverts, utilisez le champ de response_format demande. Pour Converse APIs, utilisez le champ de outputConfig.textFormat demande. La réponse du modèle sera conforme au schéma JSON spécifié.
Utilisation stricte des outils
Ajoutez l'strict: trueindicateur aux définitions d'outils pour permettre la validation du schéma sur les noms et les entrées des outils. Les appels d'outils du modèle suivront alors le schéma d'entrée d'outil défini.
Ces mécanismes peuvent être utilisés indépendamment ou conjointement dans la même demande. Reportez-vous à la documentation de l'API Bedrock pour plus de détails.
Flux de travail des demandes
Ce qui suit décrit comment Amazon Bedrock traite les demandes avec des sorties structurées :
-
Demande initiale — Vous incluez soit un schéma JSON via le
response_formatparamètreoutputConfig.textFormatoutput_config.format,, soit une définition d'outil avec l'strict: trueindicateur dans votre demande d'inférence. -
Validation du schéma — Amazon Bedrock valide le format de schéma JSON par rapport au sous-ensemble JSON Schema Draft 2020-12 pris en charge. Si le schéma contient des fonctionnalités non prises en charge, Amazon Bedrock renvoie immédiatement une erreur 400.
-
Première compilation : pour les nouveaux schémas, Amazon Bedrock compile la grammaire, ce qui peut prendre quelques minutes.
-
Mise en cache — Les grammaires correctement compilées sont mises en cache pendant 24 heures à compter du premier accès. Les grammaires mises en cache sont chiffrées à l'aide de clés gérées par AWS.
-
Demandes ultérieures — Les schémas identiques provenant du même compte utilisent des grammaires mises en cache, ce qui entraîne une latence d'inférence comparable à celle des demandes standard avec une surcharge minimale.
-
Réponse — Vous recevez des réponses d'inférence standard respectant strictement le schéma.
Fonctionnalités prises en charge APIs
Vous pouvez utiliser des sorties structurées pour les fonctionnalités Amazon Bedrock suivantes :
Converse et ConverseStream APIs — Utilisez des sorties structurées avec le Converse et ConverseStream APIs pour l'inférence conversationnelle.
InvokeModel et InvokeModelWithResponseStream APIs — Utilisez des sorties structurées avec le InvokeModel et InvokeModelWithResponseStream APIs pour l'inférence à tour unique.
Inférence entre régions : utilisez des sorties structurées dans le cadre de l'inférence entre régions sans aucune configuration supplémentaire.
Inférence par lots : utilisez des sorties structurées dans le cadre de l'inférence par lots sans aucune configuration supplémentaire.
Note
Les sorties structurées sont incompatibles avec les citations pour les modèles anthropiques. Si vous activez les citations lorsque vous utilisez des sorties structurées, le modèle renverra une erreur de 400.
Modèles pris en charge
Les sorties structurées sont généralement disponibles dans toutes les régions AWS commerciales pour certains modèles sans serveur Amazon Bedrock. Pour obtenir la liste des modèles pris en charge, reportez-vous à la section Support des modèles par fonctionnalité.
- Anthropic
-
Claude Haïku 4.5 ()
anthropic.claude-haiku-4-5-20251001-v1:0Claude Sonnet 4.5 ()
anthropic.claude-sonnet-4-5-20250929-v1:0Claude Opus 4.5 (
anthropic.claude-opus-4-5-20251101-v1:0)Claude Opus 4.6 (
anthropic.claude-opus-4-6-v1)
- Qwen
-
Qwen3 235B A2B 2507 ()
qwen.qwen3-235b-a22b-2507-v1:0Qwen3 32B (dense) ()
qwen.qwen3-32b-v1:0Qwen3-Coder-30B-A3B-Instruct ()
qwen.qwen3-coder-30b-a3b-v1:0Instruction du codeur Qwen3 480B A35B ()
qwen.qwen3-coder-480b-a35b-v1:0Qwen3 Next 80B A3B ()
qwen.qwen3-next-80b-a3bQwen3 VL 235B A2B ()
qwen.qwen3-vl-235b-a22b
- OpenAI
-
gpt-oss-120b ()
openai.gpt-oss-120b-1:0gpt-oss-20b ()
openai.gpt-oss-20b-1:0GPT OSS Safeguard 120B ()
openai.gpt-oss-safeguard-120bGPT OSS Safeguard 20B ()
openai.gpt-oss-safeguard-20b
- DeepSeek
-
DeepSeek-V3,1 ()
deepseek.v3-v1:0
-
Gemma 3 12B IT ()
google.gemma-3-12b-itGemma 3 27B PT ()
google.gemma-3-27b-it
- MiniMax
-
MiniMax M2 (
minimax.minimax-m2)
- Mistral AI
-
Magistral Small 2509 ()
mistral.magistral-small-2509Ministral 3B (1)
mistral.ministral-3-3b-instructMinistral 3 8B (1)
mistral.ministral-3-8b-instructMinistral 14B 3.0 ()
mistral.ministral-3-14b-instructMistral Large (3)
mistral.mistral-large-3-675b-instructVoxtral Mini 3B 2507 ()
mistral.voxtral-mini-3b-2507Voxtral Small 24V 2507 ()
mistral.voxtral-small-24b-2507
- IA Moonshot
-
Kimi K2 Thinking ()
moonshot.kimi-k2-thinking
- NVIDIA
-
NVIDIA Nemotron Nano 12B v2 VL () BF16
nvidia.nemotron-nano-12b-v2NVIDIA Nemotron Nano 9B v2 ()
nvidia.nemotron-nano-9b-v2
Exemples de demandes
Format de sortie du schéma JSON
Les exemples suivants montrent comment utiliser le format de sortie du schéma JSON avec des sorties structurées.
API Converse
{ "messages": [ { "role": "user", "content": [ { "text": "Given the following unstructured data, extract it into the provided structure." }, { "text": "..." } ] } ], "outputConfig": { "textFormat": { "type": "json_schema", "structure": { "jsonSchema": { "schema": "{\"type\": \"object\", \"properties\": {\"title\": {\"type\": \"string\", \"description\": \"title\"}, \"summary\": {\"type\": \"string\", \"description\": \"summary\"}, \"next_steps\": {\"type\": \"string\", \"description\": \"next steps\"}}, \"required\": [\"title\", \"summary\", \"next_steps\"], \"additionalProperties\": false}", "name": "data_extraction", "description": "Extract structured data from unstructured text" } } } } }
InvokeModel (Claude anthropique)
{ "anthropic_version": "bedrock-2023-05-31", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Given the following unstructured data, extract it into the provided structure." }, { "type": "text", "text": "..." } ] } ], "max_tokens": 3000, "temperature": 1.0, "output_config": { "format": { "type": "json_schema", "schema": { "type": "object", "properties": { "title": { "type": "string", "description": "title" }, "summary": { "type": "string", "description": "summary" }, "next_steps": { "type": "string", "description": "next steps" } }, "required": [ "title", "summary", "next_steps" ], "additionalProperties": false } } } }
InvokeModel (Modèles à poids ouvert)
{ "messages": [ { "role": "user", "content": "Given the following unstructured data, extract it into the provided structure." }, { "role": "user", "content": "..." } ], "inferenceConfig": { "maxTokens": 3000, "temperature": 1.0 }, "response_format": { "json_schema": { "name": "summarizer", "schema": { "type": "object", "properties": { "title": { "type": "string", "description": "title" }, "summary": { "type": "string", "description": "summary" }, "next_steps": { "type": "string", "description": "next steps" } }, "required": [ "title", "summary", "next_steps" ], "additionalProperties": false } }, "type": "json_schema" } }
Utilisation stricte des outils
Les exemples suivants montrent comment utiliser le champ strict dans le cadre de l'utilisation d'outils.
API Converse
{ "messages": [ { "role": "user", "content": [ { "text": "What's the weather like in New York?" } ] } ], "toolConfig": { "tools": [ { "toolSpec": { "name": "get_weather", "description": "Get the current weather for a specified location", "strict": true, "inputSchema": { "json": { "type": "object", "properties": { "location": { "type": "string", "description": "The city and state, e.g. San Francisco, CA" }, "unit": { "type": "string", "enum": [ "fahrenheit", "celsius" ], "description": "The temperature unit to use" } }, "required": [ "location", "unit" ] } } } } ] } }
InvokeModel (Claude anthropique)
{ "anthropic_version": "bedrock-2023-05-31", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "What's the weather like in San Francisco?" } ] } ], "max_tokens": 3000, "temperature": 1.0, "tools": [ { "name": "get_weather", "description": "Get the current weather for a specified location", "strict": true, "input_schema": { "type": "object", "properties": { "location": { "type": "string", "description": "The city and state, e.g. San Francisco, CA" }, "unit": { "type": "string", "enum": [ "fahrenheit", "celsius" ], "description": "The temperature unit to use" } }, "required": [ "location", "unit" ], "additionalProperties": false } } ] }
InvokeModel (Modèles à poids ouvert)
{ "messages": [ { "role": "user", "content": "What's the weather like in San Francisco?" } ], "tools": [ { "type": "function", "function": { "name": "get_weather", "description": "Get the current weather for a specified location", "strict": true, "parameters": { "type": "object", "properties": { "location": { "type": "string", "description": "The city and state, e.g. San Francisco, CA" }, "unit": { "type": "string", "enum": [ "fahrenheit", "celsius" ], "description": "The temperature unit to use" } }, "required": [ "location", "unit" ] } } } ], "tool_choice": "auto", "max_tokens": 2000, "temperature": 1.0 }