Fonctions outils
Sur cette page
Construire des outils pour Claude oblige à résoudre des problèmes qui ne sautent pas aux yeux. Prenez le projet de la section : un assistant à qui l’on dit « rappelle-moi mon rendez-vous chez le médecin dans 100 jours ». Trois manques apparaissent aussitôt.
Trois manques, trois outils
- Claude peut connaître la date du jour, mais pas l’heure exacte.
- Claude ne fait pas toujours bien l’arithmétique des dates, surtout loin dans le futur.
- Claude ne sait pas poser un rappel : il produit du texte, il n’agit pas.
D’où trois outils :
get_current_datetime: donner la date et l’heure actuelles.add_duration_to_datetime: ajouter une durée à une date.set_reminder: enregistrer un rappel.
Aucun ne traite seul une vraie demande ; ensemble, ils couvrent tout le parcours : savoir quand on est, calculer l’échéance, agir. On conçoit rarement un outil isolé : on conçoit un jeu d’outils que Claude composera.
Écrire une fonction outil
Une fonction outil est une fonction Python ordinaire, exécutée quand Claude décide qu’il a besoin d’elle. Ce qui change, c’est son utilisateur : un modèle, qui ne connaîtra d’elle que son nom, ses paramètres et ses messages d’erreur. Trois bonnes pratiques, données par le cours officiel :
- des noms d’arguments descriptifs ;
- des entrées validées, avec une erreur levée si la validation échoue ;
- des messages d’erreur utiles, car Claude réessaiera après une erreur.
La troisième règle change la nature des erreurs : ce ne sont plus des impasses de débogage, mais des consignes de correction adressées au modèle. Un « date_format ne peut pas être vide » bien rédigé permet à Claude de comprendre sa faute et de réessayer avec un argument valide.
Le premier outil
from datetime import datetime
def get_current_datetime(date_format="%Y-%m-%d %H:%M:%S"):
if not date_format:
raise ValueError("date_format ne peut pas être vide")
return datetime.now().strftime(date_format)
La fonction respecte les principes : un nom qui se comprend sans documentation, un paramètre bien nommé avec une valeur par défaut raisonnable, une validation, et un retour exactement conforme à la promesse. Le paramètre date_format est aussi un choix de conception : une seule fonction paramétrable plutôt que trois variantes (get_time, get_date, etc.), c’est moins d’outils à décrire et moins d’hésitation pour Claude.
Le schéma, l’autre moitié du travail
Claude ne voit pas votre code. Il faut donc décrire la fonction dans un schéma JSON, qui dit au modèle quels arguments elle attend, quand l’utiliser et ce qu’elle renvoie. JSON Schema n’a pas été inventé pour l’IA : c’est un standard de validation de données, que beaucoup d’outils savent produire. Le cours officiel donne trois règles pour la description : expliquer ce que fait l’outil, quand l’utiliser et ce qu’il renvoie ; viser trois ou quatre phrases ; détailler chaque paramètre. La leçon suivante construit ce schéma.
À vous de jouer
Une erreur utile. Appelez get_current_datetime("") et lisez le message d’erreur : permettrait-il à Claude de corriger son appel ? Écrivez ensuite une variante qui refuse aussi un format sans aucun code %, avec un message qui explique quoi envoyer.
Sources officielles : Tool functions (Claude Academy) · Use a tool to complete an Amazon Bedrock model response (documentation AWS)
Points clés à retenir
- Trois limites de Claude (l’heure, le calcul de dates, l’action) appellent trois outils complémentaires.
- Une fonction outil est du Python ordinaire, mais son utilisateur est le modèle : noms clairs, entrées validées.
- Un message d’erreur utile est une consigne de correction : Claude réessaie avec de meilleurs arguments.
- Une fonction paramétrable vaut mieux que plusieurs variantes.
- Claude ne voit que le schéma : il doit dire quoi, quand et ce que l’outil renvoie.