Quando se fala em "agente de IA com memória", muitos imaginam um único banco de dados vetorial e uma recuperação mágica. Na prática, isso quase nunca é suficiente.

No Volna, meu agente do Telegram, a memória é organizada em várias camadas diferentes. Porque em um diálogo real, é preciso resolver três tarefas ao mesmo tempo: armazenar fatos de longo prazo, manter o contexto recente à mão e não sobrecarregar o modelo com tokens desnecessários.


A memória do Volna consiste, condicionalmente, em 4 partes:

- Blocos permanentes no Letta. São dois blocos básicos de cerca de 3 mil caracteres cada.

O primeiro é o retrato do usuário: quem é, o que faz, o que é importante para ele, quais são seus interesses e contextos estáveis.

O segundo é o perfil do próprio Volna: estilo de comunicação, regras comportamentais, como reage a correções e o que considera importante no diálogo.

- Memória de arquivo. Esta é uma camada para fatos detalhados que não precisam ser mantidos constantemente no prompt, mas é importante poder encontrá-los rapidamente. A busca é semântica, com reclassificação por atualidade para que um fato antigo, mas semelhante, não sobreponha um mais recente.

- Registro episódico diário. Após cada diálogo, o sistema extrai fatos curtos e os escreve em um arquivo markdown. Lá vão decisões, preferências, reações explícitas. Ao iniciar uma nova sessão, apenas os últimos 3 dias são retornados ao contexto, e apenas de forma resumida.

- Grafo de relações no Neo4j. Separadamente, é construída uma rede de entidades: pessoas, projetos, empresas, tópicos, ferramentas, eventos. Se eu menciono algo familiar em uma mensagem, o Volna tenta levantar as entidades e relações associadas a ele. Em essência, esta é uma camada não de "memória de fatos", mas de "memória de estrutura".


A ideia chave é que essas camadas não são misturadas no modelo da mesma forma.

Quando a sessão é reiniciada ou o contexto é reduzido, o Volna monta o quadro novamente. E no fluxo normal, ele não carrega todo o dump de memória, mas usa o cache básico e o contexto dinâmico da mensagem.

Isso é importante tanto para a qualidade quanto para a velocidade. Se você sempre alimentar o modelo com toda a memória de uma vez, ele começa a se afogar no próprio passado. Se, ao contrário, mantiver apenas um resumo curto, perde-se a sensação de continuidade da comunicação.


Separadamente, gosto de como é feita a atualização da memória após a resposta. Ela ocorre de forma assíncrona, em segundo plano. Ou seja, o usuário já recebeu a mensagem, enquanto o sistema paralelamente faz várias coisas:
- extrai fatos da troca,
- atualiza o registro diário,
- envia o diálogo para o Letta para atualizar a memória de longo prazo
- e atualiza o grafo de entidades.

Além disso, existem alguns limitadores úteis. Por exemplo, trocas muito curtas podem nem entrar na extração de fatos. E a quantidade de fatos depende da duração do diálogo. É uma coisa simples, mas protege bem a memória de lixo.


Outra camada importante são os snapshots de sessões. Quando a conversa termina, o sistema salva um breve snapshot JSON: resumo, últimas falas, número de turnos, às vezes observações sobre humor ou padrão comportamental. No próximo reset, esse snapshot pode ser retornado ao contexto uma vez e dá a sensação de que o agente não "acordou do zero".


Separadamente, o Volna tem uma camada de reflexão sobre a memória.

Se a pergunta é algo como "como mudou a atitude do Vlad em relação ao trabalho" ou "qual é a trajetória dele em relação à saúde", a simples busca já é fraca: ela retorna pedaços, não compreensão.

Para isso, existe memory_reflect. Primeiro, ele levanta um conjunto de memórias relevantes por meio de busca semântica, depois as passa para o modelo com a tarefa separada de montar uma narrativa coesa a partir de registros dispersos. O resultado é uma breve interpretação de 2 a 5 parágrafos.


E, claro, a memória precisa de manutenção. Caso contrário, qualquer sistema de memória rapidamente se transforma em um depósito digital. Por isso, um processo de manutenção separado.


Resumindo, a memória do Volna não é um único prompt, nem um único banco de dados, nem uma única recuperação. É um roteamento de diferentes tipos de memória com diferentes tempos de vida, diferentes custos e diferentes formas de injeção no contexto.


❗️❗️❗️❗️❗️❗️❗️❗️ / Não proibido na Rússia