La réflexion étendue (Extended Thinking)
Mis à jour le 30 juillet 2026
Certains problèmes ne se résolvent pas d’un jet — ils demandent d’explorer, de poser des étapes, de revenir en arrière. L’extended thinking est la fonctionnalité de raisonnement avancé qui donne à Claude ce temps : avant de générer sa réponse, le modèle produit un processus de réflexion visible, que vous et vos utilisateurs pouvez examiner. On y gagne deux choses distinctes : de meilleures réponses sur les tâches complexes, et une fenêtre sur le raisonnement qui y a mené.
Quand l’utiliser
La réflexion coûte des tokens et de la latence ; elle se mérite. La démarche disciplinée :
- Écrivez et testez votre prompt sans extended thinking
- Évaluez la précision
- Si les résultats ne sont pas satisfaisants après optimisation du prompt
- Alors activez l’extended thinking
L’ordre est important : l’extended thinking n’est pas un correctif pour prompts médiocres — un prompt flou avec réflexion produit une réflexion floue. C’est un amplificateur pour les tâches réellement difficiles (mathématiques, logique, analyse multi-contraintes) une fois le prompt déjà solide.
Comment la réponse change
Sans extended thinking, la réponse est un simple bloc de texte. Avec, elle contient deux blocs distincts :
- Bloc thinking : le raisonnement de Claude
- Bloc text : la réponse finale
Votre code d’extraction doit donc filtrer par type — notre fonction text_from_message, qui ne garde que les blocs text, continue de fonctionner telle quelle ; le bloc thinking, lui, peut être affiché à part, journalisé, ou ignoré selon votre interface.
Le système de signatures
Chaque bloc thinking inclut une signature cryptographique qui garantit que le texte de réflexion n’a pas été modifié. Renvoyez-le tel quel dans l’historique des tours suivants ; si vous le modifiez, la validation échouera. La règle pratique est simple : le raisonnement de Claude est en lecture seule — on le consulte, on ne le retouche pas.
Réflexion expurgée (Redacted Thinking)
Cas particulier à prévoir dans votre code : parfois, le processus de réflexion est signalé par les systèmes de sécurité internes d’Anthropic. Vous recevez alors un bloc expurgé — son contenu est chiffré, illisible pour vous, mais il peut (et doit) être inclus tel quel dans les conversations futures : le modèle, lui, sait toujours l’exploiter. Une application robuste traite donc trois types de blocs : text, thinking, et redacted_thinking.
Implémentation
def chat(messages, system=None, temperature=1.0, stop_sequences=[],
tools=None, thinking=False, thinking_budget=1024):
# ...
if thinking:
params["thinking"] = {
"type": "enabled",
"budget_tokens": thinking_budget
}
Le paramètre budget_tokens plafonne la longueur de la réflexion, avec un minimum de 1024 tokens. Contrainte à respecter : max_tokens doit dépasser le budget de réflexion, puisque les deux se partagent la même enveloppe — avec un budget de 1024 et max_tokens à 4000, Claude peut utiliser jusqu’à 1024 tokens pour réfléchir et il en reste 2976 pour la réponse. Sur les problèmes vraiment durs, des budgets bien plus généreux (plusieurs milliers de tokens) donnent au modèle l’espace d’explorer.
Tester les réponses expurgées
Dernier outil, pour ne pas découvrir les blocs expurgés en production : une chaîne de test dédiée les déclenche à la demande. Incluez-la dans votre message en développement :
TRIGGER_REDACTED_THINKING_46C9A13E193C177646C7398A98432ECCCE4C1253D5E2D82641AC0E52CC2876CB
Votre application peut ainsi vérifier, en test, qu’elle affiche proprement le cas expurgé et le renvoie correctement dans l’historique — plutôt que de planter le jour où il survient chez un utilisateur.
Points clés à retenir
- L’extended thinking donne à Claude un espace de raisonnement visible avant la réponse finale
- Discipline d’activation : prompt optimisé d’abord, réflexion ensuite — c’est un amplificateur, pas un correctif
- La réponse devient multi-blocs :
thinking(signé, en lecture seule) +text(la réponse) budget_tokens≥ 1024 et inférieur àmax_tokens— les deux partagent la même enveloppe- Gérez le bloc
redacted_thinking(chiffré mais réutilisable) et testez-le avec la chaîne TRIGGER dédiée