Compressão de contexto autônoma: o agente decide quando esquecer

Compressão de contexto autônoma: o agente decide quando esquecer
85%do limite de contexto: quando o Deep Agents compacta por padrão
10%do contexto: as mensagens recentes mantidas ao resumir
5situações em que vale a pena compactar
0compactações autônomas no Terminal Bench 2
Seu agente de IA deveria decidir quando esquecer: a compressão de contexto autônoma da LangChain
Também conto isso neste vídeo de sete minutos, no meu canal Articulator PT.

O que é comprimir o contextolink

Um agente trabalha com uma memória limitada: sua janela de contexto, onde cabem as instruções, a conversa, os resultados das ferramentas e tudo o que ele leu. Comprimir o contexto é substituir as mensagens antigas por um resumo do que ele já fez, que mantenha só o que é relevante para a tarefa.

Isso é necessário por dois motivos. O primeiro é óbvio: as janelas de contexto são finitas, e uma tarefa longa acaba enchendo a janela. O segundo é menos evidente: quanto mais a janela enche, pior o modelo trabalha com ela. É o que se chama de deterioração do contexto, ou context rot.

Dois motivos: uma janela de contexto cheia, marcada como finita, e uma curva em que a qualidade do modelo cai à medida que se usa mais contexto.
A janela é finita e, quanto mais enche, pior o modelo trabalha.

O problema do limite fixolink

O normal é que o arnês, o software que envolve o modelo, controle a compressão com um limite fixo de tokens. O Deep Agents, por exemplo, usa perfis de modelo para compactar ao chegar a 85% do limite de contexto de cada modelo.

Um medidor que chega a 85% do limite de contexto, o limite fixo do Deep Agents, com a janela já resumida ao lado.
O Deep Agents compacta aos 85% do limite de cada modelo.

O artigo explica por que isso não é o ideal: há momentos bons e momentos ruins para compactar, e um limite não distingue uns dos outros.

  • Momento ruim: no meio de uma refatoração complexa. O agente perde os detalhes justamente quando mais precisa deles.
  • Momento bom: ao começar uma tarefa nova, ou quando o contexto anterior vai deixar de ser útil.

Uma ferramenta para o agentelink

Muitas ferramentas de programação com agentes têm um comando /compact para que o usuário comprima o contexto manualmente quando achar oportuno. A LangChain vai um passo além: dá ao agente uma ferramenta para disparar a compressão ele mesmo.

A vantagem é que ele compacta no momento certo sem que os usuários da sua aplicação precisem saber que o contexto é finito, nem digitar comando nenhum.

Um robô que chama a ferramenta compact_conversation e deixa seu contexto resumido, diante de um usuário que digita /compact manualmente.
Do /compact manual a uma ferramenta que o agente chama sozinho.

Por trás há uma ideia maior. A LangChain acredita que o arnês deve sair do caminho sempre que puder e aproveitar que os modelos raciocinam cada vez melhor. É a famosa lição amarga (the bitter lesson): em vez de ajustar o arnês à mão com regras cada vez mais finas, dar ao agente mais controle sobre o próprio contexto.

Quando compactar: cinco situaçõeslink

Se o agente decide, quando ele deveria fazer isso? O artigo agrupa os bons momentos em cinco situações:

1. Ao mudar de tarefa

O usuário passa para outra coisa para a qual o contexto anterior provavelmente não serve, ou o agente termina uma entrega e o usuário a aprova.

2. Depois de obter um resultado

O agente obteve um dado, uma conclusão ou um resumo consumindo muito contexto, como numa tarefa de pesquisa.

3. Antes de muito contexto novo

Ele vai escrever um rascunho longo ou ler muitos documentos.

4. Antes de um processo longo

Ele vai começar uma refatoração, uma migração, uma edição de muitos arquivos ou a resposta a um incidente; por exemplo, quando já tem o plano e vai executá-lo.

5. Uma decisão muda tudo

Chegam requisitos novos que invalidam o contexto anterior, ou há muitas tangentes e becos sem saída que cabem num resumo.

As cinco situações em fila e, embaixo, a quinta: requisitos novos que tornam a conversa obsoleta, além de tangentes e becos sem saída.
As cinco situações; embaixo, a quinta, quando uma decisão torna obsoleto o que veio antes.

Não dá para listar todos os casos, mas, segundo a LangChain, as pessoas e os modelos de linguagem sabem reconhecê-los. Por isso eles explicam esses critérios ao modelo nas instruções da ferramenta. E compactar a tempo tem uma vantagem extra: evita ter que fazer isso à força mais tarde, quando a janela está prestes a encher.

