Chargement

Données structurées avec des outils

Leçon 308 min

Plus tôt dans ce cours, nous avons vu comment obtenir une sortie structurée de Claude en utilisant des pré-remplissages de messages et des séquences d'arrêt. Bien que cette approche fonctionne bien et soit facile à mettre en place, nous pouvons obtenir une sortie plus fiable en utilisant des outils. Cette méthode est plus complexe à mettre en œuvre, mais elle offre une meilleure cohérence lors de l'extraction de données structurées comme le JSON.

Pourquoi apprendre les deux approches ?

Vous vous demandez peut-être pourquoi nous n'avons pas commencé directement par les outils s'ils sont plus fiables. La réponse est simple : les outils nécessitent une configuration et une complexité nettement plus importantes. Disposer des deux techniques vous offre de la flexibilité - parfois vous voudrez l'approche rapide basée sur les invites, d'autres fois vous aurez besoin de la fiabilité qu'offrent les outils.

Comment fonctionne la sortie structurée basée sur les outils

Le concept de base est simple : 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 des données que vous souhaitez extraire. Claude « appelle » alors cet outil avec les données extraites comme arguments.

Voici le processus :

  1. Écrivez un schéma JSON qui décrit la structure des données que vous souhaitez
  2. Créez un outil avec ce schéma comme spécification d'entrée
  3. Envoyez vos données et le schéma de l'outil à Claude
  4. Forcez Claude à utiliser l'outil avec le paramètre toolChoice
  5. Extrayez les données structurées des arguments de l'appel d'outil

Le flux se présente ainsi : votre serveur envoie une invite demandant à Claude d'analyser des données et d'appeler un outil spécifique. Claude répond avec un message d'utilisation d'outils contenant les données JSON extraites. À ce stade, vous n'avez qu'à récupérer les données et à mettre fin à la conversation - aucun suivi n'est nécessaire.

Contrôler l'utilisation des outils

Lorsque vous utilisez des outils pour la sortie structurée, vous voulez garantir que Claude utilise votre outil d'extraction. Le paramètre toolChoice vous offre trois options :

  • {"toolChoice": {"auto": {}}} - Le modèle décide s'il a besoin d'utiliser un outil (par défaut)
  • {"toolChoice": {"any": {}}} - Le modèle doit utiliser un outil, mais peut choisir lequel
  • {"toolChoice": {"tool": {"name": "tool-name"}}} - Le modèle doit utiliser l'outil spécifié

Pour la sortie structurée, vous voudrez presque toujours la troisième option pour garantir que Claude utilise votre outil d'extraction.

Exemple pratique

Supposons que vous souhaitiez extraire le titre, l'auteur et les sujets clés d'un article. Tout d'abord, vous créeriez un schéma d'outil :

python
article_details_schema = {
    "toolSpec": {
        "name": "article_details",
        "description": "Extracts key information from an article",
        "inputSchema": {
            "json": {
                "type": "object",
                "properties": {
                    "title": {
                        "type": "string",
                        "description": "The title of the article"
                    },
                    "author": {
                        "type": "string", 
                        "description": "The author's name"
                    },
                    "topics": {
                        "type": "array",
                        "items": {"type": "string"},
                        "description": "List of key topics mentioned"
                    }
                },
                "required": ["title", "author", "topics"]
            }
        }
    }
}

Ensuite, vous appelleriez Claude avec vos données et le forceriez à utiliser l'outil. Notre assistant chat prend directement le nom de l'outil comme argument tool_choice, vous n'avez donc pas besoin de construire vous-même l'objet imbriqué toolChoice :

python
messages = []
add_user_message(messages, f"""
Analyze the article below and extract key data. Then call the article_details tool.

<article_text>
{article_text}
</article_text>
""")

result = chat(messages, tools=[article_details_schema], tool_choice="article_details")

Claude répondra avec un message d'utilisation d'outils contenant les données extraites dans le format exact que vous avez spécifié. Les arguments de l'appel d'outil contiendront vos données JSON structurées, prêtes à être utilisées dans votre application.

Avantages clés

  • Plus fiable que l'extraction basée sur les invites
  • Structure garantie correspondant à votre schéma
  • Pas besoin de pré-remplissages de messages ou de séquences d'arrêt
  • Validation intégrée grâce au schéma de l'outil

Le principal compromis est la complexité - vous devez écrire des schémas détaillés et gérer les réponses des outils. Mais lorsque vous avez besoin d'une sortie structurée cohérente et fiable, les outils sont la solution à privilégier.