Engenharia

Memória não é a context window

A janela é RAM, rápida, pequena, apagada entre execuções. Memória é disco, durável, curada, escrita de propósito. Encher a janela não é lembrar; é esquecer de forma mais cara.

ASR

Apollo Space Research

Apollo Space

· 11 min de leitura

Dois agents leem a mesma coisa na segunda. Na sexta, um consegue te dizer o que aprendeu e por que importa. O outro não consegue te dizer nada, porque sexta é uma execução diferente, e a execução que o leu na segunda se foi. Ambos receberam uma “feature de memória”. Só um deles de fato lembra.

A diferença não é qualidade do modelo. É uma confusão sobre o que memória sequer é.

O erro mais comum no design de agents é tratar a context window como memória. A janela é RAM, rápida, pequena, apagada entre execuções. Memória é disco, durável, curada, escrita de propósito. Encher a janela não é lembrar; é esquecer de forma mais cara. Este post é sobre por que essa única definição trocada quebra mais agents do que qualquer prompt ruim, e o que você constrói no lugar.

A versão ingênua: só coloque tudo na janela

O movimento óbvio, o que quase todo mundo faz primeiro, é tratar a context window como a memória do agent. Está bem ali. É enorme agora, centenas de milhares de tokens, às vezes mais. Por que não simplesmente continuar enchendo?

Então você enche. A cada turno, você pega a conversa inteira, cada documento que o agent leu, cada resultado de ferramenta, cada resposta anterior, e cola tudo de volta. O agent tem “memória” no sentido de que, pela duração desta única execução, ele consegue ver tudo o que aconteceu. Por uma tarde, é mágico. O agent lembra a coisa que você disse uma hora atrás. Parece que ele te conhece.

Aí a execução termina. E a próxima execução começa fria, sabendo nada, porque a janela nunca foi armazenamento, era um workspace, e o workspace é apagado entre sessões. Então você compensa fazendo a janela cumprir dupla função: no início de toda execução, você recarrega tudo, torcendo para que o agent consiga re-derivar o que “sabia” relendo a transcrição do que um dia viu.

Isso falha de três formas de uma vez, e elas se compõem.

Falha em custo, porque você paga para reler a mesma história em cada turno, os mesmos documentos de onboarding, as mesmas preferências, a mesma história, faturados de novo e de novo pelo privilégio de fingir que o agent lembra.

Falha em foco, porque uma janela atulhada de tudo é uma janela onde nada se destaca. O modelo tem de encontrar o único fato relevante dentro de um palheiro que você reconstruiu a partir de cada fato que possui. O recall piora, não melhora, à medida que você adiciona mais, o sinal se afoga. A janela enche, e a coisa de que você de fato precisava está em algum lugar no meio, onde os modelos atendem menos.

E falha em verdade, porque eventualmente o palheiro é maior que a janela. Algo tem de ser descartado. Agora o agent tem história parcial e nenhuma ideia de qual parte está faltando, que é exatamente o cenário para um agent que confiantemente preenche a lacuna com algo que inventou. Ele não diz “não recordo”. Ele diz a coisa errada, fluentemente, porque a peça faltante costumava estar na janela e não está mais.

A janela nunca foi memória. Era a mesa. Uma mesa empilhada até o teto não é um sistema de arquivos. É um risco de incêndio.

A correção é uma distinção que todo computador já faz

Aqui está a coisa: o sistema operacional na máquina em que você está lendo isto resolveu exatamente este problema cinquenta anos atrás. Ele não o resolveu tornando a RAM infinita. Resolveu-o recusando-se a confundir duas coisas diferentes.

RAM é rápida e pequena e volátil. Ela segura o que um programa está trabalhando agora, e some no momento em que o programa para. Disco é mais lento e maior e durável. Ele segura o que você decidiu manter, e sobrevive ao reboot. Ninguém constrói software segurando o disco inteiro na RAM o tempo todo. Você carrega o que precisa, faz o trabalho, escreve de volta o que importa, e deixa o resto ficar no disco onde é barato e seguro.

