DoDone
← Todas as histórias

Construindo o DoDone · 31 de agosto de 2026

Lembrar de toda conversa é mesmo um bom design?

Há uma pergunta na qual passei muito mais tempo do que esperava enquanto construía o DoDone: como transportar o contexto de uma conversa para frente na janela de chat. Ao criar um produto de agentes de IA, é fácil pensar nisso de forma simples no começo. Não dá para simplesmente colocar todas as mensagens anteriores no contexto?

As janelas de contexto dos modelos continuam crescendo. Centenas de milhares de tokens, e agora modelos que suportam um milhão. Então parece que a melhor abordagem seria alimentar o modelo com o máximo da conversa do usuário possível. Mas a conclusão a que cheguei enquanto construía o DoDone foi um pouco diferente.

A memória de uma IA não é tanto sobre quanto você consegue encaixar, e sim sobre decidir o que ela precisa lembrar agora.

A maneira mais intuitiva de lidar com conversas longas

Agentes como Claude Code e Hermes usam uma técnica chamada compactação para manter tarefas longas em andamento. A Anthropic também descreve a compactação como um método central para gerenciar contexto em agentes de longa duração. Quando uma conversa cresce, em vez de manter toda mensagem antiga, você resume o que importa e constrói um contexto novo ao lado das interações recentes. Da mesma forma, o Claude Code comprime mensagens e trabalho antigos preservando decisões de design chave, problemas em aberto e detalhes de implementação.

A implementação do Hermes é mais concreta. Ela não compacta com base no número de mensagens, mas em um orçamento de tokens. Quando os tokens de prompt realmente usados na chamada de API atual atingem uma fração definida da janela de contexto, a compactação entra em ação automaticamente. O limiar padrão é 50%, e para modelos com janelas menores que 512K ele é elevado para pelo menos 75% para evitar compactar cedo demais. Algumas mensagens recentes são mantidas literalmente enquanto o trecho do meio é resumido.

É uma estrutura muito razoável. Se encaixa especialmente bem quando um único objetivo se estende por muito tempo — uma tarefa de codificação, uma linha de pesquisa. Mas o DoDone tinha um problema um pouco diferente.

Por que o DoDone não mantém toda a conversa como contexto

DoDone é um escritório virtual onde colegas de IA trabalham. Não se trata só de uma IA e um único assunto discutido por horas. Um usuário pode conversar com o colega de marketing, depois passar trabalho ao desenvolvedor, fazer uma reunião em um canal de projeto, e depois devolver um acompanhamento a um colega específico — e procurar esse colega de novo no dia seguinte.

Em outras palavras, o chat no DoDone não é apenas uma janela de conversa. É a interface onde o trabalho acontece. Essa diferença mudou o design de contexto. Se você continuar passando cada mensagem passada para o modelo conforme a conversa cresce, dá para lembrar muita coisa — mas três problemas aparecem ao mesmo tempo.

O primeiro é o custo. Um LLM relê o contexto a cada requisição. Quanto mais longa a conversa, mais você fica re-enviando as mesmas mensagens antigas. Especialmente em modelos com janelas muito grandes, se a compactação acontecer tarde, o custo de toda a sessão pode subir bruscamente. Mesmo no Hermes, há discussão de que com um modelo de 1M e o limiar padrão de 50%, a primeira compactação pode não ocorrer até 500K tokens.

O segundo é velocidade. Mais tokens de entrada significam mais informação para o modelo processar. Não há necessidade de fazê-lo reler conversas de semanas atrás que não têm nada a ver com a pergunta atual.

Mas o que mais pesei foi o terceiro: poluição de contexto.

Mais contexto nem sempre é melhor

Ao explicar a engenharia de contexto, a Anthropic ressalta que relevância e poluição de contexto continuam sendo problemas mesmo com contextos longos. Isso é um ponto importante. Uma janela de um milhão de tokens não significa que preenchê‑la com um milhão de tokens seja o melhor estado.

Diga que um usuário teve esta série de conversas com o colega de marketing. Semana passada, branding para um novo serviço. Alguns dias atrás, texto de anúncio para o Instagram. Ontem, a política de preços do produto. E hoje, ele pede um press release. Tecnicamente você pode passar tudo isso para o modelo. Mas se a tarefa de hoje é um press release, arrastar o vai‑e‑vem literal da edição do texto do Instagram de semanas atrás realmente ajuda? Isso só cria espaço para informações não relacionadas à tarefa atual intrudirem no julgamento do modelo.

Desde o início, o DoDone se importou menos com 'quanto da conversa incluir' e mais com 'quão recente uma conversa deve ser mantida por completo'.

A abordagem do DoDone — o recente em foco nítido, o antigo comprimido

Hoje o DoDone mantém as 8 tarefas mais recentes como contexto detalhado. Uma conversa com um colega usa um orçamento de contexto detalhado de cerca de 20K caracteres, e o canal master cerca de 16K. Até as últimas 8 tarefas, os detalhes são mantidos o mais intactos possível; qualquer coisa mais antiga é comprimida em um resumo contínuo que carrega o contexto anterior adiante.

Simplificando, a estrutura é esta: tarefas passadas 1–12 viram um resumo contínuo, tarefas recentes 13–20 permanecem como contexto detalhado, e o que você está fazendo agora é a missão atual.

