Aller au contenu principal

Extraire des données structurées avec les outils

Mis à jour le 30 juillet 2026

Quand vous avez besoin que Claude retourne des données dans un format précis (JSON, objets structurés…), deux approches existent : les techniques basées sur le prompt (prefill + stop sequences) ou l’utilisation des outils. La seconde est plus fiable, même si elle demande un peu plus de configuration.

Le principe

L’astuce consiste à détourner le mécanisme des outils de son usage habituel. Un outil sert normalement à faire agir Claude sur le monde extérieur ; ici, on n’exécute rien du tout — on se sert seulement du fait que le schéma d’un outil est un contrat strict. Claude remplit ce contrat pour appeler l’outil, et c’est ce remplissage qui nous intéresse.

L’idée est détournée mais élégante : on définit un faux outil dont le schéma JSON correspond exactement à la structure de données souhaitée. On force Claude à utiliser cet outil, et on récupère les données structurées dans les arguments qu’il fournit.

Pas besoin d’implémenter réellement l’outil — on s’arrête dès qu’on a les données.

Les étapes

  1. Écrire un schéma qui décrit la structure des données voulues
  2. Forcer Claude à utiliser l’outil via tool_choice
  3. Extraire les données depuis le bloc tool_use de la réponse
  4. Pas de suivi — on n’a pas besoin de renvoyer un résultat d’outil

Contrôler l’utilisation des outils avec tool_choice

tool_choice est ce qui transforme l’astuce en garantie. En mode automatique, Claude décide seul d’utiliser l’outil ou de répondre en texte — et le jour où il choisit le texte, votre code d’extraction échoue. En forçant l’outil par son nom, la question ne se pose plus.

ValeurComportement
{"type": "auto"}Claude décide seul s’il utilise un outil (par défaut)
{"type": "any"}Claude doit utiliser un outil, mais choisit lequel
{"type": "tool", "name": "NOM"}Claude doit utiliser l’outil spécifié

Pour l’extraction de données structurées, on utilise la troisième option pour garantir que Claude appelle notre schéma.

Exemple pratique

Imaginons qu’on veuille extraire le titre, l’auteur et les points clés d’un article. On définit le schéma :

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 forçant l’utilisation de cet outil :

response = chat(
    messages,
    tools=[article_summary_schema],
    tool_choice={"type": "tool", "name": "article_summary"}
)

Les données structurées 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 ?

CritèrePrompt (prefill)Outils
SimplicitéPlus simple à mettre en placePlus de configuration
FiabilitéPeut varierSchéma garanti
Cas d’usagePrototypage rapideProduction

En résumé :

  • Prompt-based : pour du prototypage rapide ou des structures simples
  • Outils : quand vous avez besoin d’une fiabilité maximale et que le format doit être strictement respecté

Le critère de choix se résume à une question : que se passe-t-il si le format n’est pas respecté ? Si la réponse est « je relance », le pré-remplissage suffit et coûte moins de configuration. Si la réponse est « ça casse en aval », prenez les outils — la garantie de schéma vaut largement les quelques lignes supplémentaires. Les deux techniques sont complémentaires et utiles selon le contexte.