← Retour au blog
Analyse

Après l'ouverture des sorties structurées Claude sur Bedrock le 20 octobre 2026, quel bloc de texte porte le JSON de Haiku 5.5 ?

Publié le 21/10/2026Mis à jour le 21/10/2026Environ 12 minBoîte à outils JSON

Le fil de cette note

Au 21/10/2026, AWS a annoncé le 20/10/2026 que Claude sur Amazon Bedrock peut utiliser des sorties structurées. L'exemple de classement du guide met le modèle à global.anthropic.claude-haiku-5-5. Le JSON n'est pas le premier bloc de content. C'est le bloc dont type est text, et seulement après que stop_reason vaut end_turn. Ne pas parser un texte coupé par max_tokens. Pourquoi un schéma local ferme encore l'objet : pourquoi l'IA aime JSON. La note du 12 octobre décrit Bedrock avant cette capacité : pourquoi Haiku 5.5 valide encore le JSON.

Classer un ticket avec Haiku 5.5 : catégorie, priorité, sentiment, escalade. Bedrock peut maintenant générer selon le schéma envoyé. La page dit qu'aucune validation supplémentaire n'est requise. Les mêmes pages demandent de lire stop_reason d'abord et listent des mots-clés qui renvoient 400 tout de suite. Une étape manquée range un bloc de pensée ou une chaîne à moitié écrite dans la base.

Ce que le 20 octobre ouvre vraiment

  • Deux points d'accès : bedrock-runtime et bedrock-mantle. Sur runtime : Converse, InvokeModel ou l'API Messages d'Anthropic. Sur mantle, l'API Messages, à une URL de la forme https://bedrock-mantle.{region}.api.aws/anthropic/v1/messages.
  • Deux mécanismes : un format de sortie JSON Schema, et strict: true sur un outil. Séparément ou dans la même requête.
  • Modèles : le guide cite Sonnet, Opus, Haiku, Fable et Mythos, et dit que le support varie selon le modèle et le point d'accès. L'exemple Haiku 5.5 utilise global.anthropic.claude-haiku-5-5.
  • Pas tous les profils : sur le profil Inde in.anthropic, les sorties structurées ne sont pas prises en charge pour Claude Haiku 4.5. Cette page ne liste pas chaque profil Haiku 5.5.

Au 12/10/2026, les notes de version Claude disaient qu'Amazon Bedrock n'avait pas de structured outputs pour Claude Haiku 5.5. Relues le 21/10/2026, cette phrase n'est plus dans la puce du 7 octobre. Suivre l'exemple Haiku 5.5 du guide AWS.

Une phrase. Haiku 5.5 sur Bedrock peut rendre du JSON structuré. Confirmer end_turn, puis lire le bloc text.

Le JSON est dans le bloc text, pas le premier

Quand stop_reason vaut end_turn, l'exemple prend le bloc content dont type est text, puis JSON.parse. Pour max_tokens, augmenter la limite et réessayer. Les notes disent encore que la pensée adaptative de Haiku 5.5 est activée par défaut, donc une réponse peut commencer par thinking. L'exemple ne lit pas content[0]. Les mêmes notes disent que temperature, top_p et top_k peuvent renvoyer 400. Un exemple InvokeModel générique met "temperature": 1.0. L'exemple Haiku 5.5 non. Ne pas copier ces paramètres d'échantillonnage.

InvokeModel et Converse ne portent pas le même JSON de schéma

InvokeModel place le schéma en objet dans output_config.format.schema, pas en chaîne, avec additionalProperties: false. Converse utilise outputConfig.textFormat. Dans l'exemple, structure.jsonSchema.schema est une chaîne, avec name et description. La première compilation peut prendre quelques minutes. Une grammaire compilée est mise en cache 24 heures pour le même compte et le même schéma, chiffrée avec des clés gérées par AWS. Un mot-clé non pris en charge renvoie 400 tout de suite.

Les mots-clés hors sous-ensemble renvoient 400

Le sous-ensemble de JSON Schema Draft 2020-12 comprend les types de base, enum limité aux chaînes, nombres, booléens ou null, const, anyOf, allOf (with limitations, non détaillées sur cette page), $ref, $def et definitions internes. Les format de chaîne listés : date-time, time, date, duration, email, hostname, uri, ipv4, ipv6, uuid. minItems vaut seulement 0 ou 1. Absents : schémas récursifs, $ref externes, minimum, maximum, multipleOf, minLength, maxLength, et additionalProperties autre que false.

