{"id":8595,"date":"2026-05-06T08:59:57","date_gmt":"2026-05-06T06:59:57","guid":{"rendered":"https:\/\/www.leviatan.io\/blog\/?p=8595"},"modified":"2026-05-06T08:59:58","modified_gmt":"2026-05-06T06:59:58","slug":"framework-recursif-mit-10m-tokens","status":"publish","type":"post","link":"https:\/\/www.leviatan.io\/blog\/framework-recursif-mit-10m-tokens\/","title":{"rendered":"Framework r\u00e9cursif MIT : 10M tokens pour vos LLMs"},"content":{"rendered":"<h2><span style=\"font-weight: 400;\">Comment les RLM d\u00e9passent les limites des context windows<\/span><\/h2>\n<p><span style=\"font-weight: 400;\">Les LLM classiques plafonnent entre 150K et 800K tokens effectifs, m\u00eame si certains annoncent 1 M ou 10 M. GPT-5.2 g\u00e8re 400K (250K effectifs), Claude Opus 4.5 atteint 200K (150K), Gemini 3 Pro monte \u00e0 1 M (800K) et Llama 4 Scout s\u2019approche de 10 M (8 M effectifs). Pour un CTO, ces limites se traduisent en analyses partielles, hallucinations et co\u00fbts exponentiels. Ce ph\u00e9nom\u00e8ne appel\u00e9 \u201ccontext rot\u201d se manifeste par une d\u00e9gradation de la qualit\u00e9 au fur et \u00e0 mesure que le prompt s&rsquo;allonge, et il varie en fonction de la complexit\u00e9 de la t\u00e2che : sur OOLONG (t\u00e2che lin\u00e9aire) et OOLONG-Pairs (t\u00e2che quadratique), GPT-5 chute brutalement d\u00e8s 16K-33K tokens, tandis que sur S-NIAH (needle-in-a-haystack \u00e0 complexit\u00e9 constante), il reste robuste jusqu&rsquo;\u00e0 1M tokens.<\/span><\/p>\n<h3><span style=\"font-weight: 400;\">Du standard transformer au framework r\u00e9cursif<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">MIT CSAIL a d\u00e9voil\u00e9 un paradigme compl\u00e9mentaire aux transformers : les Recursive Language Models (RLM). Plut\u00f4t que de tout charger en m\u00e9moire, le RLM d\u00e9coupe le corpus en chunks, le stocke en externe et le mod\u00e8le racine (le mod\u00e8le qui pilote) g\u00e9n\u00e8re du code Python qui appelle r\u00e9cursivement llm_query(). Chaque appel produit un r\u00e9sum\u00e9 compress\u00e9 port\u00e9 vers l\u2019appel suivant, jusqu\u2019\u00e0 fusion hi\u00e9rarchique des r\u00e9sultats. Plus pr\u00e9cis\u00e9ment, le RLM initialise un environnement REPL persistant dans lequel le prompt P est charg\u00e9 comme variable, et seule une m\u00e9tadonn\u00e9e de taille constante (longueur, court pr\u00e9fixe, m\u00e9thode d&rsquo;acc\u00e8s) est transmise au mod\u00e8le racine (jamais le prompt entier). \u00c0 chaque it\u00e9ration, le mod\u00e8le \u00e9crit du code, observe `stdout`, et la boucle s&rsquo;arr\u00eate uniquement quand la variable `Final` est d\u00e9finie dans le REPL.<\/span><\/p>\n<h3><span style=\"font-weight: 400;\">Les trois choix de design qui distinguent les RLM des autres scaffolds<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">Le papier insiste sur trois propri\u00e9t\u00e9s essentielles que les approches concurrentes (`CodeAct`, `ReAct`, `summary agents`, `sub-agent delegation`) ne combinent jamais simultan\u00e9ment :<\/span><\/p>\n<ol>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Handle symbolique sur le prompt : le LLM ne re\u00e7oit jamais P directement, ce qui \u00e9limine la d\u00e9pendance \u00e0 la fen\u00eatre de contexte du mod\u00e8le de base.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Pas de sortie autor\u00e9gressive impos\u00e9e : le mod\u00e8le peut construire des r\u00e9ponses arbitrairement longues en stockant des fragments dans des variables, puis en les concat\u00e9nant programmatiquement, d\u00e9passant ainsi la limite de tokens de sortie du LLM.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">R\u00e9cursion symbolique : le code dans l&rsquo;environnement peut invoquer le LLM dans des boucles arbitrairement larges, autorisant un nombre lin\u00e9aire de sous-appels (proportionnel \u00e0 la taille du prompt) ou m\u00eame quadratique (proportionnel \u00e0 son carr\u00e9), chose impossible avec les <\/span><span style=\"font-weight: 400;\">d\u00e9l\u00e9gations<\/span><span style=\"font-weight: 400;\"> verbales d&rsquo;agents de type Claude Code ou THREAD.<\/span><\/li>\n<\/ol>\n<h3><span style=\"font-weight: 400;\">Scalabilit\u00e9 et \u00e9conomies radicales<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">Ce d\u00e9coupage hi\u00e9rarchique permet de franchir la barre des 10 M de tokens (soit l\u2019\u00e9quivalent de 20\u201325 romans, plusieurs codebases ou centaines de papiers) tout en conservant un \u00e9tat m\u00e9moire constant. Selon Dmitry Labintcev, d\u00e9veloppeur du RLM-Toolkit, cette m\u00e9thode entra\u00eene une baisse de co\u00fbts de 80\u201390 % : <\/span><span style=\"font-weight: 400;\">les co\u00fbts <\/span><span style=\"font-weight: 400;\">passent de 15\u201330 $ par analyse large \u00e0 seulement 1\u20133 $.<\/span><\/p>\n<h2><span style=\"font-weight: 400;\">M\u00e9canismes cl\u00e9s du cadre r\u00e9cursif MIT<\/span><\/h2>\n<h3><span style=\"font-weight: 400;\">G\u00e9n\u00e9ration de code et appels llm_query<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">Le mod\u00e8le produit du code Python pour explorer le fichier de donn\u00e9es via la fonction `llm_query()`, agissant comme un REPL externe. Chaque invocation traite un chunk, d\u00e9tecte les patterns et renvoie un r\u00e9sum\u00e9 interm\u00e9diaire. Le processus se r\u00e9p\u00e8te jusqu\u2019\u00e0 produire un FINAL(answer) global. Dans l&rsquo;impl\u00e9mentation MIT, le LLM dispose en r\u00e9alit\u00e9 de deux balises distinctes : FINAL(response) pour renvoyer une cha\u00eene directement, et FINAL_VAR(variabl_name) pour renvoyer le contenu d&rsquo;une variable construite dans le REPL \u2014 c&rsquo;est ce second m\u00e9canisme qui permet de produire des sorties arbitrairement longues, en accumulant les r\u00e9sultats de sous-appels dans une variable Python avant retour final.<\/span><\/p>\n<h3><span style=\"font-weight: 400;\">Compression d\u2019\u00e9tat et fusion hi\u00e9rarchique<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">Au lieu de recharger tout le prompt, seules les m\u00e9tadonn\u00e9es de stdout (pr\u00e9fixe court et longueur) sont transmises au mod\u00e8le racine pour l&rsquo;it\u00e9ration suivante, l&rsquo;\u00e9tat complet restant stock\u00e9 comme variables dans le REPL. Cette approche r\u00e9duit le contexte rot et assure des performances stables au-del\u00e0 de plusieurs millions de tokens. Plus pr\u00e9cis\u00e9ment, le m\u00e9canisme repose sur trois patterns \u00e9mergents observ\u00e9s dans les trajectoires : (1) chunking par newlines ou marqueurs s\u00e9mantiques pour les contextes denses comme OOLONG, (2) filtrage par regex bas\u00e9 sur les priors du mod\u00e8le (ex : RLM(GPT-5) cherche \u00ab\u00a0festival\u00a0\u00bb, \u00ab\u00a0La Union\u00a0\u00bb dans BrowseComp-Plus avant tout sous-appel), et (3) accumulation de sous-r\u00e9sultats dans des buffers variables pour reconstituer une r\u00e9ponse longue.<\/span><\/p>\n<h2><span style=\"font-weight: 400;\">Performance et co\u00fbt : un nouveau ratio<\/span><\/h2>\n<h3><span style=\"font-weight: 400;\">Baisse de co\u00fbts de 80\u201390 %<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">En mode classique, l\u2019input co\u00fbte environ 0,10 $ par million de tokens et l\u2019output 0,40 $ par million. Avec 20 $ de budget et un ratio 5:1, un LLM classique permet de traiter 111,1 M de tokens en input pour 22,2 M output. En RLM, ce m\u00eame budget couvre 166,7 M input et 8,3 M output gr\u00e2ce \u00e0 la compression et aux appels cibl\u00e9s.<\/span><\/p>\n<h3><span style=\"font-weight: 400;\">Benchmarks long-context<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">Un mod\u00e8le de 8 milliards de param\u00e8tres, gr\u00e2ce \u00e0 cette architecture, surpasse les plus grosses configurations de 28,3 % sur t\u00e2ches long-context. Sur des challenges complexes, la pr\u00e9cision monte de moins de 1 % \u00e0 plus de 58 %.<\/span><\/p>\n<h2><span style=\"font-weight: 400;\">Enjeux et perspectives pour les CTO<\/span><\/h2>\n<h3><span style=\"font-weight: 400;\">Risques techniques et complexit\u00e9<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">Si la scalabilit\u00e9 \u00e0 10 M+ est prouv\u00e9e (jusqu\u2019\u00e0 11M sur BrowseComp-Plus), la performance reste d\u00e9pendante de la qualit\u00e9 du chunking, des r\u00e9sum\u00e9s et de la gestion des erreurs cumul\u00e9es. La g\u00e9n\u00e9ration de code ajoute un overhead qu\u2019il faut optimiser pour \u00e9viter les latences.<\/span><\/p>\n<h3><span style=\"font-weight: 400;\">Mod\u00e8le vs scaffold : un trade-off \u00e0 anticiper<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">Sur les contextes courts (8K tokens), un LLM de base bat son \u00e9quivalent RLM. La r\u00e9cursion introduit un overhead de raisonnement non productif quand la t\u00e2che tient d\u00e9j\u00e0 nativement dans la fen\u00eatre. Le RLM n&rsquo;est donc pas une solution universelle, mais une strat\u00e9gie \u00e0 activer dynamiquement au-del\u00e0 d&rsquo;un seuil de complexit\u00e9 (taille de prompt \u00d7 densit\u00e9 d&rsquo;information). Une bonne architecture combinera probablement les deux : LLM direct sur petits prompts, bascule en RLM au-del\u00e0 d&rsquo;un threshold<\/span><\/p>\n<h3><span style=\"font-weight: 400;\">Adoption et ROI attendu<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">\u00c0 l\u2019horizon 2026, les LLM long-context domineront les usages documentaires et RLM deviendra le paradigme post-RAG avec un toolkit open-source d\u00e9j\u00e0 disponible. Pour un CTO, investir dans le framework r\u00e9cursif, c\u2019est multiplier la fen\u00eatre contextuelle, r\u00e9duire fortement la facture cloud et am\u00e9liorer la fiabilit\u00e9 des extractions d\u2019informations sur de larges corpus.<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>D\u00e9couvrez comment l&rsquo;approche r\u00e9cursive du MIT permet de traiter plus de 10 M de tokens, d\u2019accro\u00eetre la pr\u00e9cision de +58 % et de r\u00e9duire les co\u00fbts de 80 %.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[2],"tags":[],"_links":{"self":[{"href":"https:\/\/www.leviatan.io\/blog\/wp-json\/wp\/v2\/posts\/8595"}],"collection":[{"href":"https:\/\/www.leviatan.io\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.leviatan.io\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.leviatan.io\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.leviatan.io\/blog\/wp-json\/wp\/v2\/comments?post=8595"}],"version-history":[{"count":2,"href":"https:\/\/www.leviatan.io\/blog\/wp-json\/wp\/v2\/posts\/8595\/revisions"}],"predecessor-version":[{"id":8670,"href":"https:\/\/www.leviatan.io\/blog\/wp-json\/wp\/v2\/posts\/8595\/revisions\/8670"}],"wp:attachment":[{"href":"https:\/\/www.leviatan.io\/blog\/wp-json\/wp\/v2\/media?parent=8595"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.leviatan.io\/blog\/wp-json\/wp\/v2\/categories?post=8595"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.leviatan.io\/blog\/wp-json\/wp\/v2\/tags?post=8595"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}