Tutoriel : comment maximiser "l'intelligence" d'un LLM avec la tree-of-thought
Après la chain of thought (CoT), la tree-of-thought (ToT) se démocratise depuis quelques mois. La technique permet de faire raisonner un LLM sur plusieurs chemins de pensées différentes pour obtenir une réponse plus pertinente à un problème donné. La technique permet, en outre, d'obtenir des taux de précision largement supérieurs à la CoT. Fonctionnement, implémentation, limites… On vous explique tout.
Un raisonnement inspiré du cerveau humain
Lorsque nous réfléchissons à un problème, notre cerveau ne suit pas une unique trajectoire linéaire, mais génère et teste mentalement différentes hypothèses. La tree of thoughts, développée par des chercheurs de DeepMind (oui, encore) et de Princeton, vise à simuler ce fonctionnement : le LLM génère plusieurs "pensées" ou chemins de raisonnement potentiels, les évalue, élague les branches les moins prometteuses et continue d'explorer les voies les plus porteuses. Contrairement à la chain-of-thought, la ToT permet au LLM de ne pas se figer sur une première idée potentiellement erronée qui arriverait alors à un mauvais résultat. La ToT permet au modèle de maximiser ses chances de trouver la meilleure solution.
Plus concrètement, la tree of thoughts décompose un problème en plusieurs étapes intermédiaires. Pour chaque étape, le modèle génère plusieurs solutions potentielles. Ces dernières sont ensuite évaluées selon des critères prédéfinis et on ne conserve que les chemins les plus prometteurs. L'évaluation des branches d'idées les plus pertinentes est réalisée, dans la technique originale, en utilisant des algorithmes de recherche en largeur (on explore toutes les options immédiates) ou en profondeur (on creuse une piste avant d'en explorer une autre). Enfin, une fois n branches développées, le modèle sélectionne la plus pertinente pour en déduire la solution finale.

Les deux grandes techniques d'utilisation
Il existe deux techniques d'utilisation de la ToT. La première est à réserver à la résolution de problèmes complexes et utilise plusieurs appels au LLM (via une API, par exemple) jusqu'à la résolution finale. La seconde est une méthode de prompting directement inspirée de la ToT originale qui n'utilise qu'un seul prompt.
La première méthode consiste donc à découper le processus de ToT en cinq étapes : le découpage d'un problème en n raisonnements différents (thought decomposition), la lancement de la réflection en parallèle de chaque branche (thought generation), l'évaluation des résultats de chaque branche (state evaluation), la décision de continuer le processus ou non, et enfin, quand un résultat cohérent, est trouvé la synthèse globale en évaluant les branches les plus prometteuses.
La méthode complexe en 5 étapes
1. Décomposition du problème en sous-approches
Pour la première étape, il suffit de demander au LLM de décomposer un problème en n étapes.
Exemple d'un prompt :
Problème : [INSÉRER_PROBLÈME] Identifiez [NOMBRE_PENSEE] angles d'approche différents pour résoudre ce problème. Pour chaque approche, fournissez votre réponse au format XML suivant : <decomposition> <approche id="1"> <nom>[Nom de l'approche]</nom> <description>[Description brève de cette méthode]</description> <rationale>[Pourquoi cette approche pourrait être efficace]</rationale> </approche> <approche id="2"> <nom>[Nom de l'approche]</nom> <description>[Description brève de cette méthode]</description> <rationale>[Pourquoi cette approche pourrait être efficace]</rationale> </approche> <!-- Répéter pour chaque approche --> </decomposition>
2. Génération des différentes approches
On lance maintenant la génération des n chemins de pensées différentes. Exemple de prompt pour lancer la génération d'une approche :
Pour l'approche "[NOM_APPROCHE]" identifiée précédemment, développez maintenant un raisonnement complet. Contexte :** [RAPPEL_DU_PROBLÈME] Approche à développer : [DESCRIPTION_APPROCHE] Développez cette approche étape par étape en utilisant le format XML suivant : <raisonnement approche="[NOM_APPROCHE]"> <etape numero="1"> <action>[Que faites-vous à cette étape]</action> <justification>[Pourquoi cette étape est nécessaire]</justification> <resultat_partiel>[Résultat ou conclusion de cette étape]</resultat_partiel> </etape> <etape numero="2"> <action>[Que faites-vous à cette étape]</action> <justification>[Pourquoi cette étape est nécessaire]</justification> <resultat_partiel>[Résultat ou conclusion de cette étape]</resultat_partiel> </etape> <!-- Continuer jusqu'à la conclusion --> <conclusion_branche> <solution_proposee>[Solution finale de cette approche]</solution_proposee> <niveau_confiance>[Élevé/Moyen/Faible]</niveau_confiance> <limitations>[Limites identifiées de cette approche]</limitations> </conclusion_branche>
3. Evaluation des différentes approches
On va maintenant évaluer les différentes approches générées par le modèle. On peut par exemple donner un score de pertinence de 1 à 10.
Exemple de prompt :
[LISTE_DES_APPROCHES_AVEC_LEURS_SOLUTIONS] Pour chaque approche, fournissez une évaluation structurée : <evaluation> <approche id="[ID_APPROCHE]" nom="[NOM_APPROCHE]"> <criteres> <faisabilite score="[1-10]">[Commentaire sur la faisabilité]</faisabilite> <completude score="[1-10]">[La solution traite-t-elle tous les aspects ?]</completude> <robustesse score="[1-10]">[Résistance aux cas limites]</robustesse> <efficacite score="[1-10]">[Efficacité de la solution]</efficacite> </criteres> <score_global>[Moyenne des scores]</score_global> <forces> <force>[Point fort 1]</force> <force>[Point fort 2]</force> </forces> <faiblesses> <faiblesse>[Point faible 1]</faiblesse> <faiblesse>[Point faible 2]</faiblesse> </faiblesses> <recommandation>[Recommander/Écarter/Améliorer]</recommandation> </approche>
4. Stop ou encore ?
Cette étape permet d'automatiser complètement la ToT. On va analyser les résultats précédemment obtenus à l'étape 3 et évaluer la pertinence de relancer une génération des chemins restants. Nous allons alors simplement appliquer des conditions basiques (if / else) pour déterminer s'il est pertinent de continuer. Par exemple : Si le score d'une branche est supérieur à 8 / 10, on peut estimer qu'il est inutile de relancer et on passe à l'étape 5 de synthèse.
5. Synthèse des solutions optimales
Pour synthétiser les différentes solutions optimales trouvées par le modèle, on peut appliquer un prompt de synthèse et proposer une sortie unique. Exemple de prompt :
"Problème original : [PROBLÈME] Approches prometteuses : [LISTE_APPROCHES_SCORES_ÉLEVÉS] Analysez ces approches et fournissez la ou les solutions optimales. Fournissez ensuite une synthèse globale de réponse au problème initial."
La méthode simple en une étape
Pour éviter d'avoir à implémenter un framework complexe (comme celui proposé ci-dessus), vous pouvez inviter le modèle à utiliser une approche inspirée de la ToT via un prompt unique. Le résultat ne sera pas aussi efficace mais permet toutefois d'obtenir de bons résultats.
Exemple de prompt simple :
Vous allez résoudre ce problème en utilisant la méthode tree of thoughts. Explorez plusieurs chemins de raisonnement en parallèle avant de choisir la meilleure solution. PROBLÈME À RÉSOUDRE : [INSÉRER_VOTRE_PROBLÈME_ICI] INSTRUCTIONS : PHASE 1 : EXPLORATION INITIALE (Génération de branches) Identifiez n approches complètement différentes pour aborder ce problème. Pour chaque approche : Donnez-lui un nom descriptif Expliquez la logique en 1-2 phrases Identifiez le type de solution qu'elle produirait PHASE 2 : DÉVELOPPEMENT PARALLÈLE (Exploration des branches) Pour chaque approche prometteuse, développez le raisonnement en 2-3 étapes : Décrivez les actions concrètes à chaque étape Évaluez la viabilité : "Impossible" / "Incertain" / "Prometteur" Identifiez les obstacles potentiels Continuez seulement les branches "Prometteuses" ou "Incertaines" avec du potentiel PHASE 3 : ÉVALUATION CRITIQUE (Sélection) Pour chaque approche viable, donnez : Score de faisabilité (1-10) : Peut-on vraiment l'implémenter ? Score d'efficacité (1-10) : Résoudra-t-elle bien le problème ? Score de ressources (1-10) : Coût/effort raisonnable ? Score global et justification PHASE 4 : OPTIMISATION FINALE (Synthèse) Choisissez la meilleure approche OU combinez les meilleures idées Détaillez la solution optimisée en étapes concrètes Anticipez les difficultés et préparez des solutions de contournement FORMAT DE RÉPONSE : Structurez votre réponse en montrant clairement votre processus de pensée arborescent. Utilisez des sections, des sous-points, et indiquez vos choix de continuer/abandonner certaines branches.
La précision a un prix
Les différentes techniques de prompting qui émergent depuis l'arrivée des LLM sur le marché le démontrent toutes : avec l'IA générative, la précision a toujours un prix. Plus un modèle est invité à penser ou à reconsidérer ses réponses, plus il va générer de tokens. Son coût d'exploitation à l'inférence en sera donc plus important, que ce soit via une API ou en utilisant un modèle inféré localement. Et le cas de la ToT n'y échappe pas. Les chercheurs de DeepMind et Princeton estiment que la ToT nécessite 5 à 100 fois plus de tokens générés que la CoT.
Pour autant, les résultats de l'approche ToT seront beaucoup plus pertinents. Dans le jeu du 24 (atteindre le chiffre de 24 en utilisant les quatre numéros disponibles), GPT-4 avec du prompting chain-of-thought ne résolvait que 4% des problèmes, tandis qu'avec la ToT, le taux de réussite bondit à 74%. La ToT est donc à privilégier pour les cas d'usage qui nécessitent soit de la planification (un agent complexe) soit la résolution d'une tâche très complexe (nécessitant un multitude d'étapes pour arriver au résultat final).