A janela é RAM, rápida, pequena, apagada entre execuções. Memória é disco, durável, curada, escrita de propósito. Uma vez que você vê a memória de agent por essa lente, o design inteiro decorre dela.

O trabalho da janela é segurar o que esta execução está trabalhando. O trabalho da memória é segurar o que o agent decidiu que valia manter, e colocar a fatia certa e pequena dela de volta na janela no início da próxima execução. Não tudo. A fatia. O agent não recarrega sua vida inteira toda manhã, do mesmo jeito que seu laptop não recarrega seu disco inteiro na RAM no boot. Ele pagina o que é relevante para a tarefa à sua frente.

Um contraste de duas faixas: à esquerda, o agent ingênuo enfia a transcrição inteira e cada documento de volta na context window a cada execução, que transborda e derruba fatos; à direita, memória durável no disco pagina só a fatia relevante numa janela limpa, e escreve de volta o que foi aprendido quando a execução termina.

Essa troca, de “carregar tudo” para “carregar a fatia certa, escrever de volta o que vale manter”, é a diferença inteira entre um agent que performa memória e um agent que a tem.

Escrever na memória é uma decisão, não um efeito colateral

Então se memória é disco, a próxima pergunta é a que todo mundo pula: o que é escrito, e quem decide?

A resposta ingênua é tudo, logar cada turno, despejar cada transcrição, fazer append em tudo. Este é o mesmo erro usando um chapéu diferente. Um disco onde você escreve cada byte que já tocou não é uma memória; é um aterro. Você pode armazená-lo, mas nunca consegue encontrar nada nele, e o ato de buscá-lo custa tanto quanto o trabalho original. Um agent que “lembra de tudo” lembra de nada utilmente, porque retrieval sobre uma pilha indiferenciada é só o problema do palheiro movido uma camada abaixo.

Memória de verdade é curada. Algo tem de ler a execução e decidir: isto vale manter, aquilo era ruído. O nome do cliente e o que ele se importa, manter. O fraseado exato de um erro de ferramenta que já foi resolvido, descartar. A decisão que o time tomou e a razão por trás dela, manter, e manter a razão, porque um fato sem sua razão apodrece na primeira vez que o mundo muda. Os quarenta passos intermediários que o agent tomou para chegar àquela decisão, descartar; a conclusão é a memória, o rascunho era RAM.

Este é exatamente o movimento que um bom anotador faz depois de uma reunião. Ele não transcreve a hora. Ele escreve as três coisas que vão importar semana que vem, num formato sobre o qual seu eu futuro consiga agir. A transcrição era a memória de trabalho da reunião; a nota é a memória durável da empresa. Confundir as duas é como você acaba com mil transcrições que ninguém vai ler e zero notas que alguém consiga usar.

E quem escreve tem de ser deliberado, porque dois modos de falha ficam em cada lado de “manter as coisas certas”.

Escreva pouco demais e o agent é amnésico, ele re-aprende o mesmo fato toda semana, faz a mesma pergunta que já tinha respondida, faz o cliente se repetir. Escreva demais e o agent é um acumulador, sua memória incha até a retrieval ficar lenta e ruidosa e o fato relevante estar enterrado sob uma centena de quase-duplicatas de si mesmo. A habilidade não é armazenamento. Armazenamento é barato. A habilidade é o julgamento sobre o que cruza da memória de trabalho para a memória durável, e esse julgamento é uma parte real do sistema que você tem de construir de propósito, não um efeito colateral que você ganha de graça por logar.

Digamos que um agent lida com cem conversas por dia. A versão aterro armazena cem transcrições e não consegue responder nada. A versão curada armazena talvez um punhado de novos fatos duráveis, este cliente trocou de plano, aquele sinalizou um bug, esta preferência mudou, e consegue responder tudo o que importa amanhã. As mesmas cem conversas. A diferença está inteiramente no que foi jogado fora.

Um funil mostrando curadoria: cem turnos de conversa crus fluem para um filtro de decisão-de-escrita que mantém fatos duráveis e decisões-com-razões enquanto descarta erros resolvidos e passos de rascunho, produzindo uma pequena memória limpa que a próxima execução lê.

