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 :
| Propriete | Role |
|---|---|
name | Un nom clair et descriptif pour votre outil (ex : "get_weather") |
description | Ce que l’outil fait, quand l’utiliser, et ce qu’il retourne |
input_schema | Le 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 :
- Copiez le code de votre fonction d’outil
- Demandez a Claude d’ecrire un schema JSON pour l’appel d’outil
- Incluez la documentation Anthropic sur l’utilisation d’outils comme contexte
- 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 :
locationest dansrequiredcar il est obligatoireunita une valeur par defaut et unenumpour limiter les choix- La description de l’outil fait 3 phrases