Aller au contenu principal

Gestion des blocs de messages

Quand on travaille avec la fonctionnalite d’outils de Claude, on rencontre un nouveau type de structure de reponse, different des simples reponses textuelles vues precedemment. Au lieu de recevoir un seul bloc de texte, Claude peut maintenant renvoyer des messages multi-blocs contenant a la fois du texte et des informations d’utilisation d’outils.

Effectuer un appel API avec des outils

Pour permettre a Claude d’utiliser des outils, il faut inclure un parametre tools dans l’appel API :

messages = []
messages.append({
    "role": "user",
    "content": "What is the exact time, formatted as HH:MM:SS?"
})

response = client.messages.create(
    model=model,
    max_tokens=1000,
    messages=messages,
    tools=[get_current_datetime_schema],  # Liste des schemas d'outils disponibles
)

Le parametre tools prend une liste de schemas JSON decrivant les fonctions disponibles que Claude peut appeler.

Comprendre les messages multi-blocs

Quand Claude decide d’utiliser un outil, il renvoie un message assistant avec plusieurs blocs dans la liste content. C’est un changement significatif par rapport aux reponses texte seules.

Un message multi-blocs contient typiquement :

1. Bloc texte (TextBlock)

Du texte lisible expliquant ce que Claude est en train de faire, par exemple :

“Je peux vous aider a trouver l’heure actuelle. Laissez-moi chercher cette information.”

2. Bloc ToolUse

Des instructions pour votre code indiquant quel outil appeler et avec quels parametres. Ce bloc inclut :

ProprieteDescription
idUn identifiant unique pour suivre l’appel d’outil
nameLe nom de la fonction a appeler (ex : "get_current_datetime")
inputLes parametres sous forme de dictionnaire
typeLa designation "tool_use"

Gerer l’historique de conversation

Rappel important : Claude ne stocke pas l’historique de conversation — c’est a vous de le gerer manuellement. Quand on travaille avec des reponses d’outils, il faut preserver toute la structure du contenu, y compris tous les blocs.

Voici comment ajouter correctement un message assistant multi-blocs a votre historique :

# Ajouter la reponse COMPLETE (texte + tool_use) a l'historique
messages.append({
    "role": "assistant",
    "content": response.content  # Contient TOUS les blocs
})

Cela preserve a la fois le bloc texte et le bloc tool_use, ce qui est essentiel pour maintenir le contexte de la conversation lors des appels API suivants.

Flux complet d’utilisation d’outil

Le processus suit ce schema :

  1. Envoi du message utilisateur avec le schema d’outil a Claude
  2. Reception du message assistant avec bloc texte + bloc tool_use
  3. Extraction des informations d’outil et execution de la fonction reelle
  4. Renvoi du resultat d’outil a Claude avec l’historique complet
  5. Reception de la reponse finale de Claude

Chaque etape necessite une gestion soigneuse de la structure des messages pour que Claude ait tout le contexte necessaire.

Mise a jour des fonctions utilitaires

Si vous utilisez des fonctions utilitaires comme add_user_message() et add_assistant_message(), vous devrez les mettre a jour pour gerer le contenu multi-blocs. Les versions actuelles ne supportent probablement que des blocs de texte simples, mais elles doivent maintenant prendre en charge des structures de contenu plus complexes incluant des blocs tool_use.

Quiz : Testez votre comprehension

Question 1 : Quand Claude decide d’utiliser un outil, combien de blocs minimum contient typiquement sa reponse ?

Reponse : Deux blocs — un bloc texte et un bloc tool_use. Le bloc texte explique ce que Claude fait, et le bloc tool_use contient les instructions pour appeler la fonction.

Question 2 : Pourquoi faut-il passer response.content (et pas juste le texte) dans l’historique ?

Reponse : Parce que response.content contient tous les blocs (texte + tool_use). Si on ne garde que le texte, Claude perd le contexte de l’appel d’outil et ne peut pas traiter correctement le resultat qu’on lui renverra ensuite.

Question 3 : Le parametre tools est-il obligatoire uniquement au premier appel ?

Reponse : Non, il faut le passer a chaque appel API, meme quand on renvoie les resultats d’outil. Claude en a besoin pour comprendre les references aux outils dans l’historique de conversation.