Ao usar um agente de programação como o Claude Code, aparece na parte inferior da tela o aviso “Context left until auto-compact: 8%”. É um indicador que não vemos em IAs de chat. Poucas pessoas conseguem explicar por que ele diminui ou o que acontece quando chega a 0. Se você deixou claro no início da sessão “não mexa nos testes” e, uma hora depois, o agente altera tranquilamente um arquivo de teste, quase certamente esse número tem relação com o problema.
Este artigo é a primeira parte de uma série sobre o contexto de agentes de IA, dos fundamentos à prática. Técnicas como saber quando usar /compact e /clear ou por que dividir o trabalho com subagentes dependem da restrição de que “a janela de contexto é finita”. Por isso, começamos pela base: o que é exatamente uma janela de contexto e por que ela não pode crescer indefinidamente, usando três chaves: tokens, atenção e cache KV.
Tokens, a unidade que a IA usa para contar texto
A unidade da janela de contexto não é caractere nem palavra, mas token. Um LLM não lê o texto inteiro; recebe uma sequência de fragmentos divididos pelo tokenizador. O critério vem de algoritmos da família BPE (Byte Pair Encoding) e é simples: combinações de caracteres que aparecem frequentemente juntas nos dados de treinamento são agrupadas. Combinações comuns como “the” e “ing” viram um token; palavras raras são divididas em vários fragmentos.
Aqui está um fato importante para quem usa coreano. Como os dados de treinamento do tokenizador são dominados pelo inglês, o mesmo conteúdo normalmente usa de 1,5 a 2 vezes mais tokens em coreano. Uma “janela de contexto de 200 mil tokens” equivale a dois romances longos em documentos em inglês, mas a capacidade percebida cai bastante com documentos em coreano.
A janela de contexto é a “quantidade máxima que o modelo consegue ler de uma vez”, medida em tokens. O prompt do sistema, o histórico da conversa, os documentos anexados e a resposta que o modelo está gerando precisam caber nesse limite.
Por que o contexto dos agentes enche tão rápido?
O primeiro fato a entender sobre LLMs é que o modelo é uma máquina sem estado (stateless). Depois de processar uma solicitação, ele não salva seu conteúdo em lugar algum. Para o modelo, não existiu nem a conversa de ontem, nem sequer o turno imediatamente anterior.
Então como a conversa continua? A resposta é simples: a aplicação reenvia, a cada turno, todo o histórico desde o prompt do sistema até o momento atual. Ao escrever a décima resposta, o modelo não “lembra” das nove anteriores; ele acabou de relê-las desde o começo.
Em uma IA de chat, o histórico contém apenas as frases digitadas pela pessoa e as respostas do modelo, então cresce devagar. Com agentes é diferente: cada turno envolve chamadas de ferramentas. Ler um arquivo adiciona todo o seu conteúdo ao contexto; executar testes adiciona centenas de linhas de logs de falha; pesquisar adiciona todos os resultados. O usuário digitou apenas “corrija o bug”, mas, se o agente ler dez arquivos e executar o build três vezes, esse turno consumirá dezenas de milhares de tokens. É por isso que agentes de programação exibem o contexto restante: algo que levaria dias para se esgotar no chat pode acabar em uma ou duas horas com um agente.
Quando o limite é atingido, a aplicação precisa descartar algo. Ela pode cortar os turnos mais antigos ou comprimi-los em um resumo. Se uma instrução como “não mexa nos testes”, definida no início da sessão, for expulsa nesse processo, o modelo começa o turno seguinte sem ter feito esse acordo. A memória não piorou: ela nunca existiu, e a instrução apenas saiu da área que pode ser lida.
Primeiro motivo da limitação: o custo quadrático da atenção
Então não bastaria aumentar a janela para cerca de 100 milhões de tokens? A atenção (attention), operação central do Transformer, impede isso.
Ao processar um token novo, a atenção calcula o quanto ele se relaciona com todos os tokens anteriores. Se o código contém a variável user, é essa capacidade que permite conectá-la à declaração 3 mil linhas atrás. Ela faz o LLM parecer entender o contexto e, ao mesmo tempo, é a origem do custo.
Como cada token observa todos os outros, a quantidade de computação cresce com o quadrado do comprimento. Se o contexto fica 10 vezes maior, as operações de atenção aumentam 100 vezes. Otimizações como atenção esparsa, janela deslizante e FlashAttention permitiram modelos de 1 milhão de tokens, mas a essência permanece: consultar todo o contexto tem um custo que cresce rapidamente com o comprimento.
Segundo motivo da limitação: a conta de memória do cache KV
O problema não é apenas computacional. Na memória, chega outra conta: o cache KV (Key-Value cache).
Recalcular todo o contexto desde o início a cada token gerado seria desperdício. Por isso, os resultados intermediários da atenção calculados para cada token (vetores Key e Value) são armazenados na memória da GPU e reutilizados. Esse é o cache KV. O problema é que ele se acumula separadamente por camada e por cabeça de atenção, crescendo proporcionalmente ao comprimento do contexto.
Como referência, um modelo open source de cerca de 70 bilhões de parâmetros usa aproximadamente 300 KB de cache KV por token mesmo com GQA, técnica de economia de memória. Com 128 mil tokens no contexto, apenas o cache chega a cerca de 40 GB, ocupando sozinho a memória de uma GPU avançada, além dos pesos do modelo. Por isso ampliar a janela de contexto é uma questão de hardware e dinheiro, não apenas de configuração de software.
Esse custo é repassado diretamente à tarifa do usuário. A API de LLM cobra conforme o número de tokens de entrada e, combinada à estrutura que reenvia todo o histórico a cada turno, explica por que sessões longas ficam mais caras e lentas no final.
Resumo
- A janela de contexto é o número máximo de tokens que o modelo consegue ler de uma vez. O coreano usa de 1,5 a 2 vezes mais tokens que o inglês, então não se deve confiar cegamente no número da especificação.
- LLMs são stateless. A memória da conversa é uma releitura que reenvia todo o histórico a cada turno; agentes também acumulam resultados de chamadas de ferramentas, por isso o contexto enche muito mais rápido que em um chat.
- A janela é finita porque a atenção cresce com o quadrado do comprimento, enquanto o cache KV ocupa memória da GPU proporcionalmente ao comprimento. Contexto é capacidade, mas também é custo.
Na próxima parte, vamos questionar uma ideia comum: quanto maior o contexto, melhor. Na prática, vários estudos confirmam que o desempenho do modelo cai à medida que o contexto aumenta. Abordaremos lost in the middle, context rot e por que o número da especificação difere da capacidade efetiva.

![Imagem de capa de [Contexto de IA #1] Por que os agentes esquecem instruções](/assets/images/posts/04ff8585-2d8d-44f7-87e9-2a975fd9176a/1.jpg)