O que acontece ao chamar a ferramentalink

A ferramenta funciona igual ao resumo automático que o Deep Agents já tinha, com os mesmos parâmetros:

  • As mensagens recentes são mantidas: 10% do contexto disponível. Entre elas fica a própria chamada à ferramenta, com sua resposta.
  • O que veio antes é resumido: tudo vira uma única mensagem de resumo.
  • Nada se perde: as mensagens originais são salvas num arquivo, /conversation_history/{thread_id}.md, no sistema de arquivos virtual do agente.
  • O resumo leva um ponteiro: no contexto fica o resumo com uma referência a esse arquivo, caso o agente precise voltar aos detalhes.
O losango de compactação salva os originais numa pasta e, no contexto, ficam o resumo com um ponteiro, a pergunta, a chamada à ferramenta, seu resultado e a resposta.
Resumo com ponteiro em cima, mensagens recentes embaixo e os originais no sistema de arquivos.

É a parte do design de que mais gosto: resumir não é esquecer, é guardar em outro lugar.

Como usarlink

Na ferramenta de terminal do Deep Agents (Deep Agents CLI), ela já vem ativada. Na biblioteca de Python, é opcional: é um middleware à parte que você adiciona à lista middleware ao criar o agente. Este é o exemplo do artigo:

from deepagents import create_deep_agent
from deepagents.backends import StateBackend
from deepagents.middleware.summarization import (
    create_summarization_tool_middleware,
)

backend = StateBackend  # se usar o backend padrão
model = "openai:gpt-5.4"
agent = create_deep_agent(
    model=model,
    middleware=[
        create_summarization_tool_middleware(model, backend),
    ],
)

E no terminal você também pode digitar /compact quando quiser reduzir o contexto ou trocar de tarefa.

À esquerda, o terminal do Deep Agents com compact_conversation ativada; à direita, o código Python com o middleware opcional.
Ativada no terminal e opcional na biblioteca.

Como a testaramlink

A LangChain configurou a ferramenta para ser conservadora. O Deep Agents guarda todo o histórico, então o contexto pode ser recuperado depois do resumo, mas uma compressão na hora errada atrapalha o trabalho. Eles a testaram de três formas:

  1. Uma bateria de avaliação própria: em conversas reais, tiradas dos traces do LangSmith, injetavam perguntas de acompanhamento; umas pediam compactação e outras não.
  2. Terminal Bench 2: um benchmark de tarefas no terminal, onde o agente não compactou por conta própria nem uma única vez.
  3. Suas próprias tarefas de programação com a ferramenta de terminal do Deep Agents.
Três cartões: a avaliação própria com conversas que pediam e que não pediam compactação, o Terminal Bench 2 com zero compactações autônomas e as tarefas de programação.
Três testes; no Terminal Bench 2, zero compactações autônomas.

O resultado? Os agentes são cautelosos e compactam pouco. Mas, quando compactam, costumam escolher momentos em que o fluxo de trabalho melhora claramente.

É mau sinal que ele nunca tenha compactado?link

Esse zero no Terminal Bench me chamou a atenção. Se você deixa o modelo decidir quando compactar e ele nunca compacta, à primeira vista parece uma má notícia. O artigo não explica isso, então conferi no código do Deep Agents, e acho que não é necessariamente mau sinal, por dois motivos.

O primeiro: esses momentos não chegam. A ferramenta deve ser usada em momentos claros, como quando o usuário muda de tarefa ou quando o agente já obteve o resultado que procurava. No Terminal Bench, cada teste é uma única tarefa, do começo ao fim, sem mudança de assunto. E comprimir no meio de uma tarefa é justamente o erro que eles queriam evitar.

Os dois momentos claros em cima e, embaixo, a barra de um teste do Terminal Bench quebrada em vermelho por uma compressão no meio da tarefa.
Cada teste é uma única tarefa: comprimir no meio seria o erro que eles queriam evitar.

O segundo: não compactar não significa transbordar. No código, a ferramenta nem sequer aceita comprimir até que a conversa chegue à metade do limite; antes disso ela responde "Nothing to compact yet". E a ferramenta se soma ao resumo automático, não o substitui: o create_deep_agent sempre o inclui, então, quando a janela enche, o resumo automático dos 85% continua agindo como rede de segurança.

