

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
<a name="structured-output"></a>

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
<a name="structured-output-benefits"></a>

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
<a name="structured-output-how-it-works"></a>

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
<a name="structured-output-json-schema"></a>

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
<a name="structured-output-strict-tool-use"></a>

Ajoutez l'`strict: true`indicateur 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 le cadre d'une même demande. Reportez-vous à la [documentation de l'API Bedrock](https://docs.aws.amazon.com/bedrock/latest/APIReference/welcome.html) pour plus de détails.

### Flux de travail des demandes
<a name="structured-output-request-workflow"></a>

Ce qui suit décrit comment Amazon Bedrock traite les demandes avec des sorties structurées :

1. **Demande initiale** — Vous incluez soit un schéma JSON via le `response_format` paramètre `outputConfig.textFormat``output_config.format`,, soit une définition d'outil avec l'`strict: true`indicateur dans votre demande d'inférence.

1. **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.

1. **Première compilation** : pour les nouveaux schémas, Amazon Bedrock compile la grammaire, ce qui peut prendre quelques minutes.

1. **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.

1. **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.

1. **Réponse** — Vous recevez des réponses d'inférence standard respectant strictement le schéma.

## Fonctionnalités prises en charge APIs
<a name="structured-output-supported-apis"></a>

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
<a name="structured-output-supported-models"></a>

Pour savoir quels modèles prennent en charge les sorties structurées, consultez la section [Modèles en un coup d'œil](model-cards.md) et sélectionnez le modèle qui vous intéresse.

## Exemples de demandes
<a name="structured-output-examples"></a>

### Format de sortie du schéma JSON
<a name="structured-output-json-schema-examples"></a>

Les exemples suivants montrent comment utiliser le format de sortie du schéma JSON avec des sorties structurées.

#### API Converse
<a name="json-schema-converse"></a>

##### Voir un exemple
<a name="w2aac15c32c35c13b3b5b3b1"></a>

```
{
  "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)
<a name="json-schema-invokemodel-claude"></a>

##### Voir un exemple
<a name="w2aac15c32c35c13b3b7b3b1"></a>

```
{
  "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)
<a name="json-schema-invokemodel-openweight"></a>

##### Voir un exemple
<a name="w2aac15c32c35c13b3b9b3b1"></a>

```
{
  "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
<a name="structured-output-strict-tool-examples"></a>

Les exemples suivants montrent comment utiliser le champ strict dans le cadre de l'utilisation d'outils.

#### API Converse
<a name="strict-tool-converse"></a>

##### Voir un exemple
<a name="w2aac15c32c35c13b5b5b3b1"></a>

```
{
  "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)
<a name="strict-tool-invokemodel-claude"></a>

##### Voir un exemple
<a name="w2aac15c32c35c13b5b7b3b1"></a>

```
{
  "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)
<a name="strict-tool-invokemodel-openweight"></a>

##### Voir un exemple
<a name="w2aac15c32c35c13b5b9b3b1"></a>

```
{
  "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
}
```