Aller au contenu principal

Utiliser plusieurs outils ensemble

Une fois l’infrastructure de base en place (boucle de conversation, routage, gestion des resultats), ajouter de nouveaux outils devient tres simple. On suit toujours le meme schema.

Exemple concret : un systeme de rappels

Imaginons un assistant qui gere des rappels. Il a besoin de trois capacites :

  1. Obtenir la date et l’heure actuelles - pour savoir “quand on est”
  2. Ajouter une duree a une date - Claude n’est pas fiable pour le calcul de dates
  3. Creer un rappel - pour effectivement programmer le rappel

Chaque capacite correspond a un outil avec sa fonction et son schema JSON.

Declarer les outils disponibles

On passe la liste complete des schemas dans l’appel a Claude :

response = chat(messages, tools=[
    get_current_datetime_schema,
    add_duration_to_datetime_schema,
    set_reminder_schema
])

Claude connait ainsi les trois outils et peut decider lesquels utiliser selon le contexte.

Mettre a jour le routeur d’outils

On ajoute simplement les nouveaux cas dans la fonction de routage :

def run_tool(tool_name, tool_input):
    if tool_name == "get_current_datetime":
        return get_current_datetime(**tool_input)
    elif tool_name == "add_duration_to_datetime":
        return add_duration_to_datetime(**tool_input)
    elif tool_name == "set_reminder":
        return set_reminder(**tool_input)

Le principe est toujours le meme : verifier le nom de l’outil, appeler la fonction correspondante avec les arguments fournis, retourner le resultat.

Test avec un cas reel

Pour verifier que tout fonctionne, on peut envoyer une requete qui necessite plusieurs outils en sequence :

“Programme un rappel pour mon rendez-vous medical. C’est 177 jours apres le 1er janvier 2050.”

Claude va alors :

  1. Appeler add_duration_to_datetime pour calculer la date (27 juin 2050)
  2. Appeler set_reminder pour programmer le rappel a cette date

Chaque appel est un tour de la boucle de conversation. Claude enchaine les outils de maniere autonome.

Le flux des messages

En examinant l’historique de la conversation, on voit la structure complete :

  1. Message utilisateur avec la demande initiale
  2. Message assistant contenant du texte explicatif ET des blocs tool_use
  3. Messages de resultats d’outils
  4. Messages assistant de suivi avec d’eventuels nouveaux appels d’outils
  5. Reponse finale de Claude

Un point important : Claude peut inclure plusieurs types de blocs dans un seul message — du texte explicatif melange a des demandes d’outils.

Le schema d’ajout d’outils

Une fois l’infrastructure en place, ajouter un nouvel outil suit toujours ces quatre etapes :

  1. Ecrire la fonction qui implemente la logique de l’outil
  2. Definir le schema JSON qui decrit les parametres attendus
  3. Ajouter le schema a la liste tools dans run_conversation
  4. Ajouter un cas dans la fonction run_tool

Cette approche modulaire permet d’enrichir les capacites de l’assistant sans toucher au code existant. Chaque nouvel outil s’integre naturellement dans le flux de conversation et la logique de gestion des outils.