Menu

Chain of thought : réfléchissons étape par étape

Le prompting chain of thought (chaîne de pensée) demande à un modèle d'écrire son raisonnement avant de donner la réponse. Il aide surtout sur les problèmes de maths et de logique à plusieurs étapes, et compte moins pour les modèles de raisonnement qui réfléchissent déjà avant de répondre.

Chaque prompt de cette page se modifie, puis s'ouvre dans ChatGPT, Claude ou une autre application d'IA.

Le prompting chain of thought (chaîne de pensée) demande à un modèle de langage d'écrire les étapes intermédiaires d'un problème avant de donner la réponse finale. Sur les problèmes qui demandent plusieurs étapes, comme les problèmes à énoncé, les énigmes logiques ou les plannings, travailler à découvert produit en général plus de bonnes réponses que répondre d'emblée, et vous laisse des étapes à vérifier. La version la plus courte tient en une phrase ajoutée au prompt : "Réfléchissons étape par étape."

Pourquoi écrire les étapes aide

Un modèle produit sa réponse un token à la fois, et tout ce qu'il a déjà écrit devient une entrée pour le token suivant. Si un prompt exige la réponse tout de suite, le modèle doit la produire avant qu'aucun résultat intermédiaire n'existe sur la page. S'il écrit d'abord "Les cafés de lundi ont rapporté 168 €", ce nombre est désormais dans le contexte, et l'étape suivante peut s'appuyer dessus au lieu de le garder implicitement.

C'est l'intuition. Les preuves sont venues de deux articles de 2022. Wei et al., "Chain-of-Thought Prompting Elicits Reasoning in Large Language Models", ont montré que des exemples résolus avec leur raisonnement écrit amélioraient les grands modèles sur des tâches de raisonnement arithmétique, de sens commun et symbolique. Ils ont aussi constaté que le bénéfice dépendait de la taille : les petits modèles ne gagnaient rien, et écrivaient souvent un raisonnement fluide qui menait à de mauvaises réponses. Kojima et al., "Large Language Models are Zero-Shot Reasoners", ont ensuite montré qu'une seule phrase sans exemple, "Let's think step by step" (réfléchissons étape par étape), améliorait aussi nettement les résultats, en général moins que des exemples résolus.

Réponse directe ou chain of thought

Les deux onglets posent la même question. Le premier exige seulement le montant ; le second demande le raisonnement et place la réponse sur une dernière ligne fixe. Le libellé Answer: reste en anglais dans ce prompt, car le code Python plus bas le recherche tel quel.

Un café vend le café 3,50 € et les muffins 2,25 €. Lundi, il a vendu 48 cafés et un certain nombre de muffins, pour un total de 213 €. Mardi, il a vendu 10 cafés de moins que lundi et deux fois plus de muffins. Combien a-t-il encaissé mardi ? Réponds uniquement par le montant.
Try it
Example replyReplies vary between models and runs.

258 €

La réponse directe montre une erreur typique : 258 €, ce sont les 168 € de cafés de lundi plus les 90 € de muffins de mardi, elle a donc oublié que mardi il s'est vendu 10 cafés de moins. La réponse étape par étape donne au nombre de cafés de mardi sa propre ligne, si bien que cette étape ne peut pas être sautée en silence. Un modèle actuel trouvera peut-être aussi la bonne réponse en version directe ; l'écart se creuse à mesure que les problèmes s'allongent et que les étapes dépendent davantage les unes des autres.

Les étapes écrites ont un second avantage : quand une réponse est fausse, vous voyez quelle étape a cassé, et vous pouvez corriger le prompt ou l'entrée à cet endroit.

Le chain of thought few-shot

La technique d'origine de Wei et al. place dans le prompt des exemples résolus dont les réponses montrent leur raisonnement, et le modèle répond à la nouvelle question de la même façon. L'exemple ci-dessous est adapté de la première figure de leur article ; la question qui suit est nouvelle. Changez la question pour essayer la vôtre.

Chain of thought few-shot
Fill in
Parts
Q : Roger a 5 balles de tennis. Il achète 2 boîtes de balles de tennis de plus. Chaque boîte contient 3 balles. Combien de balles a-t-il maintenant ? R : Roger avait 5 balles au départ. 2 boîtes de 3 balles font 6 balles. 5 + 6 = 11. La réponse est 11.
Q : Une bibliothèque avait 120 livres sur ses rayons. Elle en a prêté 45, en a récupéré 18 et a reçu un don de 30 livres. Combien de livres y a-t-il maintenant sur ses rayons ? R :
Try it
Example replyReplies vary between models and runs.

La bibliothèque avait 120 livres au départ. Prêter 45 livres en a laissé 75 sur les rayons. En récupérer 18 porte le total à 93. Le don de 30 livres l'amène à 123. La réponse est 123.

Le CoT few-shot vous donne le contrôle sur la forme du raisonnement : sa longueur, ce qu'il détaille et la façon d'énoncer la réponse. "La réponse est 11" dans l'exemple est une fin fixe, et la réponse l'a reprise. Le CoT zero-shot est plus rapide à écrire mais laisse ces choix au modèle. Pour construire des jeux d'exemples, voir prompting few-shot ; pour la version sans exemple, voir prompting zero-shot.

