Aller au contenu principal
Leçon 31 sur 67 · Claude sur Amazon Bedrock

Données structurées avec les outils

Leçon 31 sur 67 Mis à jour le 5 novembre 2026 Développeur
Sur cette page
  1. Deux méthodes pour un JSON fiable
  2. Le déroulé
  3. Un exemple : les détails d’un article
  4. Quand le choix forcé n’est pas permis
  5. À vous de jouer
  6. Points clés à retenir

Les outils servent aussi à autre chose qu’agir : extraire des données structurées. L’idée est un détournement astucieux. Au lieu de demander à Claude de formater sa réponse en JSON, vous créez un outil dont les paramètres d’entrée ont exactement la structure voulue. Claude « appelle » cet outil avec les données extraites en arguments, et vous gardez les arguments. L’outil n’a même pas besoin d’exister : aucune fonction derrière, aucune exécution.

Deux méthodes pour un JSON fiable

Le cours officiel présente cette technique comme l’alternative fiable au pré-remplissage avec séquences d’arrêt, que Haiku 5.5 refuse. Depuis, Bedrock propose aussi les sorties structurées de la leçon 10. Les deux méthodes ont leur place :

MéthodeCommentQuand
Sorties structuréesoutputConfig.textFormat : la réponse elle-même est le JSONExtraire ou produire des données, sans outil dans la conversation
Outil d’extractionUn outil forcé dont les arguments sont les donnéesUne application qui utilise déjà des outils, ou un modèle sans sorties structurées

Le déroulé

Extraire des données avec un outil Quatre étapes : le schéma des données voulues, un outil forcé par toolChoice et marqué strict, un bloc toolUse dont les arguments sont les données, et la fin de l'échange, sans résultat à renvoyer. DONNÉES STRUCTURÉES Extraire des données avec un outil 1 Schéma les données voulues 2 Outil forcé toolChoice et strict 3 toolUse les données en arguments 4 Fin aucun résultat à renvoyer Sans outil, les sorties structurées de la leçon 10 font le même travail.
D'après la leçon « Structured data with tools » (Claude Academy, Claude with Amazon Bedrock) et la documentation AWS.
  1. Écrire le JSON Schema des données voulues.
  2. En faire le inputSchema d’un outil.
  3. Envoyer le texte à analyser avec cet outil.
  4. Forcer Claude à appeler l’outil avec toolChoice.
  5. Lire les données dans les arguments du bloc toolUse, et s’arrêter là : pas de résultat à renvoyer.

Un exemple : les détails d’un article

article_details_schema = {
    "toolSpec": {
        "name": "article_details",
        "description": "Enregistre les informations clés extraites d'un article : titre, auteur et sujets abordés.",
        "strict": True,
        "inputSchema": {
            "json": {
                "type": "object",
                "properties": {
                    "title": {"type": "string", "description": "Le titre de l'article."},
                    "author": {"type": "string", "description": "Le nom de l'auteur."},
                    "topics": {
                        "type": "array",
                        "items": {"type": "string"},
                        "description": "Les principaux sujets abordés.",
                    },
                },
                "required": ["title", "author", "topics"],
                "additionalProperties": False,
            }
        },
    }
}

messages = []
add_user_message(messages, f"""Analyse l'article ci-dessous et extrais ses informations clés, puis appelle l'outil article_details.

<article>
{article_text}
</article>""")

result = chat(messages, tools=[article_details_schema], tool_choice="article_details")
details = next(part["toolUse"]["input"] for part in result["parts"] if "toolUse" in part)
print(details["title"], details["topics"])

tool_choice="article_details" force l’appel : la réponse est un bloc toolUse, sans texte autour. "strict": True garantit que les arguments respectent le schéma, avec les mêmes règles que les sorties structurées, dont "additionalProperties": False sur chaque objet. Sans strict, Claude suit le schéma de très près, mais sans garantie formelle.

Quand le choix forcé n’est pas permis

Le choix d’outil forcé dépend du modèle. Haiku 5.5 l’accepte ; selon la documentation AWS, Claude Opus 5.5, Fable 5.1 et Mythos 5.1 le refusent, et la fiche de Sonnet 5.5 le limite à auto. Sur ces modèles, deux options :

  • utiliser les sorties structurées de la leçon 10, qui ne demandent aucun outil ;
  • laisser toolChoice à auto, garder "strict": True, et dire clairement dans le prompt d’appeler l’outil, en vérifiant dans votre code qu’il a bien été appelé.

À vous de jouer

Deux méthodes, un article. Extrayez le titre, l’auteur et les sujets d’un même article avec l’outil article_details, puis avec outputConfig et le même schéma. Comparez le code nécessaire et les résultats. Ajoutez ensuite un champ date_publication aux deux versions.

Sources officielles : Structured data with tools (Claude Academy) · Get validated JSON results from models et Use a tool to complete an Amazon Bedrock model response (documentation AWS)

Points clés à retenir

  • Un outil d’extraction reçoit les données en arguments ; aucune fonction ne s’exécute.
  • toolChoice forcé garantit l’appel ; "strict": True garantit le respect du schéma.
  • Les sorties structurées de la leçon 10 font le même travail sans outil.
  • Sur les modèles qui refusent le choix forcé, passez par les sorties structurées, ou par auto avec une consigne et une vérification.