Ler é retrieval, não reload

A última peça é a que o enquadramento RAM/disco torna óbvia em retrospecto. Se memória vive no disco, então começar uma execução não é “carregar o disco”. É “buscar a fatia relevante”.

O agent ingênuo, no início de toda execução, cola sua memória inteira de volta na janela, e agora estamos de volta de onde começamos, com uma mesa transbordando, exceto que o transbordamento é durável desta vez. Tornar a memória persistente não ajuda se você recarrega tudo a cada turno. Você só moveu o aterro para dentro do prompt.

O agent que funciona faz o que o sistema operacional faz: ele consulta. Dada a tarefa à mão, este cliente, esta pergunta, este momento, ele puxa o pequeno conjunto de fatos que tocam isto, e deixa o resto no disco onde pertence. A janela permanece limpa. Ela segura a tarefa mais o punhado de memórias de que a tarefa de fato precisa, e nada mais. O modelo não está caçando por tudo o que o agent já soube; está olhando as poucas coisas que importam agora.

É por isso que a arquitetura certa torna o agent mais rápido e mais barato à medida que aprende mais, não mais lento e mais caro. Sob o modelo ingênuo, cada novo fato que o agent aprende é um novo imposto sobre cada execução futura, porque cada execução futura o recarrega. Sob o modelo disco, um novo fato é só uma nova linha num disco que já é enorme e já é barato de ignorar. O agent pode saber um milhão de coisas e ainda rodar numa janela que segura vinte, porque ele só pagina as vinte que contam.

O gargalo nunca desaparece. Ele apenas se move, de “quão grande é a janela” para “quão boa é a retrieval”. E esse é o lugar certo para ele viver, porque retrieval você pode melhorar para sempre, enquanto uma janela está sempre, eventualmente, cheia.

O que isto muda para uma empresa

Dê um passo atrás da maquinaria e aqui está por que isto importa além da engenharia.

A memória de uma empresa não é uma transcrição de tudo o que já foi dito. É o pequeno conjunto de coisas que têm de sobreviver a uma pessoa saindo, um trimestre terminando, uma ferramenta sendo trocada. A razão pela qual um cliente deu churn. A decisão por trás de uma mudança de preço e a que ela estava reagindo. A coisa com que esta conta sempre se importa e que ninguém escreveu porque a pessoa que sabia estava sempre na sala, até o dia em que não estava.

Quando você constrói agents que confundem a janela com a memória, você constrói uma empresa que confunde estar ocupado com aprender. Tudo é processado, nada é mantido. O agent lidou com a conversa e a esqueceu no instante em que a execução terminou, do mesmo jeito que um time sobrecarregado lida com cem chamados e não retém nada, resolvendo o mesmo problema pela quinta vez porque as primeiras quatro soluções viviam numa janela que foi apagada.

A promessa de um agent que lembra não é que ele consiga recitar a transcrição. É que a empresa para de pagar o imposto do re-aprendizado, a reunião que re-decide o que já foi decidido, a pergunta já respondida, a lição que a organização fica re-comprando porque nunca a escreveu no disco. Memória feita certo é a diferença entre uma empresa que compõe o que sabe e uma que reseta a zero toda segunda de manhã.

A janela é onde o trabalho acontece. O disco é onde a empresa vive. O erro de derramar uma na outra não é só caro, é a razão silenciosa pela qual um agent pode ler tudo e ainda saber nada.


Essa distinção, workspace versus armazenamento, a coisa que você está segurando versus a coisa que você mantém, é uma das fundações sobre as quais construímos na Apollo: um company brain que decide o que vale lembrar e pagina a fatia certa de volta exatamente quando ela é necessária. Se você já assistiu a um time esperto resolver o mesmo problema duas vezes porque a primeira solução vivia em lugar nenhum, você já entende por que memória não é a context window, e por que acertar essa única distinção é a maior parte do trabalho.

A Apollo cuida da operação repetitiva da sua empresa pro seu time não precisar.

Entre na lista de espera: acesso antecipado, preço de usuário fundador e um lugar na primeira fila enquanto a gente constrói.

Entrar na lista de espera