Mettez la réponse sur sa propre ligne

Dès que la réponse contient un raisonnement, le résultat se trouve quelque part dans un paragraphe, ce qui pose problème quand un programme doit le lire. Demandez la réponse sous une forme fixe sur la dernière ligne, comme le fait le prompt du café avec "Answer: X €", et lisez cette ligne dans le code. Si vous traduisez ce libellé dans votre prompt (par exemple "Réponse:"), changez aussi Answer: dans l'expression régulière ci-dessous :

import re

matches = re.findall(r"^Answer:\s*(.+)$", reply, re.MULTILINE)
answer = matches[-1] if matches else None

Prendre la dernière correspondance compte, car le raisonnement lui-même peut contenir une ligne commençant par "Answer:" avant que le modèle ne se corrige. Si les utilisateurs ne doivent voir que la réponse, demandez le raisonnement dans une paire de balises et la réponse dans une autre, puis n'affichez que la seconde. Sortie structurée explique comment demander du JSON quand il vous faut plus d'un champ.

Les modèles de raisonnement

Certains modèles actuels sont conçus pour réfléchir avant de répondre : ils génèrent un raisonnement en interne, souvent caché ou résumé, avant la réponse visible. Pour eux, "réfléchissons étape par étape" compte beaucoup moins, car les étapes ont lieu que vous le demandiez ou non. L'ajouter ne fait en général qu'allonger la réponse visible.

Ce qui aide encore avec un modèle de raisonnement, c'est tout ce qui entoure le raisonnement : un énoncé complet du problème, les contraintes qu'une bonne réponse doit respecter et le format de la réponse finale. Décrivez à quoi ressemble une bonne réponse plutôt que de scénariser chaque étape ; une recette d'étapes figée peut détourner le modèle d'un meilleur chemin qu'il aurait trouvé seul.

Quand ne pas utiliser le chain of thought

Le chain of thought coûte des tokens et du temps, et il n'est rentable que si la tâche comporte des étapes qui dépendent les unes des autres. Pour une recherche d'information, une traduction, une réécriture ou une classification simple, il ne fait qu'allonger la réponse. Un modèle peut aussi écrire un raisonnement qui paraît solide et arriver malgré tout à une mauvaise réponse : vérifiez donc le résultat final séparément, pas seulement les étapes qui y mènent.

Pour les problèmes difficiles où une seule chaîne peut dérailler, deux extensions s'appuient dessus. Le self-consistency échantillonne plusieurs chaînes et retient la réponse à laquelle la plupart aboutissent, et le tree of thought explore et compare plusieurs pistes de raisonnement partielles avant de s'engager sur l'une d'elles.

Questions fréquentes

Qu'est-ce que le prompting chain of thought ?

Le prompting chain of thought (CoT, ou chaîne de pensée) demande à un modèle de langage d'écrire les étapes intermédiaires d'un problème avant sa réponse finale, soit en montrant des exemples résolus qui incluent leur raisonnement, soit en ajoutant une consigne comme "Réfléchissons étape par étape." Sur les problèmes à plusieurs étapes, cela produit en général plus de bonnes réponses, et vous pouvez vérifier chaque étape.

"Réfléchissons étape par étape" marche-t-il encore ?

Avec les modèles de chat classiques, la formule aide encore sur les problèmes à plusieurs étapes, surtout quand le prompt pousserait sinon à une réponse immédiate. Les modèles de raisonnement, qui réfléchissent avant de répondre, le font déjà en interne, donc la formule leur apporte peu, à part une réponse plus longue. Avec eux, énoncez plutôt clairement le problème et le format de la réponse.

Quand le chain of thought aide-t-il, et quand n'aide-t-il pas ?

Il aide sur les tâches qui demandent plusieurs étapes dépendantes : problèmes à énoncé, calculs, énigmes logiques, planification sous contraintes et suivi de ce que fait un code. Il apporte peu aux recherches d'information, à la traduction, à la réécriture ou à une classification simple, où il ne fait qu'allonger et ralentir la réponse.

Quelle est la différence entre le chain of thought zero-shot et few-shot ?

Le CoT few-shot, introduit par Wei et al. en 2022, place dans le prompt des exemples résolus avec leur raisonnement, et le modèle imite ce style de raisonnement. Le CoT zero-shot, de Kojima et al. 2022, n'utilise aucun exemple et ajoute simplement une consigne comme "Réfléchissons étape par étape." Le zero-shot est plus rapide à écrire ; le few-shot donne plus de contrôle sur la forme des étapes.

Le raisonnement écrit est-il la façon dont le modèle a vraiment trouvé la réponse ?

Pas forcément. Les étapes sont du texte généré par le modèle : elles peuvent sembler solides alors que la réponse finale est fausse, ou contenir une erreur alors que la réponse est juste par hasard. Considérez le raisonnement comme quelque chose à vérifier, pas comme une preuve, et vérifiez la réponse finale séparément.

Coddy programming languages illustration

Apprendre à coder avec Coddy

COMMENCER