Um medidor da janela com a marca da metade do limite, a chamada a compact_conversation disponível e o resumo automático aos 85% como rede de segurança.
A ferramenta exige metade do limite; o resumo automático dos 85% continua lá.

O que o artigo não traz são números: não sabemos quantas vezes o agente deveria ter compactado e não compactou. Então o zero não prova que a ferramenta funciona, mas também não prova que ela falha.

Uma direção mais amplalink

A compressão de contexto autônoma é uma função pequena, mas aponta para uma direção mais ampla no design de agentes: dar aos modelos mais controle sobre a própria memória de trabalho e menos regras rígidas ajustadas à mão no arnês.

Um cérebro com mais controle sobre sua memória de trabalho diante de um anel com regras escritas à mão riscadas.
Mais controle para o modelo e menos regras à mão no arnês.
Em uma frase

Em vez de compactar sempre aos 85%, o agente decide quando resumir seu contexto e escolhe os momentos em que isso o ajuda.

Você deixaria seu agente decidir quando esquecer?

Fonteslink

Continuar lendo

Últimos posts -->

Você viu esses projetos?

Gymnasia

Gymnasia Gymnasia
Expo
React Native
TypeScript
OpenAI
Anthropic

App de fitness com dois agentes que são executados integralmente no dispositivo, sem backend, de forma que os dados do usuário nunca saem do celular. Um coach conversacional BYOK com tools locais e system prompt remoto com fallback offline, e um estimador de refeições que tira os macronutrientes de uma foto do prato, com leitura de códigos de barras contra o OpenFoodFacts.

LangGraph Deep Researcher

LangGraph Deep Researcher LangGraph Deep Researcher
Python
LangGraph
FastAPI
React
TypeScript
Docker

Sistema multiagente de pesquisa construído com LangGraph. Um supervisor decompõe sua pergunta em tópicos e lança subagentes de busca em paralelo; cada um comprime seus achados antes de repassá-los a um agente redator que escreve o relatório final em markdown com suas fontes. Streaming ao vivo por WebSockets, modelo configurável por papel e chaves de API próprias que nunca são armazenadas no servidor.

Tau

Tau Tau
Python
LangChain

Sistema multiagente de tutoria para estudantes do ensino médio, com um agente por disciplina e material de curso elaborado e validado por uma equipe de professores. Chegou a ser usado com alunos reais em um colégio privado na Espanha e em uma escola de ensino médio na Colômbia.

Ver todos os projetos -->
>_ Disponível para projetos

Tem um projeto com IA?

Vamos conversar.

maximofn@gmail.com

Especialista em Machine Learning e Inteligência Artificial. Desenvolvo soluções com IA generativa, agentes inteligentes e modelos personalizados.

Quer assistir alguma palestra?

Últimas palestras -->

Quer melhorar com essas dicas?

Últimos tips -->

Use isso localmente

Os espaços do Hugging Face nos permitem executar modelos com demos muito simples, mas e se a demo quebrar? Ou se o usuário a deletar? Por isso, criei contêineres docker com alguns espaços interessantes, para poder usá-los localmente, aconteça o que acontecer. Na verdade, se você clicar em qualquer botão de visualização de projeto, ele pode levá-lo a um espaço que não funciona.

Flow edit

Flow edit Flow edit

Edite imagens com este modelo de Flow. Baseado em SD3 ou FLUX, você pode editar qualquer imagem e gerar novas

FLUX.1-RealismLora

FLUX.1-RealismLora FLUX.1-RealismLora
Ver todos os contêineres -->
>_ Disponível para projetos

Tem um projeto com IA?

Vamos conversar.

maximofn@gmail.com

Especialista em Machine Learning e Inteligência Artificial. Desenvolvo soluções com IA generativa, agentes inteligentes e modelos personalizados.

Você quer treinar seu modelo com esses datasets?

short-jokes-dataset

HuggingFace

Dataset com piadas em inglês

Uso: Fine-tuning de modelos de geração de texto humorístico

231K linhas 2 colunas 45 MB
Ver no HuggingFace →

opus100

HuggingFace

Dataset com traduções de inglês para espanhol

Uso: Treinamento de modelos de tradução inglês-espanhol

1M linhas 2 colunas 210 MB
Ver no HuggingFace →

netflix_titles

HuggingFace

Dataset com filmes e séries da Netflix

Uso: Análise de catálogo Netflix e sistemas de recomendação

8.8K linhas 12 colunas 3.5 MB
Ver no HuggingFace →
Ver mais datasets -->