La réflexion dans les flux de travail avec outils et multi-tours
Parcourez un aller-retour complet d'utilisation d'outils en deux tours qui préserve correctement les blocs de réflexion, et découvrez comment la réflexion entrelacée modifie le déroulement.
Cette page parcourt un aller-retour complet d'« tool use » (utilisation d'outils) en deux tours avec la réflexion activée : Claude réfléchit, demande un appel d'outil, reçoit le résultat et termine sa réponse, les blocs de réflexion étant correctement gérés à chaque étape. Les règles complètes se trouvent sur la page Réflexion, dans Réflexion avec utilisation d'outils et Préservation des blocs de réflexion ; cette page montre ces règles appliquées dans du code exécutable.
Les règles appliquées dans ce guide pas à pas
Chaque lien mène à l'énoncé complet sur la page Réflexion :
- Limiter le choix d'outil à
autoounoneen mode manuel : les optionstool_choicequi forcent l'utilisation d'outils renvoient une erreur avec la « extended thinking » (réflexion étendue) manuelle (thinking: {type: "enabled"}) ; la réflexion adaptative prend en charge l'utilisation d'outils forcée. - Conserver une seule configuration de réflexion par tour d'assistant : une boucle d'utilisation d'outils constitue un seul tour d'assistant, ne modifiez donc la configuration qu'entre les tours.
- Renvoyer les blocs de réflexion complets et non modifiés : lorsque vous renvoyez un résultat d'outil, les blocs de réflexion du message de l'assistant doivent revenir avec lui.
- Renvoyer le message de l'assistant exactement tel que reçu : reconstruire le message ou filtrer les blocs
redacted_thinkingdéclenche une erreur 400.
Les exemples utilisent la réflexion adaptative ; sur les modèles qui ne prennent en charge que la réflexion étendue, remplacez par thinking: {type: "enabled", budget_tokens: N}. Les règles de l'aller-retour sont identiques.
Parcourir un aller-retour d'utilisation d'outils en deux tours
L'exemple définit un outil get_weather, laisse Claude réfléchir et demander un appel d'outil, puis renvoie le résultat de l'outil accompagné du tour de l'assistant renvoyé exactement tel que reçu, bloc de réflexion inclus.
Effectuer la première requête avec un outil disponible
Envoyez une requête avec la réflexion adaptative activée et l'outil défini. Hormis le paramètre
thinking, il s'agit d'une requête d'utilisation d'outils standard :client = anthropic.Anthropic() weather_tool = { "name": "get_weather", "description": "Get current weather for a location", "input_schema": { "type": "object", "properties": {"location": {"type": "string", "description": "City name"}}, "required": ["location"], }, } # Première requête - Claude répond avec une réflexion et une demande d'outil response = client.messages.create( model="claude-opus-4-8", max_tokens=16000, thinking={"type": "adaptive"}, tools=[weather_tool], messages=[{"role": "user", "content": "What's the weather in Paris?"}], ) print(response)Capturer le tableau de contenu à renvoyer
Vous devriez voir des blocs
thinking,textettool_usedans le contenu de la réponse lors d'une exécution où Claude a choisi de réfléchir (pour des requêtes plus simples, le mode adaptatif peut omettre le bloc de réflexion). Conservez ce tableau de contenu intact : l'étape suivante le renvoie tel quel.Output{ "content": [ { "type": "thinking", "thinking": "The user wants to know the current weather in Paris. I have access to a function `get_weather`...", "signature": "BDaL4VrbR2Oj0hO4XpJxT28J5T...." }, { "type": "text", "text": "I can help you get the current weather information for Paris. Let me check that for you" }, { "type": "tool_use", "id": "toolu_01CswdEQBMshySk6Y9DFKrfq", "name": "get_weather", "input": { "location": "Paris" } } ] }Renvoyer le résultat de l'outil, en renvoyant le tour de l'assistant tel quel
Exécutez l'outil de votre côté, puis envoyez une seconde requête qui ajoute deux messages à la conversation. Le premier est le contenu de l'assistant renvoyé exactement tel que reçu, de sorte que le bloc de réflexion reste inchangé aux côtés du bloc
tool_use. Le second est un message utilisateur contenant letool_result.Chaque exemple est un script autonome : il répète la première requête, puis envoie immédiatement la suite en utilisant la réponse qu'il vient de recevoir.
client = anthropic.Anthropic() weather_tool = { "name": "get_weather", "description": "Get current weather for a location", "input_schema": { "type": "object", "properties": {"location": {"type": "string", "description": "City name"}}, "required": ["location"], }, } response = client.messages.create( model="claude-opus-4-8", max_tokens=16000, thinking={"type": "adaptive"}, tools=[weather_tool], messages=[{"role": "user", "content": "What's the weather in Paris?"}], ) # Extraire le bloc tool_use pour obtenir son ID destiné au tool_result tool_use_block = next(block for block in response.content if block.type == "tool_use") # Appelez votre véritable API météo ; c'est ici que se placerait votre appel API réel # Supposons que c'est ce que nous recevons en retour weather_data = {"temperature": 88} # Deuxième requête - Inclure le tour de l'assistant et le tool_result continuation = client.messages.create( model="claude-opus-4-8", max_tokens=16000, thinking={"type": "adaptive"}, tools=[weather_tool], messages=[ {"role": "user", "content": "What's the weather in Paris?"}, # Renvoyer le contenu de l'assistant exactement tel que reçu. Lorsqu'un bloc # thinking est présent, il doit accompagner le bloc tool_use. {"role": "assistant", "content": response.content}, { "role": "user", "content": [ { "type": "tool_result", "tool_use_id": tool_use_block.id, "content": f"Current temperature: {weather_data['temperature']}°F", } ], }, ], ) print(continuation)Lire la réponse finale
Vous devriez voir Claude terminer le tour avec du texte. Comme la réflexion entrelacée est automatique en mode adaptatif, la suite peut également s'ouvrir sur un nouveau bloc de réflexion avant le texte final :
Output{ "content": [ { "type": "text", "text": "Currently in Paris, the temperature is 88°F (31°C)" } ] }
Comment la réflexion entrelacée modifie le déroulement
L'« interleaved thinking » (réflexion entrelacée) permet à Claude de réfléchir entre les appels d'outils, en raisonnant sur chaque résultat d'outil avant d'agir en conséquence. Le concept et la disponibilité par modèle sont traités dans Réflexion entrelacée sur la page Réflexion ; l'entrelacement modifie l'endroit où apparaissent les blocs de réflexion, et non la possibilité d'enchaîner les appels d'outils. La comparaison suivante montre ce que la réflexion entrelacée change dans un flux de travail à deux outils :
Sans réflexion entrelacée, Claude réfléchit une seule fois au début du tour de l'assistant. Les réponses suivantes après les résultats d'outils se poursuivent sans nouveaux blocs de réflexion.
User: "What's the total revenue if we sold 150 units at $50 each,
and how does this compare to our average monthly revenue?"
Response 1: [thinking] "I need to calculate 150 * $50, then check the database..."
[tool_use: calculator] { "expression": "150 * 50" }
↓ tool result: "7500"
Response 2: [tool_use: database_query] { "query": "SELECT AVG(revenue)..." }
↑ no thinking block
↓ tool result: "5200"
Response 3: [text] "The total revenue is $7,500, which is 44% above your
average monthly revenue of $5,200."
↑ no thinking blockAvec la réflexion entrelacée activée, Claude peut réfléchir après avoir reçu chaque résultat d'outil, ce qui lui permet de raisonner sur les résultats intermédiaires avant de continuer.
User: "What's the total revenue if we sold 150 units at $50 each,
and how does this compare to our average monthly revenue?"
Response 1: [thinking] "I need to calculate 150 * $50 first..."
[tool_use: calculator] { "expression": "150 * 50" }
↓ tool result: "7500"
Response 2: [thinking] "Got $7,500. Now I should query the database to compare..."
[tool_use: database_query] { "query": "SELECT AVG(revenue)..." }
↑ thinking after receiving calculator result
↓ tool result: "5200"
Response 3: [thinking] "$7,500 vs $5,200 average - that's a 44% increase..."
[text] "The total revenue is $7,500, which is 44% above your
average monthly revenue of $5,200."
↑ thinking before final answerÉtapes suivantes
La vue d'ensemble : activer la réflexion, lire la sortie de réflexion et consulter les règles complètes pour l'utilisation d'outils, la mise en cache et le streaming.
Orientez la fréquence et la profondeur de la réflexion de Claude grâce aux niveaux d'effort et aux indications basées sur les prompts.
Budgets de réflexion manuels sur les modèles plus anciens : fonctionnement de budget_tokens et migration vers le mode adaptatif.
Was this page helpful?