Le prompting tree of thought (arbre de pensées) fait travailler un modèle de langage sur un problème comme vous le feriez sur papier : noter quelques étapes suivantes possibles, juger lesquelles semblent prometteuses, poursuivre celles-là et abandonner une branche quand elle ne mène nulle part. L'idée vient de Yao et al. 2023, "Tree of Thoughts: Deliberate Problem Solving with Large Language Models". Elle étend le chain of thought, qui suit un seul fil de raisonnement, en une recherche sur de nombreux fils.
Cette page explique comment fonctionne la méthode d'origine, propose une version en un seul prompt à essayer dans ChatGPT, Claude ou Gemini, et montre la boucle en code pour les cas où un seul prompt ne suffit pas.
Comment fonctionne le tree of thoughts
L'article découpe la méthode en quatre décisions.
- Ce qui compte comme une pensée. Une pensée est une étape intermédiaire, assez petite pour que le modèle la produise bien et assez grande pour être jugée. Dans une énigme mathématique, c'est une équation ; dans une tâche d'écriture, un court plan.
- Comment générer des pensées. À partir de la solution partielle en cours, le modèle propose plusieurs étapes suivantes candidates, soit par échantillonnage indépendant, soit en les listant dans une seule réponse.
- Comment les évaluer. On demande au modèle de noter chaque solution partielle. L'article utilisait deux styles : noter chaque état séparément (par exemple "sûr", "probable" ou "impossible"), ou montrer plusieurs états au modèle et le laisser voter pour le meilleur.
- Comment chercher. Un programme garde les meilleurs états à chaque niveau (recherche en largeur) ou suit une branche en profondeur et revient en arrière quand l'évaluation la juge sans espoir (recherche en profondeur).
Prenons la tâche Game of 24 de l'article : utiliser les nombres 4, 9, 10 et 13 une fois chacun, avec les quatre opérations de base, pour obtenir 24. Un chain of thought s'engage sur sa première équation et doit faire avec. Un tree of thoughts peut essayer 13 - 9 = 4, 10 - 4 = 6 et 4 + 9 = 13 comme premières étapes, demander au modèle quels nombres restants peuvent encore mener à 24, abandonner l'impasse (10, 13 et 13 ne peuvent pas faire 24), et aboutir à (10 - 4) * (13 - 9) = 24.
Ce que l'article a montré
Les auteurs ont choisi trois tâches que GPT-4 trouvait difficiles même avec le chain of thought, parce que chacune demande de planifier ou de chercher : Game of 24, une tâche d'écriture créative avec des phrases de fin imposées, et des mini mots croisés de 5x5. Avec GPT-4, la recherche en arbre a résolu bien plus d'énigmes Game of 24 que le chain of thought ou que l'échantillonnage de plusieurs chaînes avec vote majoritaire, et elle a aussi fait mieux sur les deux autres tâches.
Le prix, ce sont les appels. Chaque étape candidate et chaque évaluation est une requête séparée, si bien qu'un problème résolu peut coûter des dizaines d'appels au modèle là où le chain of thought en coûte un. Ce compromis a du sens pour les problèmes difficiles et aucun pour les simples.
Le tree of thought en un seul prompt
Vous pouvez approcher l'idée en un seul message : demandez plusieurs approches distinctes, un verdict sur chacune au regard des faits donnés, et le développement de la seule qui survit. Les onglets ci-dessous envoient le même problème des deux façons.
La cause principale est la distance physique entre l'Australie et votre serveur de Francfort. Chaque requête doit faire l'aller-retour jusqu'en Europe, et avec 40 requêtes à chaque chargement de page, ce délai s'accumule.
La solution classique est un CDN (réseau de diffusion de contenu). Un CDN garde des copies de votre site sur des serveurs dans le monde entier, pour que les utilisateurs australiens téléchargent depuis un serveur proche plutôt que depuis Francfort. La plupart des fournisseurs permettent d'en placer un devant un site existant sans modifier votre code.
Vous pouvez aussi compresser les images et activer le cache du navigateur pour réduire encore le temps de chargement.
La réponse directe n'est pas absurde ; elle compte même les 40 requêtes, mais elle a pris la première explication qui collait ("la distance") et s'y est tenue. La réponse en arbre a confronté chaque explication aux détails du prompt, et c'est ainsi qu'elle a remarqué que "l'une après l'autre" compte plus que "Australie", et que le CDN laisserait les appels d'API intacts.
Un modèle réutilisable
La même structure marche pour les choix de conception et les plans. Remplissez le problème et les critères qui vous importent ; la réponse montre la valeur par défaut remplie.
Plateforme en tant que service (un hébergeur d'applications géré) Coût : modéré, augmente avec le trafic. Mise en place : moins d'une heure depuis un dépôt Git. Maintenance : faible, l'hébergeur applique les correctifs du système. Garder.
Votre propre serveur virtuel Coût : le plus bas. Mise en place : une journée pour le serveur, le TLS et un gestionnaire de processus. Maintenance : élevée, les mises à jour et les redémarrages sont pour vous. Écarter pour une équipe de trois.
Fonctions serverless Coût : très faible à petite échelle. Mise en place : modérée, une application serveur existante peut devoir être restructurée. Maintenance : faible, mais les démarrages à froid ajoutent de la latence. Garder en second choix.
Meilleure option : plateforme en tant que service. Premières étapes :
- Ajouter un script de démarrage et lire le port depuis une variable d'environnement.
- Déplacer les secrets dans les réglages d'environnement de l'hébergeur.
- Connecter le dépôt et déployer la branche principale.
- Ajouter un endpoint de vérification de santé.
- Définir une alerte de dépenses.
Les limites du prompt unique
La version en un seul prompt garde le vocabulaire de la méthode mais perd l'essentiel de sa mécanique.
- Pas de vrai retour en arrière. Le modèle écrit toutes les branches et tous les verdicts en un seul passage. Si l'étape 3 de la branche choisie échoue, rien ne le renvoie à l'étape 1.
- Le juge est l'auteur. La même réponse qui a proposé une idée la note aussi, elle a donc tendance à favoriser la branche qu'elle avait déjà en tête. Dans l'article, l'évaluation est un appel séparé, fait une fois les candidats générés.
- Les branches ne sont pas indépendantes. Des idées listées dans une même réponse s'influencent et finissent souvent en variations sur un seul thème. Demander des approches "vraiment différentes", comme le fait le modèle, pousse contre cette tendance sans la supprimer.
- Les modèles de raisonnement ramifient déjà. Les modèles qui réfléchissent avant de répondre essaient et écartent des approches en interne. Pour eux, le prompt apporte moins de précision ; son intérêt restant est de vous montrer les options rejetées pour que vous puissiez contester le raisonnement.
Une vraie recherche en arbre dans le code
La méthode complète est une boucle dans votre programme : générer des étapes candidates, noter chaque solution partielle dans un appel séparé, garder les meilleures, recommencer. Voici une version minimale en largeur avec le SDK Python d'OpenAI ; la même structure marche avec n'importe quel fournisseur.
from openai import OpenAI
client = OpenAI()
MODEL = "your-model-id" # e.g. from your provider's model list
def ask(prompt, temperature=0.7):
response = client.chat.completions.create(
model=MODEL,
messages=[{"role": "user", "content": prompt}],
temperature=temperature,
)
return response.choices[0].message.content.strip()
def propose(problem, path, k=3):
steps = "\n".join(path) or "(none yet)"
prompt = f"Problem: {problem}\nSteps so far:\n{steps}\nPropose the next step only."
return [ask(prompt) for _ in range(k)]
def score(problem, path):
steps = "\n".join(path)
prompt = (f"Problem: {problem}\nPartial solution:\n{steps}\n"
"How likely is this to lead to a correct solution? Reply with a number from 1 to 10 only.")
try:
return float(ask(prompt, temperature=0))
except ValueError:
return 0.0
def tree_of_thought(problem, depth=3, keep=2):
frontier = [[]]
for _ in range(depth):
candidates = [path + [step] for path in frontier for step in propose(problem, path)]
candidates.sort(key=lambda p: score(problem, p), reverse=True)
frontier = candidates[:keep]
return frontier[0]
Avec depth=3, keep=2 et trois propositions par état, une exécution fait une trentaine d'appels. Pour beaucoup de tâches, le self-consistency (plusieurs réponses complètes, vote majoritaire) ou une suite d'étapes fixe avec le chaînage de prompts obtient l'essentiel du bénéfice pour moins d'appels. Passez à un arbre quand la tâche demande une recherche : beaucoup de premiers coups possibles, et un moyen de repérer tôt une impasse.
Questions fréquentes
Qu'est-ce que le prompting tree of thought ?
Le prompting tree of thought (arbre de pensées) est une façon de résoudre des problèmes où le modèle propose plusieurs étapes suivantes possibles, évalue le potentiel de chacune et ne poursuit que les meilleures branches, en revenant en arrière quand une branche échoue. Il vient de l'article de 2023 "Tree of Thoughts: Deliberate Problem Solving with Large Language Models" de Yao et al. Dans l'article, la ramification et la notation sont pilotées par un programme qui appelle le modèle de nombreuses fois.
Quelle est la différence entre le tree of thoughts et le chain of thought ?
Le chain of thought suit un seul fil de raisonnement du début à la fin, donc une erreur au début se propage jusqu'à la réponse. Le tree of thoughts garde plusieurs solutions partielles en vie à la fois, les évalue et abandonne les plus faibles, ce qui lui permet de se remettre d'un mauvais premier pas. Le prix : beaucoup plus d'appels au modèle.
Peut-on utiliser le tree of thoughts dans ChatGPT ou Claude ?
Vous pouvez en utiliser une approximation : un prompt qui demande au modèle de lister plusieurs approches, de juger chacune selon vos critères, d'écarter les plus faibles et de développer la meilleure. Cela marche dans n'importe quelle application de chat. Ce n'est pas la méthode complète, car tout se passe dans une seule réponse et le modèle note ses propres idées dans le même passage où il les a écrites.
Le tree of thought sert-il encore avec les modèles de raisonnement ?
Moins qu'avant. Les modèles qui réfléchissent avant de répondre essaient et écartent déjà des approches en interne, donc leur demander de ramifier apporte moins. La version en un seul prompt reste utile quand vous voulez voir les options et les raisons de leur rejet, pour vérifier vous-même le jugement.
Quand utiliser le prompting tree of thought ?
Utilisez-le pour les problèmes qui ont plusieurs approches plausibles et où la première idée est souvent fausse : planification, choix de conception, diagnostic d'un problème à partir de symptômes, énigmes qui demandent une recherche. Pour une question avec une voie évidente, un simple chain of thought coûte moins et fait aussi bien.