Um modelo de linguagem não conserva as informações de uma chamada para a outra: em cada execução, ele trabalha apenas com o texto fornecido no pedido. Para os agentes de IA, que precisam de acompanhar as suas ações passadas, reter as preferências de um utilizador ou prosseguir uma tarefa em várias etapas, esta limitação torna necessária uma memória exterior ao modelo. Esta memória armazena as informações fora da janela de contexto, ou seja, a quantidade de texto que um modelo pode processar de uma só vez, e restitui-as quando são úteis.
Os blocos da memória dos agentes
Os agentes precisam de transportar informações de uma chamada e de uma tarefa para a outra. Podem ter de se lembrar do que já foi planeado para evitar ações duplicadas, ou guardar na memória os procedimentos que falharam para não repetir o mesmo trabalho. Sem memória, cada chamada dispõe apenas do contexto que lhe é fornecido.
Os tipos de memória distribuem-se em quatro categorias. A memória de trabalho contém o estado ativo da tarefa, como os resultados intermédios, e consulta-se diretamente por chave. A memória episódica conserva o que aconteceu: interações passadas, execuções de tarefas e decisões tomadas, num diário cronológico ou numa base vetorial, com uma pesquisa por similaridade semântica. A memória semântica reúne o que é tido como verdadeiro, ou seja, os factos e as preferências, que são atualizados em vez de adicionados. A memória procedural descreve a maneira de fazer as coisas, quer se trate de esquemas de ações bem-sucedidas ou de modos de falha conhecidos, e apoia-se em modelos de prompts ou no fine-tuning, um ajuste do modelo a partir de dados específicos.
Conceber uma memória fiável
No exemplo de um agente de pesquisa a trabalhar vários dias na mesma tarefa, cada resultado é primeiro escrito em memória de trabalho com uma duração de vida curta. Quando um resultado se revela útil, passa para a memória episódica com uma pontuação de importância. Antes de cada chamada de ferramenta, o agente consulta a memória de trabalho e depois, se necessário, a memória episódica. Se a tarefa falhar a meio do caminho, o estado temporário pode ser apagado enquanto o histórico dos trabalhos concluídos é conservado.
Várias práticas tornam a memória mais fiável à medida que cresce: anotar a importância das informações antes da sua escrita, limitar a memória de cada agente ao seu papel nos sistemas multiagentes, consultar a memória em cada etapa de decisão, e traçar a origem de cada elemento, quer venha de um agente, de uma ferramenta, de uma entrada do utilizador ou de uma data/hora. Algumas abordagens, simples de implementar, tornam-se por outro lado pouco fiáveis. É o caso do armazenamento de tudo numa única base vetorial, da compressão por resumos livres, que pode apagar números ou restrições, do crescimento sem limite da memória, ou ainda da confiança concedida da mesma forma a cada escrita. Esta última expõe ao envenenamento da memória, onde um conteúdo não fiável ou malicioso é armazenado e depois tratado como uma informação segura.
Frameworks com abordagens diferentes
Os frameworks situam-se entre uma memória textual simples e os grafos de conhecimento. Letta assenta em blocos de texto que o agente pode reescrever ele próprio, e atualiza um bloco quando deteta uma contradição. Mem0 utiliza uma memória vetorial com uma pesquisa sensível a entidades, e adiciona as novas memórias ao lado das antigas. Graphiti apoia-se num grafo de conhecimento bitemporal com relações tipadas: invalida as relações antigas enquanto conserva o seu histórico consultável. Cognee constrói a partir dos dados de origem camadas de grafo, vetoriais e relacionais, e reconstrói a representação da memória, com modos temporais para acompanhar as mudanças.
Nos sistemas multiagentes, a partilha da memória pode provocar conflitos durante as atualizações simultâneas. As soluções evocadas incluem um serviço central com controlo das escritas, espaços de nomes separados para cada agente, ou diários em modo de apenas acrescentar cujos conflitos são resolvidos na pesquisa. A avaliação apoia-se em vários indicadores: o recall, que mede se as memórias relevantes são recuperadas, a precisão, que mede a parte de informações inúteis devolvidas, a fidelidade, que verifica o uso correto das informações recuperadas, e a obsolescência, que mede a frequência das informações desatualizadas. Segundo o artigo, a escolha depende da carga de trabalho do agente, dos seus dados e das suas exigências operacionais.
