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 :
| Propriete | Description |
|---|---|
id | Un identifiant unique pour suivre l’appel d’outil |
name | Le nom de la fonction a appeler (ex : "get_current_datetime") |
input | Les parametres sous forme de dictionnaire |
type | La 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 :
- Envoi du message utilisateur avec le schema d’outil a Claude
- Reception du message assistant avec bloc texte + bloc tool_use
- Extraction des informations d’outil et execution de la fonction reelle
- Renvoi du resultat d’outil a Claude avec l’historique complet
- 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.