Índice
7 min de leitura

Fazer um LLM escrever código para ler 10 milhões de tokens - Como funciona o RLM

Uma janela de contexto maior não torna a IA mais inteligente. O RLM muda o jogo ao permitir que LLMs escrevam código para ler seletivamente documentos massivos.

Todo mundo ficou empolgado quando as janelas de contexto saltaram de 8K para 128K, depois para 1M e além. A narrativa era simples: quanto mais contexto, mais inteligente o modelo. Só que na prática não foi isso que aconteceu. Pesquisadores documentaram um fenômeno que chamaram de Context Rot - a degradação silenciosa da qualidade das respostas conforme você joga mais texto na janela de contexto. E é exatamente aí que o RLM entra.

Context Rot: Por que janela maior não resolve

Quando você despeja um documento de 500 mil tokens numa janela de contexto de 1M, o modelo não lê tudo com a mesma atenção. A atenção é finita. Informações no meio do documento tendem a ser ignoradas - o famoso problema “lost in the middle”. Além disso, o custo computacional cresce de forma quadrática com o tamanho do contexto, o que significa latência maior e contas mais salgadas.

Na prática, o que acontece é o seguinte: você acha que está dando mais informação pro modelo, mas está na verdade diluindo o sinal no meio do ruído. O modelo fica com mais texto para processar e menos capacidade de focar no que importa. É como dar um livro de 800 páginas pra alguém e pedir uma resposta em 30 segundos - a pessoa vai chutar.

A solução ingênua seria “vamos aumentar a janela de contexto pra 10M”. Mas isso só empurra o problema pra frente. O RLM propõe algo radicalmente diferente: em vez de enfiar tudo na janela de contexto, deixe o próprio LLM decidir o que ler.

A ideia central do RLM: armazene em Python, deixe o LLM programar a leitura

O Recursive Language Model (RLM) inverte a lógica. Em vez de alimentar o modelo com o documento inteiro, o RLM armazena o conteúdo em estruturas Python acessíveis programaticamente - listas, dicionários, DataFrames, o que for mais adequado. O LLM então escreve código Python para navegar, filtrar e extrair apenas as partes relevantes.

Pense assim: em vez de ler um livro inteiro, o modelo recebe acesso a um índice e uma biblioteca, e escreve scripts para buscar exatamente os trechos que precisa. Isso muda completamente a dinâmica. O modelo não precisa mais “lembrar” de 10 milhões de tokens - ele precisa ser bom em escrever código de busca.

Os três componentes: Orchestrator, LMHandler e Environment

A arquitetura do RLM é elegante e composta por três peças:

Orchestrator - O cérebro do sistema. Ele gerencia o fluxo de execução, decide quando o modelo precisa explorar mais dados, quando decompor uma pergunta em subperguntas, e quando já tem informação suficiente para responder. Pense nele como o gerente de projeto que coordena tudo.

LMHandler - A interface com o LLM propriamente dito. Recebe prompts do Orchestrator, envia para o modelo e devolve as respostas. Ele abstrai qual modelo está sendo usado, permitindo trocar entre diferentes LLMs sem mexer no resto da arquitetura.

Environment / REPL com llm_query() - Aqui é onde a mágica acontece. O ambiente executa o código Python que o LLM gera. Dentro desse ambiente, existe uma função especial chamada llm_query() que permite ao código gerado fazer sub-consultas ao próprio LLM. Isso cria a recursão: o modelo escreve código que consulta a si mesmo para processar partes menores do documento.

Essa função llm_query() é o diferencial. Ela transforma o LLM de um leitor passivo em um agente ativo que pode decompor problemas arbitrariamente complexos em pedaços gerenciáveis.

Fluxo de execução: Explore, Decompose, Aggregate, Terminate

O RLM opera em quatro fases que se repetem recursivamente:

Explore - O modelo recebe a pergunta e uma visão geral dos dados disponíveis. Ele escreve código para explorar a estrutura: quais campos existem, quantos registros tem, qual o formato. É a fase de reconhecimento de terreno.

