Données structurées avec les outils
Sur cette page
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éthode | Comment | Quand |
|---|---|---|
| Sorties structurées | outputConfig.textFormat : la réponse elle-même est le JSON | Extraire ou produire des données, sans outil dans la conversation |
| Outil d’extraction | Un outil forcé dont les arguments sont les données | Une application qui utilise déjà des outils, ou un modèle sans sorties structurées |
Le déroulé
- Écrire le JSON Schema des données voulues.
- En faire le
inputSchemad’un outil. - Envoyer le texte à analyser avec cet outil.
- Forcer Claude à appeler l’outil avec
toolChoice. - 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.
toolChoiceforcé garantit l’appel ;"strict": Truegarantit 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
autoavec une consigne et une vérification.