A chave é que conversas antigas não são deletadas — a resolução delas é reduzida. Interações recentes são lembradas em alta resolução, as mais antigas em baixa resolução. Acho que isso chega bem perto de como a memória humana funciona. Não lembramos, frase por frase, de uma conversa de uma semana atrás. Mas o contexto importante permanece: 'definimos o preço em $29 naquele projeto', 'escolhemos empreendedores solo como cliente-alvo', 'a próxima tarefa era criar a landing page.' Concluí que conversas longas com IA ficam mais naturais com essa mesma estrutura.

Mas resumos também têm limites

Claro, um resumo contínuo não é a solução para tudo. Um resumo é compressão, e quanto mais você comprime, mais detalhes inevitavelmente se perdem. E quando 20, 30 ou 50 tarefas se acumulam numa única conversa, surge outro problema: fica pouco claro se o usuário ainda está fazendo a mesma coisa.

Você pode começar discutindo estratégia de marketing, criar uma homepage no meio, falar sobre contratações depois disso e então voltar a criar conteúdo. Tecnicamente tudo pode ficar conectado em uma sessão. Mas 'tecnicamente possível' e 'boa UX' são coisas diferentes. Por isso o DoDone adicionou recentemente um pequeno mecanismo divertido.

A IA é a primeira a dizer: 'Tente iniciar uma nova conversa'.

Quando as missões da sessão atual chegam a 20, o DoDone avisa você primeiro. Esse é o ponto em que as 8 recentes detalhadas mais ou menos 12 condensadas no resumo contínuo se acumularam. Nesse momento, esta mensagem aparece:

💡 Esta conversa ficou bem longa. Se o tópico mudou, sugiro começar uma nova sessão — as respostas ficam mais precisas e os custos de IA caem. Se você continuar, o fluxo anterior ainda é mantido como um resumo.

O importante é que nunca força o fim da sessão. Se você está continuando o mesmo projeto, siga em frente. Mas se o tópico já mudou, começar uma nova sessão é muito melhor — e mesmo assim, o fluxo anterior que você precisa é mantido por meio do contexto resumido. No fim, a escolha continua com você.

Onde exibir esse aviso também importava

Eu não me contentei em acionar o aviso de conversa longa apenas pela contagem de mensagens. O DoDone verifica isso em dois lugares.

O primeiro é o momento em que chega uma instrução de tarefa. Seja por uma 1:1 com um colega, o canal master, o canal all-hands, um follow-up de reunião ou um projeto, o comprimento da sessão é verificado assíncronamente logo após a instrução ser recebida. Se a condição for atendida, o aviso aparece naturalmente abaixo da instrução que você acabou de enviar.

O segundo é o momento em que o usuário entra em um canal. Quando você clica em um colega no escritório para abrir um chat, ou entra em um canal de projeto, o estado da sessão atual é verificado. Se já estiver longo o bastante, você pode ver o aviso antes mesmo de enviar uma nova mensagem. E dentro da mesma sessão, você só é avisado uma vez; começar uma nova sessão torna o aviso elegível de novo. É um detalhe pequeno de UX, mas em um produto de agentes, esse tipo de coisa importa bastante.

Em um agente de IA, memória e contexto não são a mesma coisa

Uma coisa fica cada vez mais clara enquanto eu construo o DoDone: memória e contexto não devem ser tratados como a mesma coisa.

Memória é o que um colega precisa saber a longo prazo. Preferências do usuário, informações da empresa, modos de trabalho, regras recorrentes, fatos importantes decididos em projetos passados. Essas informações podem ser necessárias dias ou meses depois. Contexto é diferente — é mais próximo da memória de trabalho necessária para fazer essa tarefa agora. A solicitação imediatamente anterior, o arquivo em que se está trabalhando, o que acabou de ser decidido, o problema a resolver agora. Tentar resolver ambos enchendo o histórico de conversa e o sistema fica pesado rápido.

Então eu penso que um bom sistema de agentes acaba com várias camadas de memória: a missão atual (o que está sendo feito agora), contexto recente (as últimas interações detalhadas), um resumo contínuo (o fluxo comprimido de trabalhos passados) e memória de longo prazo (fatos e regras que devem persistir independentemente da sessão). A janela de contexto do modelo é apenas o espaço onde as camadas que você precisa são reunidas naquele momento.

Quanto maior a janela de contexto, mais importante fica a engenharia de contexto

Há uma ironia aqui. Quando as janelas de contexto eram pequenas, desenvolvedores não tinham escolha a não ser reduzir a informação. À medida que as janelas cresceram para 128K, 200K, 1M, agora podemos encaixar muito. E isso criou um novo problema: você tem que decidir o que não incluir.

Um bom agente de IA pode não ser aquele que lembra de tudo. O que precisamos agora é de uma IA que lembre o presente com nitidez, comprima o que é antigo adequadamente, mova o importante para a memória de longo prazo e crie um novo espaço de trabalho quando o tópico mudar. No fim, o trabalho que você faz cada vez mais ao construir um agente não é engenharia de prompts — é engenharia de contexto.

A questão central também está mudando. Antes era 'o que devemos dizer ao modelo?' Agora está mais para 'neste momento, quanto o modelo realmente deveria saber?'

Isso é exatamente com o que passei mais tempo enquanto construía o DoDone. Não fazer a IA lembrar mais, mas fazê-la lembrar as coisas certas no momento certo. Acredito que a diferença que vai decidir a qualidade dos agentes de IA daqui pra frente será definida justamente aí.

— Seungwon Go, o empreendedor solo que está construindo o DoDone