Decompose - Com base na exploração, o modelo decide como quebrar o problema. Se a pergunta é “qual o tema mais recorrente nesses 10 mil artigos?”, ele pode dividir em lotes de 500 artigos e escrever código para analisar cada lote separadamente usando llm_query().

Aggregate - Os resultados parciais voltam e o modelo escreve código para combiná-los. Não é um simples concatenar - o modelo pode usar lógica sofisticada para cruzar, filtrar e sintetizar os resultados parciais em uma resposta coerente.

Terminate - Quando o modelo determina que tem informação suficiente para responder a pergunta original, ele para a recursão e gera a resposta final. Sem essa condição de parada explícita, o sistema poderia ficar em loop infinito.

O bonito dessa abordagem é que a profundidade da recursão se adapta automaticamente à complexidade da pergunta. Perguntas simples terminam rápido; perguntas que exigem análise cruzada de milhões de tokens se desdobram em várias camadas.

A conexão com Ralph Wiggum

Se o nome RLM te lembrou alguma coisa, não é coincidência. Os autores do paper batizaram a abordagem inspirados no Ralph Wiggum, personagem dos Simpsons - aquele garoto que parece desligado mas de vez em quando solta uma verdade profunda. A analogia é que o modelo, individualmente, pode parecer limitado (janela de contexto restrita), mas quando equipado com as ferramentas certas - a capacidade de escrever e executar código recursivamente - ele consegue processar volumes de informação que pareceriam impossíveis pra ele sozinho.

É uma metáfora simpática que esconde uma insight séria: a inteligência do sistema não está na capacidade bruta do modelo, mas na arquitetura que amplifica essa capacidade.

Dicas práticas pra quem quer aplicar a ideia

Você não precisa implementar o RLM completo pra se beneficiar dos princípios por trás dele. Aqui vão algumas aplicações diretas:

Estruture seus dados antes de consultar. Em vez de colar um JSON gigante no prompt, carregue-o em um DataFrame e deixe o modelo escrever queries. Isso funciona hoje com qualquer LLM que tenha code interpreter.

Use llm_query() como padrão mental. Quando uma tarefa parece grande demais pra uma única chamada de LLM, pergunte-se: “posso decompor isso em sub-consultas que um modelo menor resolveria?” Na maioria das vezes, a resposta é sim.

Combine com RAG, não substitua. O RLM não invalida Retrieval-Augmented Generation. RAG é ótimo pra encontrar documentos relevantes. O RLM brilha quando você já sabe quais documentos importam mas eles são grandes demais pra caber no contexto. Use RAG pra filtrar e RLM pra analisar.

Monitore a profundidade da recursão. Em implementações reais, defina um limite máximo de recursão. Sem isso, um prompt mal formulado pode gerar uma cadeia infinita de sub-consultas que vai queimar sua cota de API em minutos.

Conclusão

O RLM representa uma mudança de paradigma na forma como pensamos sobre limitações de contexto. Em vez de tratar a janela de contexto como um balde que precisa ser maior, ele trata o LLM como um programador que pode buscar informação sob demanda. A janela de contexto deixa de ser o gargalo e passa a ser apenas o espaço de trabalho onde o modelo planeja e executa suas buscas.

O mais interessante é que essa abordagem escala naturalmente. 10 milhões de tokens hoje, 100 milhões amanhã - o limite deixa de ser a memória do modelo e passa a ser a qualidade do código que ele escreve para navegar os dados.

Se você trabalha com documentos longos, bases de conhecimento corporativas ou qualquer cenário onde o volume de texto ultrapassa o que cabe numa janela de contexto, vale a pena estudar o RLM. Não como uma biblioteca pronta pra instalar, mas como um framework mental que muda a forma como você arquiteta sistemas baseados em LLMs.

Assine a newsletter

Receba atualizações sobre meus projetos mais recentes, artigos e experimentos com IA e desenvolvimento web.