{"notes":[{"id":"transformers/react","category":"transformers","legacyPath":"","legacySlug":"","legacyPaths":[],"title":"ReAct","subtitle":"Unir la pensée et l'action","author":"Z. Yuan","paperDate":"2022-10-06","publishedOn":"2026-07-03","world":"external/react","paperTitle":"ReAct: Synergizing Reasoning and Acting in Language Models","paperUrl":"https://arxiv.org/abs/2210.03629","bibliography":{"title":"ReAct: Synergizing Reasoning and Acting in Language Models","authors":["Shunyu Yao","Jeffrey Zhao","Dian Yu","Nan Du","Izhak Shafran","Karthik Narasimhan","Yuan Cao"],"url":"https://arxiv.org/abs/2210.03629","pdfUrl":"https://arxiv.org/pdf/2210.03629v3","codeUrl":null,"preprint":{"id":"2210.03629","submittedOn":"2022-10-06","url":"https://arxiv.org/abs/2210.03629"},"publication":null,"citation":"@misc{transformersreact2022,\n  title = {{ReAct: Synergizing Reasoning and Acting in Language Models}},\n  author = {Shunyu Yao and Jeffrey Zhao and Dian Yu and Nan Du and Izhak Shafran and Karthik Narasimhan and Yuan Cao},\n  year = {2022},\n  eprint = {2210.03629},\n  archivePrefix = {arXiv},\n  url = {https://arxiv.org/abs/2210.03629}\n}\n","citationPath":"/content/papers/citations/transformers/react.0a6bd417f7a8.bib"},"thumbnail":{"src":"/content/papers/assets/ae2cd6d5c68df8887227719a0ac6c5dee8763fa902af5af73260fdc0f1ca81cc.png","width":1122,"height":489},"locale":"fr","path":"/content/papers/fr/transformers/react.99766b59e927.md","headings":[{"id":"définir-le-problème","text":"Définir le problème","depth":2},{"id":"résoudre-le-problème","text":"Résoudre le problème","depth":2},{"id":"faire-de-la-pensée-une-action","text":"Faire de la pensée une action","depth":3},{"id":"un-outil-wikipédia-minimal","text":"Un outil Wikipédia minimal","depth":3},{"id":"comment-obtenir-ce-comportement-","text":"Comment obtenir ce comportement ?","depth":3},{"id":"quand-faut-il-se-faire-confiance-","text":"Quand faut-il se faire confiance ?","depth":3},{"id":"discussion","text":"Discussion","depth":2},{"id":"résultats-sur-les-tâches-de-connaissance","text":"Résultats sur les tâches de connaissance","depth":3},{"id":"où-se-trouvent-les-erreurs-","text":"Où se trouvent les erreurs ?","depth":3},{"id":"après-ajustement-les-petits-modèles-passent-devant","text":"Après ajustement, les petits modèles passent devant","depth":3},{"id":"au-delà-des-questions-réponses","text":"Au-delà des questions-réponses","depth":3},{"id":"on-peut-le-faire-sans-framework","text":"On peut le faire sans framework","depth":3},{"id":"conclusion","text":"Conclusion","depth":2}],"anchorAliases":{},"guide":null,"relatedReading":[]}],"text":"En 2022, le Chain-of-Thought (CoT) a montré une chose : demander à un grand modèle de langage de « réfléchir étape par étape » améliore nettement ses résultats en calcul et en raisonnement de bon sens.\n\nMais le CoT a un problème : tout se passe dans sa tête.\n\nLe modèle utilise les connaissances mémorisées dans ses paramètres. S'il se souvient mal d'un fait en cours de route, chaque étape suivante repose sur cette erreur, jusqu'à produire une réponse fausse au terme d'un raisonnement très ordonné.\n\nD'autres travaux faisaient déjà **agir** les modèles dans un environnement : planifier les mouvements d'un robot, cliquer sur une page web, appeler un moteur de recherche. Mais ces approches prédisaient surtout des actions, sans laisser beaucoup de place à une réflexion sur la situation.\n\nCet article de l'université de Princeton et de Google Research, équipe Brain, publié à ICLR 2023, propose d'alterner les deux : **réfléchir, agir, observer le résultat, puis réfléchir à l'étape suivante**. Les auteurs appellent cela ReAct, pour Reasoning et Acting.\n\nC'est aussi l'un des points de départ les plus souvent cités dans l'histoire des agents capables d'aller chercher eux-mêmes l'information.\n\n## Définir le problème\n\nCommençons par l'exemple de l'article. Il vient de HotpotQA, un jeu de questions-réponses à plusieurs sauts qui demande de combiner plusieurs sources de Wikipédia :\n\n> En dehors de l'Apple Remote, quel appareil permet de commander le logiciel pour lequel l'Apple Remote avait été conçu à l'origine ?\n\nIl faut d'abord identifier ce logiciel, puis chercher quels autres moyens permettent de le commander.\n\nLes auteurs font répondre le modèle de quatre façons :\n\n[![Quatre réponses à une question HotpotQA : Standard, CoT et Act-Only se trompent ; ReAct alterne réflexion et recherche et trouve la bonne réponse](/content/papers/assets/ae2cd6d5c68df8887227719a0ac6c5dee8763fa902af5af73260fdc0f1ca81cc.png)](/content/papers/assets/ae2cd6d5c68df8887227719a0ac6c5dee8763fa902af5af73260fdc0f1ca81cc.png)\n\n*Figure 1(1) de l'article, extraite de la [**page 2 du PDF v3**](https://arxiv.org/pdf/2210.03629v3#page=2), CC BY 4.0. Le rouge indique les erreurs ou hallucinations, le vert les informations exactes obtenues par la recherche. L'exemple ALFWorld de la moitié inférieure de l'original n'est pas reproduit.*\n\n**(1a) Standard** : le modèle répond directement « iPod ». Faux.\n\n**(1b) CoT** : il réfléchit étape par étape : « L'Apple Remote a été conçu pour l'Apple TV ; l'Apple TV peut être commandée par un iPhone, un iPad ou un iPod Touch. » Le raisonnement est fluide, mais sa première phrase est déjà fausse. Les passages en rouge sont des hallucinations. La réponse l'est aussi.\n\n**(1c) Act-Only** : chercher sans réfléchir. Le modèle cherche Apple Remote, puis Front Row, et trouve même « Front Row (software) ». Mais il n'arrive pas à transformer ces observations en réponse et finit par écrire « yes ».\n\n**(1d) ReAct** :\n\n- **Thought 1** : je dois chercher Apple Remote pour savoir avec quel logiciel il devait fonctionner.\n- **Act 1** : `Search[Apple Remote]`\n- **Obs 1** : Apple Remote est une télécommande lancée par Apple en 2005… initialement conçue pour commander le **centre multimédia Front Row**.\n- **Thought 2** : c'était donc Front Row. Je dois maintenant chercher ce qui permet aussi de le commander.\n- **Act 2** : `Search[Front Row]`\n- **Obs 2** : [Front Row] introuvable. Entrées proches : « Front Row Seat to Earth », « Front Row Motorsports », « Front Row (software) »…\n- **Thought 3** : je n'ai pas trouvé Front Row. Je vais chercher Front Row (software).\n- **Act 3** : `Search[Front Row (software)]`\n- **Obs 3** : Front Row est un ancien logiciel de centre multimédia…\n- **Thought 4** : Front Row (software) peut être commandé par l'Apple Remote ou les **touches de fonction du clavier**. Voilà la réponse.\n- **Act 4** : `Finish[keyboard function keys]`\n\nC'est correct.\n\nLa comparaison rend le problème très clair :\n\n- **Réfléchir sans vérifier** (CoT) laisse un souvenir erroné entraîner tout le raisonnement.\n- **Vérifier sans réfléchir** (Act) permet de trouver des informations sans savoir les exploiter.\n\nLes auteurs veulent savoir si **alterner raisonnement et action permet à chaque approche de compenser les faiblesses de l'autre**.\n\n## Résoudre le problème\n\n### Faire de la pensée une action\n\nLes auteurs décrivent d'abord le problème dans le cadre d'un agent.\n\nÀ l'instant $t$, l'agent reçoit une observation $o_t$ de l'environnement et choisit une action $a_t$ à partir du contexte accumulé, $c_t=(o_1,a_1,\\dots,o_{t-1},a_{t-1},o_t)$.\n\nL'idée de ReAct tient en une phrase : **élargir l'espace d'actions pour y inclure le langage**.\n\n$$\n\\hat{\\mathcal{A}}=\\mathcal{A}\\cup\\mathcal{L}\n$$\n\n$\\mathcal{A}$ contient les actions sur l'environnement, comme la recherche ; $\\mathcal{L}$ est l'espace du langage. Une « action » choisie dans $\\mathcal{L}$ est une **pensée**, ou thought.\n\nUne pensée ne modifie pas l'environnement et ne produit donc aucune observation nouvelle. Elle organise le contexte actuel et y écrit un résultat utilisable à l'étape suivante :\n\n$$\nc_{t+1}=(c_t,\\hat{a}_t)\n$$\n\nDans l'exemple, les pensées jouent plusieurs rôles : décomposer la question (Thought 1), extraire les faits importants (Thought 2 et 4), adapter le plan à un imprévu (Thought 3), puis formuler la réponse (Thought 4).\n\n### Un outil Wikipédia minimal\n\nPour HotpotQA et FEVER, les auteurs construisent une API Wikipédia très simple, avec trois actions :\n\n1. **`search[entity]`** : si l'entrée existe, renvoyer les cinq premières phrases de sa page ; sinon, les cinq entrées similaires les mieux classées par le moteur de recherche.\n2. **`lookup[string]`** : renvoyer la prochaine phrase de la page courante contenant cette chaîne, comme un Ctrl+F dans le navigateur.\n3. **`finish[answer]`** : soumettre la réponse et terminer la tâche.\n\nLes auteurs soulignent que ces actions récupèrent surtout de courts passages à partir de noms d'entrées exacts. Elles sont bien moins puissantes que les meilleurs systèmes de recherche lexicale ou neuronale de l'époque. C'est volontaire : ils veulent imiter la consultation humaine de Wikipédia et obliger le modèle à raisonner sur ce qu'il doit chercher.\n\nFEVER est un jeu de vérification de faits : chaque affirmation doit être classée comme étayée, réfutée ou insuffisamment documentée. Dans les deux tâches, le modèle ne reçoit que la question ou l'affirmation, sans passage de référence.\n\n### Comment obtenir ce comportement ?\n\nLes expériences principales n'entraînent aucun nouveau modèle. Elles utilisent PaLM-540B gelé, avec seulement quelques démonstrations dans le prompt.\n\nLes auteurs tirent au hasard six questions HotpotQA et trois affirmations FEVER dans les jeux d'entraînement. Ils rédigent à la main les trajectoires complètes « pensée, action, observation » et les placent comme exemples dans le prompt. Ajouter davantage d'exemples n'apportait rien, précisent-ils.\n\nL'inférence peut s'écrire comme une boucle :\n\n```python\ndef react(question, llm, tools, examples, max_steps=7):\n    prompt = examples + f\"Question: {question}\\n\"\n    for step in range(1, max_steps + 1):\n        # Le modèle écrit la pensée et l'action de cette étape, par exemple :\n        # \"Thought 2: ...\\nAct 2: Search[Front Row]\"\n        output = llm(prompt, stop=[f\"Obs {step}:\"])\n        prompt += output\n\n        action, arg = parse_action(output)          # Par exemple (\"search\", \"Front Row\")\n        if action == \"finish\":\n            return arg\n\n        observation = tools[action](arg)            # Appel à l'API Wikipédia\n        prompt += f\"\\nObs {step}: {observation}\\n\"  # Ajout de l'observation au prompt\n    return None                                     # Budget épuisé sans réponse\n```\n\nCe code illustre la description de l'article. Le point décisif est `stop` : après la pensée et l'action, le modèle s'arrête. Le programme exécute réellement la recherche, puis ajoute le résultat comme observation. Celle-ci vient de l'environnement, pas d'une invention du modèle.\n\n\n> [!TIP]\n> \n> **À quelle fréquence faut-il réfléchir ?**\n> \n> Pour HotpotQA et FEVER, dominés par le raisonnement, pensées et actions alternent strictement : chaque action est précédée d'une pensée.\n> \n> Dans ALFWorld, une aventure textuelle, une tâche peut demander des dizaines d'actions, comme « aller au plan de travail 1 » ou « ouvrir le tiroir 2 ». Réfléchir à chaque fois serait peu pratique. Le modèle décide donc lui-même quand insérer une pensée, généralement pour planifier, suivre son avancement ou modifier son plan.\n\n\n### Quand faut-il se faire confiance ?\n\nL'analyse montre des qualités complémentaires : ReAct s'appuie davantage sur des faits, tandis que CoT organise mieux la structure du raisonnement.\n\nLes auteurs proposent donc deux hybrides. CoT-SC est ici la version à auto-cohérence, ou self-consistency : échantillonner 21 raisonnements à une température de 0,7, puis retenir la réponse majoritaire.\n\n- **ReAct → CoT-SC** : si ReAct n'a pas répondu dans le budget d'étapes, revenir à CoT-SC. HotpotQA autorise sept étapes, FEVER cinq. Parmi les trajectoires correctes, seules 0,84 % et 1,33 % utilisent respectivement les sept ou cinq étapes complètes.\n- **CoT-SC → ReAct** : si, parmi $n$ échantillons CoT-SC, la réponse la plus fréquente apparaît moins de $n/2$ fois, la confiance dans les connaissances du modèle est faible ; on passe à ReAct pour vérifier.\n\n## Discussion\n\n### Résultats sur les tâches de connaissance\n\n| Méthode | HotpotQA (EM) | FEVER (exactitude) |\n| --- | ---: | ---: |\n| Standard | 28,7 | 57,1 |\n| CoT | 29,4 | 56,3 |\n| CoT-SC | 33,4 | 60,4 |\n| Act | 25,7 | 58,9 |\n| ReAct | 27,4 | 60,9 |\n| CoT-SC → ReAct | 34,2 | **64,6** |\n| ReAct → CoT-SC | **35,1** | 62,0 |\n| Meilleur système supervisé | 67,5 | 89,5 |\n\n*Synthèse du tableau 1 ; le modèle est PaLM-540B.*\n\nComparons d'abord ReAct et Act : ReAct gagne sur les deux tâches. Avec le même accès à la recherche, ajouter de la réflexion change la capacité à assembler une réponse.\n\nFace à CoT, ReAct gagne sur FEVER, 60,9 contre 56,3, mais perd légèrement sur HotpotQA, 27,4 contre 29,4. Les auteurs expliquent que, dans FEVER, un petit détail suffit parfois à faire passer une affirmation d'étayée à réfutée. Trouver une information exacte devient alors crucial.\n\nLes meilleurs résultats viennent des hybrides : 35,1 pour ReAct → CoT-SC sur HotpotQA, et 64,6 pour CoT-SC → ReAct sur FEVER. Les courbes selon le nombre d'échantillons montrent aussi que trois à cinq échantillons suffisent aux hybrides pour égaler CoT-SC avec 21 échantillons.\n\nRegardez toutefois la dernière ligne : toutes ces méthodes par prompt restent loin des meilleurs systèmes supervisés. Les 67,5 de HotpotQA et 89,5 de FEVER viennent de modèles entraînés spécifiquement.\n\n### Où se trouvent les erreurs ?\n\nPour comprendre l'écart entre ReAct et CoT sur HotpotQA, les auteurs prélèvent pour chacun 50 trajectoires correctes et 50 incorrectes, soit 200 au total, puis annotent manuellement leurs types de réussite et d'échec :\n\n| Type | Description | ReAct | CoT |\n| --- | --- | ---: | ---: |\n| Réussite : vrai positif | Raisonnement et faits exacts | 94 % | 86 % |\n| Réussite : faux positif | Bonne réponse, mais raisonnement ou faits inventés | 6 % | 14 % |\n| Échec : raisonnement | Raisonnement erroné, y compris répétition de mêmes étapes | 47 % | 16 % |\n| Échec : recherche | Aucun résultat ou aucune information utile | 23 % | — |\n| Échec : hallucination | Raisonnement ou faits inventés | 0 % | 56 % |\n| Échec : ambiguïté de l'étiquette | Réponse correcte, formulée autrement que la référence | 29 % | 28 % |\n\n*Synthèse du tableau 2. Les proportions sont calculées séparément parmi les réussites et parmi les échecs.*\n\nCe tableau mérite qu'on s'y arrête.\n\n**L'hallucination est le principal problème de CoT.** Elle représente 56 % de ses réponses incorrectes. Même parmi ses bonnes réponses, 14 % reposent sur un raisonnement inventé qui tombe juste par hasard. Parmi les échecs de ReAct, la part des hallucinations est de 0 %.\n\n**ReAct a cependant ses propres défauts.** Les erreurs de raisonnement représentent 47 % de ses échecs, contre 16 % pour CoT. Les auteurs observent un comportement particulier : le modèle répète ses pensées et actions précédentes sans parvenir à sortir de la boucle. L'alternance pensée, action, observation ancre le raisonnement, mais le rend moins souple.\n\n**Une recherche infructueuse peut faire dérailler ReAct.** Dans 23 % des échecs, aucun contenu utile n'est retrouvé, et le modèle peine à réorganiser son raisonnement.\n\nLes auteurs constatent aussi que certaines réponses de référence HotpotQA sont devenues obsolètes.\n\n### Après ajustement, les petits modèles passent devant\n\nAvec les seuls prompts, ReAct est la moins bonne des quatre méthodes sur PaLM-8B et 62B. Les petits modèles ont du mal à apprendre à la fois raisonnement et action à partir de quelques exemples.\n\nLes auteurs les ajustent ensuite sur 3 000 trajectoires correctes produites par ReAct lui-même. La situation s'inverse :\n\n- PaLM-8B ReAct ajusté bat toutes les méthodes par prompt de PaLM-62B.\n- PaLM-62B ReAct ajusté bat toutes les méthodes par prompt de PaLM-540B.\n\nAjuster Standard ou CoT donne des résultats bien plus faibles. Selon les auteurs, ces approches apprennent surtout à mémoriser des faits éventuellement hallucinés ; ReAct enseigne comment raisonner et consulter Wikipédia, des compétences plus faciles à généraliser.\n\n### Au-delà des questions-réponses\n\nLes auteurs testent également deux tâches de décision interactive :\n\n- **ALFWorld** : un jeu textuel de tâches domestiques, par exemple trouver un poivrier et le placer dans un tiroir. Le meilleur essai ReAct atteint 71 % de réussite moyenne, contre 45 % pour le meilleur Act sans réflexion et 37 % pour BUTLER, une méthode d'apprentissage par imitation.\n- **WebShop** : un site marchand simulé contenant 1,18 million de produits réels ; l'agent doit trouver celui qui correspond à la description de l'utilisateur.\n\nLe résumé indique qu'avec seulement une ou deux démonstrations, ReAct améliore la réussite de 34 et 10 points de pourcentage sur ces tâches par rapport, respectivement, aux méthodes d'imitation et de renforcement. Celles-ci utilisent entre $10^3$ et $10^5$ exemples d'entraînement propres aux tâches.\n\n### On peut le faire sans framework\n\nReAct séduit aussi par sa simplicité : un framework est presque superflu.\n\nEn mars 2023, Simon Willison publie une [**implémentation Python très simple**](https://til.simonwillison.net/llms/python-react-pattern) avec `gpt-3.5-turbo`. Le prompt système demande d'écrire Thought, Action, PAUSE et Observation, puis Answer. Une expression régulière extrait la ligne `Action:` ; le programme exécute l'outil correspondant, recherche Wikipédia, recherche dans son blog ou calculatrice, puis renvoie le résultat comme `Observation:`, pour cinq tours au maximum.\n\nIl avertit aussi que sa calculatrice appelle directement `eval()` de Python, ce qui est très dangereux et devrait être isolé dans un bac à sable tel que WebAssembly. L'implémentation reste d'ailleurs peu robuste.\n\nDès que le modèle choisit les outils à appeler, sécurité et robustesse deviennent des problèmes d'ingénierie incontournables. L'article les traite assez peu.\n\n## Conclusion\n\nReAct apporte un changement central : **ajouter la pensée à l'espace d'actions de l'agent**, pour faire alterner raisonnement et action.\n\nLes résultats de l'article montrent que :\n\n1. **Chercher sans réfléchir exploite mal l'information.** Avec les mêmes outils, ReAct bat Act sur HotpotQA et FEVER.\n2. **Réfléchir sans vérifier favorise les hallucinations.** Elles expliquent 56 % des échecs de CoT et 0 % de ceux de ReAct ; ReAct commet toutefois plus d'erreurs de raisonnement et peut tourner en boucle.\n3. **Les combiner donne les meilleurs résultats.** Passer de ReAct à CoT-SC, ou l'inverse, selon la confiance ou le budget d'étapes produit les meilleurs scores par prompt sur les deux tâches.\n4. **L'ajustement amplifie l'effet.** Avec 3 000 trajectoires, de petits modèles ReAct dépassent les méthodes par prompt de modèles plus grands.\n\nCes approches restent loin des systèmes entraînés spécifiquement, et les outils Wikipédia ont été volontairement limités.\n\nMais la boucle « réfléchir, chercher, observer, réfléchir à nouveau » a perduré. Les coding agents qui recherchent des fichiers et exécutent des commandes suivent à peu près le même principe. Les trois actions Wikipédia ont simplement laissé place à grep, à la lecture de fichiers et au terminal.\n","imageSizes":{"/content/papers/assets/ae2cd6d5c68df8887227719a0ac6c5dee8763fa902af5af73260fdc0f1ca81cc.png":{"width":1122,"height":489}}}
