Conversations multi-tours avec outils
Sur cette page
Certaines questions demandent plusieurs outils l’un après l’autre. « Quel jour serons-nous dans 103 jours ? » en est l’exemple type : Claude doit d’abord connaître la date du jour, puis lui ajouter 103 jours. Cette leçon prépare les fonctions utilitaires qui rendront cet enchaînement automatique ; la suivante écrit la boucle.
Plusieurs tours pour une seule question
- L’utilisateur demande : « Quel jour serons-nous dans 103 jours ? »
- Claude demande
get_current_datetime. - Votre code l’exécute et renvoie la date.
- Claude demande
add_duration_to_datetime, avec cette date et 103 jours. - Votre code l’exécute et renvoie le résultat.
- Claude répond.
Le deuxième appel dépend du résultat du premier : Claude ne peut pas le formuler avant de connaître la date. Votre code ne sait donc pas d’avance combien d’allers-retours une question demandera. D’où la boucle : relancer Claude tant qu’il demande des outils.
Ajouter un message à l’historique
Les utilitaires des sections précédentes supposaient des messages de texte simple. Avec les outils, un message contient plusieurs blocs, et ces fonctions doivent les transporter sans rien perdre :
from anthropic.types import Message
def add_user_message(messages, message):
messages.append({
"role": "user",
"content": message.content if isinstance(message, Message) else message,
})
def add_assistant_message(messages, message):
messages.append({
"role": "assistant",
"content": message.content if isinstance(message, Message) else message,
})
Les deux fonctions acceptent une chaîne, une liste de blocs ou un objet Message complet. Avec un Message, elles reprennent tous ses blocs tels quels, y compris les blocs de réflexion, que l’API exige de retrouver intacts.
Une fonction chat qui accepte des outils
def chat(messages, system=None, tools=None):
params = {"model": model, "max_tokens": 4096, "messages": messages}
if tools:
params["tools"] = tools
if system:
params["system"] = system
return client.messages.create(**params)
Deux changements par rapport à la version de la leçon 5 : le paramètre tools, et la valeur de retour. chat renvoie désormais l’objet Message entier, et non plus son texte. Un message peut contenir des demandes d’outils ; ne garder que le texte jetterait la moitié de l’information.
Extraire le texte quand on en a besoin
def text_from_message(message):
return "\n".join(block.text for block in message.content if block.type == "text")
Cette fonction réunit les blocs text d’un message et ignore les blocs de réflexion et d’appel d’outil. C’est elle qui sert à afficher une réponse à l’utilisateur.
Ce que cette version change par rapport au cours officiel
La fonction chat du cours de l’Academy passe encore un paramètre temperature. Sur Claude Opus 4.7 et les modèles suivants, dont Sonnet 5.5, une valeur différente de la valeur par défaut renvoie une erreur 400, et la version d’API 2026-10-21 refuse ce paramètre sur tous les modèles : nous l’avons retiré. Nous avons aussi porté max_tokens de 1000 à 4096, car les jetons de réflexion comptent dans ce plafond, et la réflexion est active par défaut sur les modèles Claude 5.
À vous de jouer
Tracer un enchaînement. Sans écrire de code, déroulez sur papier l’échange complet pour « Programme un rappel pour mon dentiste jeudi en huit à 15 h », avec les trois outils du projet. Pour chaque tour, notez l’outil demandé, ses arguments et la valeur de stop_reason, puis comptez les appels à l’API.
Un déroulé possible
Supposons qu’on soit le lundi 9 novembre 2026 à 10 h 22. « Jeudi en huit » désigne alors le jeudi 19 novembre.
- Claude demande
get_current_datetime; le résultat est2026-11-09 10:22:00.stop_reason:tool_use. - Claude demande
add_duration_to_datetimeavec2026-11-09 15:00:00, 10 jours ; le résultat est2026-11-19 15:00:00 (jeudi).stop_reason:tool_use. - Claude demande
set_reminderavec le texte « Rendez-vous chez le dentiste » et2026-11-19 15:00:00.stop_reason:tool_use. - Claude confirme : « C’est noté, je vous le rappellerai le jeudi 19 novembre à 15 h. »
stop_reason:end_turn.
Quatre appels à l’API : un par demande d’outil, plus celui qui produit la réponse finale. Claude peut aussi procéder autrement, par exemple en ajoutant d’abord les jours puis en fixant l’heure : le nombre de tours n’est pas connu d’avance.
Sources officielles : Multi-turn conversations with tools (Claude Academy) · How tool use works (documentation Claude : la boucle)
Points clés à retenir
- Une question peut demander plusieurs outils en chaîne, quand un appel dépend du résultat du précédent.
- Le nombre de tours n’est pas connu d’avance : il faut une boucle.
add_user_messageetadd_assistant_messagetransportent des blocs, pas seulement du texte.chatrenvoie l’objetMessageentier ;text_from_messageen extrait le texte pour l’affichage.- Pas de
temperature, que les modèles actuels refusent, et unmax_tokensassez grand pour la réflexion.