Données structurées avec les outils
Mis à jour le 30 juillet 2026
Plus tôt dans ce cours, nous avons couvert l’extraction de données structurées avec le pré-remplissage de messages et les séquences d’arrêt. Cette approche fonctionne bien et est simple à mettre en place — mais elle reste un pari : on espère que le modèle respectera le format. Les outils offrent une extraction plus fiable : la méthode est plus complexe à implémenter, mais fournit une bien meilleure cohérence, car le format cesse d’être une consigne pour devenir une contrainte de l’API.
Pourquoi deux approches ?
Les outils nécessitent plus de configuration — un schéma à écrire, un paramètre à forcer. Avoir les deux techniques disponibles donne de la flexibilité : parfois l’approche rapide par prompt suffit — un script ponctuel, une exploration en notebook —, d’autres fois la fiabilité des outils est nécessaire — un pipeline de production qui parse la sortie sans relecture humaine. Connaître les deux, c’est choisir en connaissance de cause.
Comment ça marche
Le concept de base 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 correspondent exactement à la structure de données que vous voulez extraire. Claude « appelle » cet outil avec les données extraites comme arguments — et comme les arguments d’appel sont générés en conformité avec le schéma, la structure est garantie. La subtilité : l’outil n’a pas besoin d’exister. Aucune fonction derrière, aucune exécution — seuls ses arguments nous intéressent.
Le processus :
- Écrire un schéma JSON décrivant la structure de données voulue
- Créer un outil avec ce schéma comme spécification d’entrée
- Envoyer vos données et le schéma à Claude
- Forcer Claude à utiliser l’outil avec le paramètre
toolChoice - Extraire les données structurées des arguments de l’appel d’outil
Contrôler l’utilisation de l’outil
L’étape 4 est le verrou du dispositif. Sur Bedrock, toolChoice s’exprime ainsi :
# Claude decide (defaut)
{"toolChoice": {"auto": {}}}
# Claude doit utiliser un outil, au choix
{"toolChoice": {"any": {}}}
# Claude doit utiliser cet outil precis
{"toolChoice": {"tool": {"name": "article_details"}}}
Pour l’extraction de données structurées, utilisez presque toujours la troisième option : elle force l’appel de votre outil de structuration à chaque requête, sans texte d’accompagnement possible. Les deux premières gardent leur place dans les vraies boucles d’outils — auto pour les assistants, any quand répondre sans outil n’aurait pas de sens.
Exemple pratique
Extraire le titre, l’auteur et les sujets clés d’un article :
article_details_schema = {
"toolSpec": {
"name": "article_details",
"description": "Extrait les informations clés d'un article",
"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": "Liste des sujets clés mentionnés"
}
},
"required": ["title", "author", "topics"]
}
}
}
}
Lisez ce schéma comme un contrat de sortie : trois propriétés typées — dont un tableau pour les sujets —, toutes déclarées dans required : Claude ne pourra ni en omettre, ni en inventer d’autres. La réponse contiendra une partie ToolUse dont le champ input est exactement votre structure, déjà parsée en dictionnaire — pas de json.loads, pas de nettoyage.
Avantages
Le bilan de l’approche : plus fiable que l’extraction par prompt, une structure garantie correspondant au schéma, pas besoin de pré-remplissage ni de séquences d’arrêt, et une validation intégrée via le schéma de l’outil — les types et champs requis sont contraints à la génération.
Le compromis principal est la complexité : un schéma complet à écrire là où le pré-remplissage tenait en deux lignes. Mais quand vous avez besoin de sorties structurées cohérentes et fiables — dès qu’un programme consomme la sortie sans supervision —, les outils sont la voie à suivre. Et si l’écriture des schémas devient un frein, la prochaine leçon montre une astuce pour l’alléger radicalement.
Points clés à retenir
- L’astuce : un outil fictif dont les paramètres sont la structure cible — seuls ses arguments comptent
toolChoice: {"tool": {"name": ...}}force l’appel : plus de texte d’accompagnement possiblerequired+ types du schéma = validation à la génération, structure garantie- Les données arrivent déjà parsées dans le champ
inputde la partie ToolUse - Pré-remplissage pour l’exploration rapide ; outils pour la production qui exige la fiabilité