Aller au contenu principal

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

  1. Ecrire un schema qui decrit la structure des donnees voulues
  2. Forcer Claude a utiliser l’outil via tool_choice
  3. Extraire les donnees depuis le bloc tool_use de la reponse
  4. 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 :

ValeurComportement
{"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 ?

CriterePrompt (prefill)Outils
SimplicitePlus simple a mettre en placePlus de configuration
FiabilitePeut varierSchema garanti
Cas d’usagePrototypage rapideProduction

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.