A assimetria que faz o tiering valer a pena
Se você mudar uma coisa sobre como projeta a memória de um agente, mude esta: pare de tratar custo de armazenamento e custo de atenção como se fossem a mesma coisa.
Eu mergulhei fundo nisso em 19 sistemas, e a constatação que continua surgindo é que os que lidam bem com memória não são necessariamente os que têm a recuperação mais sofisticada. São os que descobriram quais memórias pertencem ao prompt em primeiro lugar. Esse é um problema diferente, e tem uma solução diferente.
Armazenamento é barato. Atenção é cara. Um modelo com contexto de 128k lendo 110k de contexto medíocre não é, empiricamente, um agente melhor do que o mesmo modelo lendo 8k de contexto cuidadosamente selecionado. A pesquisa sobre isso é consistente: a qualidade da recuperação degrada conforme o contexto se enche de ruído, e a degradação não é linear. O modelo não simplesmente ignora o material irrelevante. Ele o processa, e o processamento sufoca o sinal.
O armazenamento não tem essa propriedade. Um fato sentado em um banco de dados não custa nada para manter. O custo só chega quando você o recupera e o carrega no prompt. O que significa que a pergunta não é "devo armazenar isso?" mas sim "devo recuperar isso e, se sim, quando?"
Esse reenquadramento é de onde vem o tiering. Diferentes itens de memória têm diferentes padrões de acesso. Algumas coisas um agente precisa a cada turno: o nome do usuário, seu projeto atual, suas preferências declaradas. Algumas coisas ele precisa com frequência, mas não sempre: decisões recentes, perguntas em aberto, fatos episódicos das últimas sessões. Algumas coisas ele deve ser capaz de encontrar quando necessário, mas nunca deve sobrecarregar cada turno: notas de reunião de três meses atrás, tarefas concluídas, transcrições brutas, material de referência avulso.
Um armazenamento plano trata todas as três categorias de forma idêntica. Itens quentes pagam o custo de busca de itens frios. Itens frios inflam o prompt com ruído. Não há mecanismo para itens progredirem à medida que se tornam mais relevantes, e não há mecanismo para itens serem descontinuados à medida que se tornam menos relevantes. A analogia com SO é exata: CPUs têm L1, L2, L3, RAM, SSD e disco não porque os bytes são diferentes, mas porque a frequência de acesso varia em ordens de grandeza. Sete dos 19 sistemas que examinei já haviam construído tiering explícito antes de eu começar a olhar. Dois deles valem a pena ser entendidos em detalhe.
MemoryOS como implementação de referência
O MemoryOS é a implementação mais clara de memória em camadas entre os 19 sistemas. Três camadas, cada uma com uma forma de dados distinta, um orçamento de latência distinto e um papel distinto.
A camada de curto prazo é um deque Python com comprimento máximo de 10 pares de perguntas e respostas. Sem embeddings, sem índice de busca, sem rastreamento de calor. É material bruto de conversação puro, as últimas dez trocas, disponível com latência de microssegundos. Quando o deque enche, o par mais antigo drena para a camada de médio prazo.
A camada de médio prazo armazena até 2000 sessões. Cada sessão carrega um resumo, um embedding, um conjunto de palavras-chave e contadores de calor. A camada é indexada com Faiss e pesquisada por similaridade de cosseno. Quando a camada atinge a capacidade, as sessões mais frias são removidas. Quando uma sessão fica quente o suficiente, ela é promovida para a camada de longo prazo.
A camada de longo prazo é um esquema de psicologia e alinhamento de 90 dimensões, dois deques de base de conhecimento, um para fatos do usuário e um para fatos do assistente, cada um com limite de 100 entradas. Esta é a camada persistente, a que sobrevive entre sessões e carrega o modelo durável do usuário.
A fórmula de calor que rege a promoção são doze linhas de Python. Três sinais: frequência de visita, um análogo de LFU; profundidade de interação, um proxy para engajamento tópico; e decadência de recência, exponencial com meia-vida de 24 horas. Um segmento cruza o limite de promoção em 5,0. Após a promoção, os contadores de visita e interação são zerados, e o calor colapsa de volta para aproximadamente 1,0.
A decisão de design que é fácil perder: o calor controla a promoção, não a recuperação. O recuperador é puramente semântico, similaridade de cosseno sobre os embeddings de médio prazo. O calor é um sinal de fundo que decide se um segmento deve graduar para a camada de longo prazo. As duas preocupações são desacopladas, e esse desacoplamento importa mais do que a própria fórmula.
O que o MemoryOS deixa de lado vale a pena ser nomeado. Os coeficientes são codificados em 1,0, não há mecanismo para aprender pesos a partir de padrões de uso reais. Não há caminhos de rebaixamento; uma vez que algo atinge a camada de longo prazo, permanece. E a fórmula otimiza para frequência em vez de importância. Um fato crítico, mas raro, o nome de um parceiro, uma condição médica, uma restrição difícil, pode nunca cruzar o limite de promoção se surgir apenas uma vez. Uma vez que a camada de médio prazo remove o segmento, o fato se vai.
As camadas derivadas da teoria do Hindsight
O Hindsight chega à mesma estrutura de três camadas a partir de um ponto de partida completamente diferente. Enquanto o MemoryOS se baseia na teoria de cache de SO, o Hindsight se baseia na ciência cognitiva.
As três camadas são Mundo, Experiência e Observações. Mundo contém afirmações objetivas sobre o universo, verdade fundamental, sempre ativa, duradoura. Experiência contém ações em primeira pessoa do próprio sistema, o registro episódico. Observações contêm crenças consolidadas derivadas de fatos de Mundo e Experiência, carregando IDs de memória de origem, uma contagem de provas e um campo de histórico que rastreia como a crença evoluiu.
As três camadas vivem na mesma tabela de banco de dados, diferenciadas por um discriminador de tipo de fato. Índices parciais HNSW são construídos por tipo de fato. O esquema é unificado; os padrões de acesso não são.
A promoção no Hindsight não é orientada por contadores. É uma consolidação orientada por LLM em lote. Quando um novo fato é escrito, ele é enfileirado em uma tabela de operações assíncronas. Um worker de fundo busca os novos fatos juntamente com observações sobrepostas existentes, constrói um prompt em lote e pede ao modelo para criar, atualizar e excluir. Memórias de origem são carimbadas com um timestamp de consolidated-at para evitar reprocessamento. Todo novo fato, independentemente da frequência com que foi acessado, é considerado para promoção à camada de Observações.
Essa é a diferença chave do MemoryOS. Ao vincular a promoção de camada superior à consolidação em vez de calor, o Hindsight evita o ponto cego para fatos críticos, mas raros. Uma única passagem de consolidação considera todo novo fato. A frequência é irrelevante para se algo é graduado ou não.
Dito claramente: dois sistemas, primeiros princípios diferentes, linguagens de implementação diferentes, casos de uso alvo diferentes, e ambos chegam a três camadas com material bruto na base, uma camada de trabalho no meio e uma camada persistente sintetizada no topo. Ambos usam promoção assíncrona. Ambos carregam proveniência de volta para camadas inferiores. É isso que a evolução convergente parece na arquitetura de software, e é o sinal mais forte que conheço de que um padrão é estrutural.
O tiering condicionado por gênero do @supermemory
O supermemory opera na forma de implantação de API gerenciada, o que muda a implementação sem mudar a arquitetura. As três camadas são perfil estático, perfil dinâmico e armazenamento de documentos e chunks.
O perfil estático contém fatos estáveis de longo prazo, a camada quente. Ele é retornado como um array estático do endpoint de perfil, armazenado em cache na borda, com um orçamento de latência de aproximadamente 50ms. O perfil dinâmico contém contexto recente e episódico, a camada morna. Muitas entradas carregam um campo forgetAfter que define um TTL. O armazenamento de documentos e chunks é a camada fria, consultada via endpoints de busca quando necessário.
A atribuição de camada ocorre no momento da escrita. Um LLM de extração classifica cada memória recebida com um booleano isStatic e opcionalmente um valor forgetAfter. A classificação é imposta por um prompt de extração fechado, uniforme para todos os consumidores.
A forma de implantação de API gerenciada permite três coisas que um designer in-process não pode copiar diretamente, mas deve entender. Dados de camada fria podem ficar em hardware mais barato, armazenamento de objetos para bytes brutos, um armazenamento relacional padrão para metadados e chunks, com o perfil quente armazenado em cache separadamente na borda. A camada quente tem seu próprio endpoint com seu próprio SLA, separado do caminho de busca. E o prompt de extração é centralizado, o que significa que a atribuição de camada é consistente de uma forma que a classificação por agente raramente é.
As compensações são reais. Uma camada quente remota só é rápida se a rede for rápida. O agente não pode substituir a classificação de camada do motor. O prompt de extração é uma caixa preta. Mas o padrão arquitetônico, camada quente como seu próprio endpoint, camada fria em hardware mais barato, atribuição de camada no momento da escrita, vale a pena copiar mesmo que a forma de implantação não seja.
Promoção vs. tipologia fixa
O mem9 é o caso de contraste que esclarece o que tiering não é.
O mem9 tem uma coluna de tipo de memória com três valores: pinned, insight e digest. Memórias pinned são atribuídas por caminhos explícitos de escrita de conteúdo, criadas manualmente, protegidas da reconciliação do LLM. Insights são atribuídos por toda escrita extraída pelo LLM, mutáveis, versionáveis, substituíveis. Ambos participam da mesma recuperação híbrida com a mesma pontuação RRF. O campo de tipo é uma flag de proteção de escrita, não um filtro de recuperação e não um sinal de camada.
Isso é tipologia, não tiering. A distinção importa porque os dois são fáceis de confundir. Tipologia descreve governança: quem pode alterar esta memória, sob quais condições. Tiering descreve padrões de acesso: com que frequência esta memória é necessária, e qual representação de armazenamento melhor atende a essa frequência. Um sistema pode ter ambos. O isStatic do supermemory é um sinal de camada, enquanto uma flag isInference separada está mais próxima de uma classe de governança. Mas confundi-los produz a maior ambiguidade na prática.
Se você se pegar adicionando um campo de tipo às suas linhas de memória, a pergunta a fazer é se o campo descreve um padrão de acesso ou uma classe de governança. Se for um padrão de acesso, você está construindo tiering. Se for uma classe de governança, você está construindo tipologia. Ambos são úteis. Eles não são a mesma coisa.
O que o plano lhe custa
Quatro coisas concretas decorrem de executar um armazenamento de memória plano.
O caminho quente paga o custo de busca do caminho frio. Toda recuperação varre o mesmo índice sobre os mesmos itens. O agente procurando o nome do usuário paga o mesmo custo de busca que o agente procurando uma nota de reunião de seis meses atrás. Em pequena escala, isso é invisível. Em escala, é um problema de latência.
O caminho frio infla o prompt com ruído. A recuperação retorna itens semanticamente próximos, o que inclui contexto permanente, fatos substituídos e material que é factualmente correto, mas irrelevante para o turno atual. O modelo processa tudo isso. A relação sinal-ruído na janela de contexto degrada à medida que o armazenamento cresce.
Não há mecanismo para itens progredirem. A memória não é estática. Um fato episódico fugaz do início de um relacionamento pode, com o tempo, se tornar um sinal durável sobre as preferências ou restrições do usuário. Um armazenamento plano não fornece maquinário para notar essa transição. O item permanece na mesma representação em que foi escrito, independentemente de como sua relevância mudou.
Não há mecanismo para itens serem descontinuados. Rebaixamento não é exclusão. Um armazenamento plano que deseja remover material obsoleto deve excluí-lo. Um armazenamento em camadas pode movê-lo para uma representação mais fria, ainda encontrável, não mais sobrecarregando o caminho quente. O armazenamento plano força uma escolha binária que o armazenamento em camadas não força.
O resultado líquido
18 dos 19 sistemas implementam tiering, acenam para ele ou têm recomendações explícitas para ele. A exceção é o mem9, que tem uma camada de tipologia resolvendo um problema diferente e se beneficiaria de tiering sobre ela.
Se você está construindo memória de agente do zero, a progressão para a qual os 19 sistemas apontam é esta. Identifique o que o agente precisa a cada turno, essa é sua camada quente. Identifique o que ele precisa com frequência, mas não sempre, essa é sua camada morna. Identifique o que ele deve encontrar quando necessário, mas nunca sobrecarregar cada turno, essa é sua camada fria. Escolha um mecanismo de promoção: baseado em calor como o MemoryOS, julgamento de LLM como o Hindsight, ou classificação no momento da extração como o supermemory. Escolha um mecanismo de rebaixamento: decadência temporal, TTL ou categorias de frescor. Mantenha a promoção e a pontuação de recuperação separadas no início; o desacoplamento é mais fácil de adicionar do que de desfazer. Rastreie a proveniência das camadas superiores de volta para as camadas inferiores, para que você sempre possa responder à pergunta de onde veio uma crença sintetizada.
Os 19 sistemas não são unânimes em muita coisa. Nisto, são: um único armazenamento de memória plano é o padrão errado para qualquer sistema de memória de agente não trivial.
Armazenamento é barato. Atenção é cara. Construa o sistema que explora a diferença.
Se você achou este Artigo interessante, por favor compartilhe





