Aller au contenu principal

Schemas d'outils

Apres avoir ecrit votre fonction d’outil, l’etape suivante est de creer un schema JSON qui explique a Claude quels arguments votre fonction attend et comment l’utiliser. Ce schema sert de documentation que Claude lit pour savoir quand et comment appeler vos outils.

Comprendre le JSON Schema

JSON Schema n’est pas specifique a l’IA ou aux appels d’outils — c’est une specification de validation de donnees largement utilisee depuis des annees. La communaute IA l’a adopte parce que c’est un moyen pratique de decrire les parametres d’une fonction et de valider les donnees.

La specification complete d’un outil comporte trois parties principales :

ProprieteRole
nameUn nom clair et descriptif pour votre outil (ex : "get_weather")
descriptionCe que l’outil fait, quand l’utiliser, et ce qu’il retourne
input_schemaLe schema JSON decrivant les arguments de la fonction

Ecrire des descriptions efficaces

La description de votre outil est cruciale pour aider Claude a comprendre quand l’utiliser. Quelques bonnes pratiques :

  • Visez 3-4 phrases expliquant ce que l’outil fait
  • Decrivez quand Claude devrait l’utiliser
  • Expliquez quel type de donnees il retourne
  • Fournissez des descriptions detaillees pour chaque argument

L’astuce : utiliser Claude pour generer les schemas

Plutot que d’ecrire les schemas JSON a la main, vous pouvez utiliser Claude lui-meme pour les generer. Voici la demarche :

  1. Copiez le code de votre fonction d’outil
  2. Demandez a Claude d’ecrire un schema JSON pour l’appel d’outil
  3. Incluez la documentation Anthropic sur l’utilisation d’outils comme contexte
  4. Laissez Claude generer un schema correctement formate

Le prompt pourrait ressembler a : “Ecris un schema JSON valide pour l’appel d’outils de cette fonction. Suis les bonnes pratiques listees dans la documentation jointe.”

Implementer le schema dans le code

Une fois le schema genere, copiez-le dans votre fichier de code. Voici un bon patron de nommage a suivre :

from datetime import datetime

def get_current_datetime(date_format="%Y-%m-%d %H:%M:%S"):
    if not date_format:
        raise ValueError("date_format cannot be empty")
    return datetime.now().strftime(date_format)

# Schema associe : meme nom + _schema
get_current_datetime_schema = {
    "name": "get_current_datetime",
    "description": "Returns the current date and time formatted according to the specified format",
    "input_schema": {
        "type": "object",
        "properties": {
            "date_format": {
                "type": "string",
                "description": "A string specifying the format of the returned datetime. Uses Python's strftime format codes.",
                "default": "%Y-%m-%d %H:%M:%S"
            }
        },
        "required": []
    }
}

La convention nom_de_fonction suivie de nom_de_fonction_schema permet de garder vos schemas organises et faciles a associer avec leurs fonctions correspondantes.

Ajouter la securite de typage

Pour un meilleur controle de types, importez et utilisez le type ToolParam de la bibliotheque Anthropic :

from anthropic.types import ToolParam

get_current_datetime_schema = ToolParam({
    "name": "get_current_datetime",
    "description": "Returns the current date and time formatted according to the specified format",
    # ... reste du schema
})

Bien que ce ne soit pas strictement necessaire au fonctionnement, cela previent les erreurs de typage quand vous utilisez le schema avec l’API de Claude et rend votre code plus robuste.

Exercice : Ecrivez le schema pour une fonction meteo

Soit la fonction suivante :

def get_weather(location, unit="celsius"):
    if not location:
        raise ValueError("location cannot be empty")
    # ... appel API meteo

Ecrivez le schema JSON correspondant. Reponse :

get_weather_schema = {
    "name": "get_weather",
    "description": "Retrieves the current weather for a given location. Use when the user asks about weather conditions. Returns temperature and conditions.",
    "input_schema": {
        "type": "object",
        "properties": {
            "location": {
                "type": "string",
                "description": "The city and country, e.g. 'Paris, France'"
            },
            "unit": {
                "type": "string",
                "description": "Temperature unit: 'celsius' or 'fahrenheit'",
                "default": "celsius",
                "enum": ["celsius", "fahrenheit"]
            }
        },
        "required": ["location"]
    }
}

Points importants :

  • location est dans required car il est obligatoire
  • unit a une valeur par defaut et un enum pour limiter les choix
  • La description de l’outil fait 3 phrases