Les sorties structurées vous permettent de contraindre la sortie générée d'un modèle Claude à se conformer exactement à un schéma JSON spécifique. Cela permet de s'assurer que les réponses de vos modèles Claude sont toujours dans le format précis requis pour les applications, bases de données et pipelines de traitement en aval.
Les sorties structurées offrent deux fonctionnalités complémentaires que vous pouvez utiliser indépendamment ou ensemble dans la même requête :
- Sorties JSON (
output_config.format) : contraint la réponse textuelle du modèle à un objet JSON correspondant à un schéma que vous fournissez. Utilisez-le lorsque vous devez extraire des données structurées à partir de texte, générer des rapports structurés ou mettre en forme des réponses d'API. - Utilisation stricte des outils (
tools[].strict) : garantit que les arguments que le modèle transmet à un outil correspondent à lainput_schemade l'outil. Utilisez cette option lorsque vous avez besoin d'appels de fonction avec sûreté de typage dans les workflows agentiques.
Pour en savoir plus, consultez la documentation d'Anthropic Building with Claude: Structured Outputs (Créer avec Claude : sorties structurées) et Strict tool use (Utilisation stricte des outils).
Modèles Anthropic Claude compatibles
Gemini Enterprise Agent Platform est compatible avec les sorties structurées pour les modèles Anthropic Claude suivants :
- Claude Opus 4.7
- Claude Sonnet 4.6
- Claude Opus 4.6
- (Bientôt disponible) Claude Opus 4.5
- (Bientôt disponible) Claude Sonnet 4.5
- (Bientôt disponible) Claude Haiku 4.5
Contrôler l'accès aux sorties structurées
Par défaut, les sorties structurées sont désactivées par la contrainte de règle d'administration constraints/vertexai.allowedPartnerModelFeatures. Pour activer les sorties structurées, vous devez configurer cette contrainte afin d'autoriser explicitement la fonctionnalité structured_outputs.
Vous pouvez également configurer la contrainte de règle d'administration constraints/vertexai.allowedModels pour limiter l'accès aux modèles Claude.
Pour obtenir des instructions détaillées sur la configuration des contraintes de règles d'administration, consultez Contrôler l'accès aux modèles Model Garden.
Envoyer une requête de sortie structurée
Pour demander une sortie JSON, envoyez une requête POST au point de terminaison du modèle d'éditeur et incluez le paramètre output_config dans le corps de votre requête. Le paramètre output_config spécifie le schéma JSON auquel la réponse du modèle doit se conformer.
REST
L'exemple suivant montre comment envoyer une requête à l'API Agent Platform pour extraire des informations de contact structurées à partir d'un e-mail non structuré. La réponse est limitée à un objet JSON avec les champs name, email, plan_interest et demo_requested.
Avant d'utiliser les données de requête, effectuez les remplacements suivants :
- LOCATION : région compatible avec les modèles Anthropic Claude. Pour utiliser le point de terminaison mondial, consultez Spécifier le point de terminaison mondial.
- MODEL : modèle Claude compatible, par exemple
claude-opus-4-7. - ROLE : rôle associé à un message. Vous pouvez spécifier
userouassistant. Le premier message doit utiliser le rôleuser. Les modèles Claude fonctionnent avec des toursuseretassistantalternés. Si le message final utilise le rôleassistant, le contenu de la réponse continue immédiatement à partir du contenu de ce message. Cela vous permet de limiter une partie de la réponse du modèle. - CONTENT : contenu du message
userouassistant(du texte, par exemple). Exemple :Extract the key information from this email: John Smith (john@example.com) is interested in our Enterprise plan and wants to schedule a demo for next Tuesday at 2pm.. - MAX_TOKENS : nombre maximal de jetons pouvant être générés dans la réponse. Un jeton correspond environ à 3,5 caractères. 100 jetons correspondent environ à 60-80 mots.
Spécifiez une valeur inférieure pour obtenir des réponses plus courtes et une valeur supérieure pour des réponses potentiellement plus longues.
- STREAM : valeur booléenne qui spécifie si la réponse est diffusée ou non. Définissez la valeur sur
truepour diffuser la réponse et surfalsepour la renvoyer en une fois. Les sorties structurées sont généralement renvoyées avecfalse.
L'exemple utilise les champs de sortie structurée suivants. Pour en savoir plus sur chaque champ, consultez la section Champs de requête.
output_config: bloc de configuration de premier niveau qui contrôle la structure de la réponse du modèle.output_config.format.type: définissez surjson_schemapour limiter la réponse à un objet JSON conforme au schéma fourni.output_config.format.schema: schéma JSON qui définit la structure requise de la réponse du modèle. Le schéma doit être conforme au sous-ensemble de schéma JSON pris en charge.
Méthode HTTP et URL :
POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/anthropic/models/MODEL:rawPredict
Corps JSON de la requête :
{
"anthropic_version": "vertex-2023-10-16",
"messages": [
{
"role": "ROLE",
"content": "CONTENT"
}
],
"max_tokens": MAX_TOKENS,
"stream": STREAM,
"output_config": {
"format": {
"type": "json_schema",
"schema": {
"type": "object",
"properties": {
"name": {"type": "string"},
"email": {"type": "string"},
"plan_interest": {"type": "string"},
"demo_requested": {"type": "boolean"}
},
"required": ["name", "email", "plan_interest", "demo_requested"],
"additionalProperties": false
}
}
}
}
Pour envoyer votre requête, choisissez l'une des options suivantes :
curl
Enregistrez le corps de la requête dans un fichier nommé request.json, puis exécutez la commande suivante :
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/anthropic/models/MODEL:rawPredict"
PowerShell
Enregistrez le corps de la requête dans un fichier nommé request.json, puis exécutez la commande suivante :
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/anthropic/models/MODEL:rawPredict" | Select-Object -Expand Content
Vous devriez recevoir une réponse JSON semblable à la suivante. Le champ text du bloc content contient une chaîne JSON conforme au schéma que vous avez spécifié dans output_config.
Champs des demandes
Les champs suivants sont spécifiques aux sorties JSON. Pour en savoir plus sur les autres champs de requête, consultez la documentation de référence de l'API Claude Messages.
output_config: bloc de configuration de premier niveau qui contrôle la structure de la réponse du modèle.output_config.format: définition du format de sortie. Seul le typejson_schemaest accepté.output_config.format.type: type de format de sortie à appliquer. Définissez cette valeur surjson_schemapour limiter la réponse à un objet JSON.output_config.format.schema: schéma JSON qui définit la structure requise de la réponse du modèle. Les sorties structurées sont compatibles avec le schéma JSON standard, mais avec certaines limites. Par exemple,additionalPropertiesdoit être défini surfalsepour les objets, et les contraintes numériques ou de longueur de chaîne ne sont pas prises en charge. Pour obtenir la liste complète des fonctionnalités compatibles et non compatibles, consultez la documentation d'Anthropic sur les limitations du schéma JSON. Dans le schéma, vous spécifiez généralement les éléments suivants :type: type JSON de la valeur à ce niveau (le plus souventobjectpour le schéma racine).properties: carte des noms de champs et de leurs définitions de type, qui décrivent chaque champ que le modèle doit renvoyer.required: liste des noms de propriétés que le modèle doit inclure dans sa réponse.additionalProperties: valeur booléenne qui, lorsqu'elle est définie surfalse, empêche le modèle d'inclure des champs qui ne sont pas déclarés dansproperties.
Utiliser strictement les outils
L'utilisation stricte des outils garantit que les arguments que le modèle transmet à un outil correspondent à son input_schema. Sans le mode strict, le modèle peut appeler un outil avec des arguments mal typés (par exemple, "2" au lieu de 2) ou omettre des champs obligatoires, ce qui peut interrompre vos fonctions en aval et nécessiter une logique de réessai. Lorsque le mode strict est activé, l'API utilise un échantillonnage contraint par la grammaire pour s'assurer que :
- L'outil
namefait toujours partie de ceux que vous avez fournis. - L'outil
inputrespecte toujours leinput_schemade l'outil.
Utilisez l'utilisation stricte des outils lorsque vous devez valider les paramètres des outils, créer des workflows agentiques, assurer des appels de fonction de type sécurisé ou gérer des outils complexes avec des propriétés imbriquées.
Pour activer l'utilisation stricte des outils, définissez "strict": true comme champ de premier niveau dans votre définition d'outil, à côté de name, description et input_schema.
REST
L'exemple suivant montre comment envoyer une requête à l'API Agent Platform qui définit un outil get_weather strict. Le modèle est garanti d'appeler l'outil avec une chaîne location et un unit facultatif qui est soit celsius, soit fahrenheit.
Avant d'utiliser les données de requête, effectuez les remplacements suivants :
- LOCATION : région compatible avec les modèles Anthropic Claude. Pour utiliser le point de terminaison mondial, consultez Spécifier le point de terminaison mondial.
- MODEL : modèle Claude compatible, par exemple
claude-opus-4-7. - ROLE : rôle associé à un message. Le premier message doit utiliser le rôle
user. - CONTENT : contenu du message
userouassistant(du texte, par exemple). Exemple :What is the weather in San Francisco?. - MAX_TOKENS : nombre maximal de jetons pouvant être générés dans la réponse. Un jeton correspond environ à 3,5 caractères. 100 jetons correspondent environ à 60-80 mots.
Spécifiez une valeur inférieure pour obtenir des réponses plus courtes et une valeur supérieure pour des réponses potentiellement plus longues.
- STREAM : valeur booléenne qui spécifie si la réponse est diffusée ou non. Définissez la valeur sur
truepour diffuser la réponse et surfalsepour la renvoyer en une fois.
L'exemple utilise les champs d'utilisation stricte des outils suivants. Pour en savoir plus sur chaque champ, consultez la section Champs d'utilisation stricte des outils.
tools[].strict: valeur booléenne qui, lorsqu'elle est définie surtrue, active l'échantillonnage contraint par la grammaire pour l'outil. Le modèle est garanti d'appeler l'outil avec des arguments correspondant àinput_schema.tools[].input_schema: schéma JSON qui définit les arguments que le modèle peut transmettre à l'outil. Lorsquestrictest défini surtrue, le schéma doit être conforme au même sous-ensemble de schéma JSON compatible que le schémaoutput_configpour les sorties JSON.
Méthode HTTP et URL :
POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/anthropic/models/MODEL:rawPredict
Corps JSON de la requête :
{
"anthropic_version": "vertex-2023-10-16",
"messages": [
{
"role": "ROLE",
"content": "CONTENT"
}
],
"max_tokens": MAX_TOKENS,
"stream": STREAM,
"tools": [
{
"name": "get_weather",
"description": "Get the current weather in a given location",
"strict": true,
"input_schema": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city and state, for example San Francisco, CA"
},
"unit": {
"type": "string",
"enum": ["celsius", "fahrenheit"]
}
},
"required": ["location"],
"additionalProperties": false
}
}
]
}
Pour envoyer votre requête, choisissez l'une des options suivantes :
curl
Enregistrez le corps de la requête dans un fichier nommé request.json, puis exécutez la commande suivante :
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/anthropic/models/MODEL:rawPredict"
PowerShell
Enregistrez le corps de la requête dans un fichier nommé request.json, puis exécutez la commande suivante :
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/anthropic/models/MODEL:rawPredict" | Select-Object -Expand Content
Vous devriez recevoir une réponse JSON semblable à la suivante. Le bloc de contenu tool_use contient un champ input dont les clés et les types de valeurs correspondent forcément à input_schema de l'outil.
Champs d'utilisation stricte des outils
Les champs suivants sont spécifiques à l'utilisation stricte des outils. Pour en savoir plus sur les autres champs de définition d'outil, consultez la documentation Définir des outils d'Anthropic.
tools[].strict: valeur booléenne qui, lorsqu'elle est définie surtrue, active l'échantillonnage contraint par la grammaire pour l'outil. Lorsquestrictest défini surtrue, l'entrée d'outil du modèle est limitée pour correspondre au schéma deinput_schema. La valeur par défaut estfalse.tools[].input_schema: schéma JSON qui définit les arguments que le modèle peut transmettre à l'outil. Lorsquestrictest défini surtrue, le schéma doit être conforme au même sous-ensemble de schéma JSON que celui utilisé par les sorties JSON. En particulier, vous devez :- Définissez
additionalPropertiessurfalsepour chaque objet du schéma. - Listez chaque propriété du tableau
required.
Pour obtenir la liste complète des fonctionnalités compatibles et non compatibles, consultez la documentation d'Anthropic sur les limites du schéma JSON.
- Définissez