Aller au contenu principal

Les fonctions d'outils

Mis à jour le 30 juillet 2026

Une fonction d’outil n’a rien de magique : c’est une fonction Python parfaitement ordinaire — elle prend des arguments, fait son travail, retourne un résultat. Ce qui change, c’est qui décide de l’appeler. Dans un programme classique, c’est vous ; ici, c’est Claude qui détermine, au fil de la conversation, qu’il lui manque une information et que cette fonction peut la lui fournir. Votre code l’exécute alors pour son compte et lui renvoie le résultat.

Cette inversion a une conséquence directe sur la façon d’écrire ces fonctions : votre « utilisateur » est un modèle de langage. Il ne lira pas votre documentation interne, ne devinera pas vos conventions implicites — il ne connaîtra de la fonction que ce que son nom, ses paramètres et ses messages d’erreur expriment. Trois règles en découlent. Les noms doivent être descriptifs : get_current_datetime avec un paramètre date_format se comprend sans explication, là où gcd(fmt) serait illisible pour le modèle comme pour un collègue. Les entrées doivent être validées : Claude génère les arguments, et il peut se tromper — une fonction d’outil qui fait confiance à ses entrées finira par planter sur un argument inattendu. Et les messages d’erreur doivent être clairs, car ils ne sont pas un cul-de-sac : renvoyés au modèle, ils lui permettent de comprendre son erreur et de réessayer avec des paramètres corrigés.

Première fonction d’outil

Notre premier outil répond à une limite fondamentale de Claude : il ne connaît pas la date d’aujourd’hui. Sa connaissance s’arrête à la fin de son entraînement, et sans outil, il ne peut que deviner — ou refuser de répondre.

def get_current_datetime(date_format="%Y-%m-%d %H:%M:%S"):
    if not date_format:
        raise ValueError("date_format ne peut pas etre vide")
    return datetime.now().strftime(date_format)

Tout y est en quatre lignes : un nom explicite, un paramètre avec une valeur par défaut raisonnable, une validation, un résultat. Le format par défaut produit une sortie comme "2024-03-15 14:30:45" — précise et non ambiguë, ce qui compte quand un modèle doit la réutiliser dans un calcul. Le paramètre date_format laisse Claude adapter la sortie au besoin de la conversation :

# Juste l'heure
get_current_datetime("%H:%M")  # "14:30"

# Format de date different
get_current_datetime("%B %d, %Y")  # "March 15, 2024"

Ce paramètre illustre un principe de conception des outils : plutôt que trois fonctions (get_time, get_date, get_datetime), une seule fonction paramétrable — moins d’outils à décrire à Claude, moins de risque de confusion dans son choix.

Gestion d’erreurs

La validation if not date_format: mérite qu’on s’y arrête, car elle protège contre un scénario réel : Claude peut parfaitement générer un appel avec une chaîne vide — un modèle produit du texte plausible, pas du texte garanti correct. Sans cette garde, strftime("") retournerait silencieusement une chaîne vide, et Claude construirait sa réponse sur un résultat vide sans que personne ne détecte le problème. Avec la garde, l’exception remonte avec un message explicite.

Et c’est là que la boucle se referme élégamment : comme nous le verrons dans l’implémentation multi-tours, ce message d’erreur est renvoyé à Claude plutôt que d’interrompre le programme. Le modèle lit « date_format ne peut pas etre vide », comprend, et réessaie avec un format valide. Un message d’erreur bien rédigé n’est donc pas du confort de débogage — c’est une instruction de correction que votre outil adresse directement au modèle.

La fonction est prête ; encore faut-il que Claude sache qu’elle existe et comment l’appeler. C’est le rôle du schéma JSON, objet de la prochaine leçon.

Points clés à retenir

  • Une fonction d’outil est une fonction Python normale — c’est Claude qui décide quand l’appeler
  • Son « utilisateur » est le modèle : noms descriptifs, entrées validées, erreurs explicites
  • Préférez une fonction paramétrable à plusieurs variantes — moins d’outils, choix plus sûr pour Claude
  • Validez toujours les arguments : le modèle les génère et peut se tromper
  • Un message d’erreur clair est une instruction de correction — renvoyé à Claude, il permet un nouvel essai réussi