Extraire des donnees structurees avec les outils
Quand vous avez besoin que Claude retourne des donnees dans un format precis (JSON, objets structures…), deux approches existent : les techniques basees sur le prompt (prefill + stop sequences) ou l’utilisation des outils. La seconde est plus fiable, meme si elle demande un peu plus de configuration.
Le principe
L’idee est detournee mais elegante : on definit un faux outil dont le schema JSON correspond exactement a la structure de donnees souhaitee. On force Claude a utiliser cet outil, et on recupere les donnees structurees dans les arguments qu’il fournit.
Pas besoin d’implementer reellement l’outil — on s’arrete des qu’on a les donnees.
Les etapes
- Ecrire un schema qui decrit la structure des donnees voulues
- Forcer Claude a utiliser l’outil via
tool_choice - Extraire les donnees depuis le bloc
tool_usede la reponse - Pas de suivi — on n’a pas besoin de renvoyer un resultat d’outil
Controler l’utilisation des outils avec tool_choice
Le parametre tool_choice permet de dicter le comportement de Claude :
| Valeur | Comportement |
|---|---|
{"type": "auto"} | Claude decide seul s’il utilise un outil (par defaut) |
{"type": "any"} | Claude doit utiliser un outil, mais choisit lequel |
{"type": "tool", "name": "NOM"} | Claude doit utiliser l’outil specifie |
Pour l’extraction de donnees structurees, on utilise la troisieme option pour garantir que Claude appelle notre schema.
Exemple pratique
Imaginons qu’on veuille extraire le titre, l’auteur et les points cles d’un article. On definit le schema :
article_summary_schema = {
"name": "article_summary",
"description": "Extracts structured data from articles",
"input_schema": {
"type": "object",
"properties": {
"title": {"type": "string"},
"author": {"type": "string"},
"key_insights": {
"type": "array",
"items": {"type": "string"}
}
}
}
}
Puis on appelle Claude en forcant l’utilisation de cet outil :
response = chat(
messages,
tools=[article_summary_schema],
tool_choice={"type": "tool", "name": "article_summary"}
)
Les donnees structurees se trouvent directement dans le champ input du bloc tool_use :
structured_data = response.content[0].input
# {'title': '...', 'author': '...', 'key_insights': ['...', '...']}
Quand utiliser quelle approche ?
| Critere | Prompt (prefill) | Outils |
|---|---|---|
| Simplicite | Plus simple a mettre en place | Plus de configuration |
| Fiabilite | Peut varier | Schema garanti |
| Cas d’usage | Prototypage rapide | Production |
En resume :
- Prompt-based : pour du prototypage rapide ou des structures simples
- Outils : quand vous avez besoin d’une fiabilite maximale et que le format doit etre strictement respecte
Les deux techniques sont complementaires et utiles selon le contexte. Pour de la production, les outils sont generalement le meilleur choix.