Antes de desenvolver qualquer agente de IA, é fundamental definirmos a estratégia de retenção de contexto. A memória não é apenas um armazenamento de dados; é a espinha dorsal da "personalidade" e da utilidade do agente. Temos que nos perguntar o seguinte sobre a nossa aplicação:
- Memória de Curto Prazo? É necessária para garantir a continuidade e fluidez da conversa imediata?
- Memória de Longo Prazo? O agente precisa lembrar de fatos de sessões passadas?
- Granularidade? Ela tem que guardar todos os detalhes exatos ou apenas o conceito geral?
- Recuperação (Retrieval)? Como será a guarda, a busca e o uso dessas informações?
Exemplo Prático: Pam - Friendly AI Teacher
Figura 1: Pam, uma agente de IA projetada para ajudar usuários a praticar idiomas via WhatsApp.
O intuito da Pam é atuar como uma amiga conversando com você, uma amiga que tem muito conhecimento de línguas e sugere correções quando existe oportunidade.
Em uma conversa como essa, não é necessário um banco de dados com detalhes exatos de cada assunto. Como o objetivo é fazer o usuário falar e exercitar, eu precisava de um histórico com informações relevantes sobre o usuário apenas, e que tenham sido trazidas por ele durante a conversa: nome, profissão, hobbies, o que fez recentemente, gosto musical, etc.
Respondendo às perguntas para a Pam:
- Sim (Curto Prazo): Configurei que pelo menos as últimas 10 mensagens devem estar intactas sempre para manter o fluxo.
- Sim (Longo Prazo): Necessário para personalização.
- Não (Detalhes): Pode ser uma memória que lembra vagamente de informações trazidas pelo usuário (resumos).
- Estratégia: Memória resumida resolve, sempre sendo passado o resumo acumulado e as últimas conversas para a LLM.
A Solução: Memória Elástica
Nesse caso, desenvolvi uma arquitetura de "Memória Elástica". Ela funciona como um buffer inteligente que se adapta conforme a conversa evolui, gerenciado diretamente pelo LangGraph.
A dinâmica funciona da seguinte forma:
- A conversa inicia apenas com os system prompts.
- Conforme o usuário conversa, novas mensagens preenchem a janela de contexto.
- Quando atinge um threshold de tokens, a conversa é processada.
- O sistema gera um resumo de tudo exceto as últimas X mensagens (para garantir que a IA não "esqueça" o que acabou de ser dito).
- Uma nova memória é instanciada contendo:
[Resumo Anterior + Novas Mensagens Recentes].
Benefícios dessa abordagem
- Fluidez da conversa mantida
- Baixo uso de tokens (Redução de Custo)
- Baixa latência nas respostas
- Gerenciamento simplificado
- Baixo custo de armazenamento
- Encapsulamento simples no LangGraph