Le mot de référence sur cette page est $def, pas le $defs plus courant. Un brouillon local en $defs n'est pas accepté par hypothèse. Les exemples InvokeModel mettent additionalProperties: false. L'exemple d'outil strict de Converse omet le champ. L'omission n'est pas expliquée. Citations et sorties structurées ensemble renvoient 400 sur les modèles Anthropic. « Aucune validation supplémentaire » vise la syntaxe et les champs requis. Les bornes hors sous-ensemble ne sont pas tenues.

Les outils strict contraignent l'entrée

Le JSON final et l'entrée d'outil sont deux contrats. L'exemple mantle met strict: true sur get_weather, unit vaut celsius ou fahrenheit, et additionalProperties vaut false. Le modèle rend un bloc tool_use. L'entrée est input. InvokeModel place les outils strict dans tools. Converse les place sur toolConfig.tools[].toolSpec, le schéma en objet dans inputSchema.json.

Vérifier dans la boîte à outils

Les deux schémas sont locaux. Le premier ne vérifie que la couche format : schema doit être un objet, et additionalProperties sur cet objet doit valoir false. Un minimum écrit sur l'objet schéma lui-même échoue. Un minimum sous properties n'est pas pris ici ; le parcourir avant l'envoi. Le second vérifie le ticket. Aucun n'est un schéma officiel Bedrock.

{
  "format_schema": {"type":"object","properties":{"type":{"const":"json_schema"},"schema":{"type":"object","properties":{"type":{"const":"object"},"additionalProperties":{"const":false}},"required":["type","additionalProperties"],"not":{"required":["minimum"]}}},"required":["type","schema"]},
  "ticket_schema": {"type":"object","properties":{"category":{"type":"string","enum":["billing","technical","account","sales","other"]},"priority":{"type":"string","enum":["low","medium","high","urgent"]},"escalate":{"type":"boolean"}},"required":["category","priority","escalate"],"additionalProperties":false},
  "ok_format": {"type":"json_schema","schema":{"type":"object","additionalProperties":false}},
  "schema_as_string": {"type":"json_schema","schema":"{\"type\":\"object\",\"additionalProperties\":false}"},
  "ok_ticket": {"category":"technical","priority":"urgent","escalate":true},
  "bad_priority": {"category":"technical","priority":"2","escalate":true}
}
  1. Coller les quatre exemples dans le formatage JSON. La valeur de schema_as_string.schema est une chaîne.
  2. Avec JSON → Schema, partir de ok_ticket, puis ajouter enum et additionalProperties: false. Ne pas mettre de bornes dans le schéma envoyé à Bedrock.
  3. Dans la validation de Schema, ok_format passe format_schema. schema_as_string échoue.
  4. ok_ticket passe ticket_schema. bad_priority échoue. Les entrées d'outil vont aux appels de fonction, l'objet final à la sortie structurée.

Questions fréquentes

Si stop_reason vaut end_turn, peut-on sauter la validation ?

Cette phrase vise la syntaxe. Les bornes hors sous-ensemble ne sont pas tenues. Après end_turn, vérifier encore les énumérations et les champs métier.

Le premier bloc de content est-il le JSON ?

Pas toujours. Un bloc de pensée peut venir d'abord. Lire le bloc dont type est text.

Si le schéma contient minimum, Bedrock impose-t-il la borne ?

Non. minimum, maximum, minLength et maxLength renvoient 400. Garder les bornes en local.

Converse et InvokeModel portent-ils le schéma comme le même JSON ?

Non. InvokeModel veut un objet. L'exemple Converse met le schéma dans une chaîne.

Est-ce la même note que celle sur Haiku 5.5 ?

Non. Celle-là a été vérifiée le 12/10/2026. Celle-ci décrit l'exemple Haiku 5.5 du guide Bedrock après le 20/10/2026.

En bref

Au 21/10/2026, les sorties structurées Bedrock ont été annoncées le 20/10/2026. L'exemple Haiku 5.5 utilise global.anthropic.claude-haiku-5-5 et place un objet dans output_config.format.schema. Lire le bloc text seulement si stop_reason vaut end_turn. minimum et un additionalProperties autre que false renvoient 400. Dans l'exemple Converse, le schéma est une chaîne. Ensuite, refuser un schéma-chaîne et une énumération hors liste, puis choisir runtime ou mantle.