Memora: sistema de memória escalável para tarefas de longo prazo
(github.com/microsoft)Visão geral resumida
-
Objetivo
- Um framework de memória que ajuda agentes de IA a extrair automaticamente informações necessárias de conversas e documentos, armazená-las no longo prazo e recuperá-las depois
-
Projeto central
- O
Memory value, que contém o texto original completo, é preservado como está, enquanto a recuperação usaPrimary abstractioneCue anchors
- O
-
Principais diferenciais
- Em vez do RAG comum, que incorpora diretamente todo o texto original, a estrutura busca reduzir perda de informação e ambiguidades na recuperação
-
Principais recursos
- Suporte a extração automática de memórias, remoção de duplicatas, mesclagem e atualização, busca semântica, busca por palavras-chave e busca em múltiplas etapas baseada em LLM
-
Público-alvo
- IA conversacional de longo prazo, sistemas multiagente, serviços personalizados e gestão de conhecimento baseada em documentos
-
Estado atual
- Projeto open source em Python sob licença MIT, com benchmarks e recursos experimentais, mas ainda próximo de uma fase inicial de divulgação
Introdução
Resolviendo a complexidade da gestão de memória de agentes
-
No desenvolvimento tradicional de agentes de IA, o desenvolvedor precisa lidar diretamente com os seguintes problemas
- decidir quais informações devem ser armazenadas como memória
- determinar quando as informações armazenadas devem ser atualizadas ou removidas
- recuperar memórias relacionadas à pergunta do usuário
- gerenciar memórias duplicadas ou conflitantes
-
O objetivo do Memora é tratar esse ciclo de vida da memória dentro do próprio framework
-
Assim, o desenvolvedor pode se concentrar mais nas funções de trabalho do agente e na geração de respostas do que na lógica de baixo nível de armazenamento e recuperação
Limites das arquiteturas de memória existentes
-
Sistemas RAG comuns
- dividem documentos ou conversas em partes de tamanho fixo
- geram embeddings de cada trecho e os armazenam em um banco de dados vetorial
- recuperam os trechos semanticamente mais próximos da pergunta
-
Embora esse método seja simples de implementar, ele pode gerar os seguintes problemas
- contextos longos são divididos em vários trechos
- informações com formulações semelhantes ficam armazenadas de forma duplicada
- uma simples similaridade semântica pode não corresponder à intenção real da pergunta
- ao armazenar apenas resumos comprimidos, detalhes podem se perder
-
Bases de conhecimento em formato de grafo são vantajosas para representar relações, mas trazem o peso de manter continuamente esquemas e estruturas relacionais
Desenvolvimento
Separação entre texto original e estrutura de recuperação
- Cada memória no Memora é composta por três elementos
Memory value
- A informação completa realmente armazenada
- Preserva o texto original e os detalhes sem compressão
- Não é incluída diretamente no índice de busca
- Serve para manter o contexto original sem perda de informação
Primary abstraction
- Um resumo representativo que indica sobre o que aquela memória trata
- É gerado um por memória
- É usado como base para recuperação, atualização, mesclagem e remoção de duplicatas
- Funciona como unidade padrão que representa a identidade da memória
Cue anchors
- Múltiplas pistas semânticas que permitem acessar uma mesma memória
- São formadas pela combinação de pessoas, objetos, eventos, atributos centrais e afins
- Várias pistas podem ser ligadas a uma única memória
- Isso forma uma estrutura muitos-para-muitos em que várias memórias podem compartilhar a mesma pista
Indexação seletiva do que será buscado
-
O Memora não indexa diretamente todo o texto original
-
Na recuperação real, ele usa apenas as seguintes informações
Primary abstractionCue anchors
-
Quando a busca termina, o
Memory valueoriginal associado é retornado -
Objetivos dessa estrutura
- separar a representação usada para busca da informação realmente armazenada
- manter o índice de recuperação conciso
- preservar intactos os detalhes do texto original
- reduzir ruídos semânticos que podem surgir de embeddings do texto bruto
Um meio-termo entre RAG e estrutura de grafo
-
Oferece pistas de recuperação mais estruturadas que um RAG comum
-
Não define todas as relações com um esquema rígido como em um banco de dados de grafo
-
A ideia é adicionar uma camada de abstração sobre as memórias para obter ao mesmo tempo flexibilidade e estrutura
-
Direção central
- o texto original é armazenado em formato livre
- representações estruturadas são usadas para busca e ligação
- estrutura de armazenamento e estrutura de recuperação são gerenciadas de forma independente
Fluxo de processamento, da criação da memória à resposta
1. Coleta de memória
-
O agente processa uma conversa ou documento
-
O conteúdo é usado para extrair automaticamente as seguintes informações
- fatos
- eventos e experiências
- procedimentos e formas de trabalho
-
Conversas longas são divididas em episódios por tema
-
As informações centrais são convertidas em itens de memória estruturados
2. Armazenamento inteligente
-
Usa o banco de dados vetorial ChromaDB como armazenamento padrão
-
Armazena memórias usando embeddings semânticos
-
Quando novas informações entram, elas são comparadas com memórias existentes
-
Para informações semelhantes ou duplicadas, executa as seguintes ações
- remoção de duplicatas
- mesclagem com memórias existentes
- atualização de informações antigas
-
Opcionalmente, pode criar um
Cue indexpara dar suporte à recuperação estruturada
3. Recuperação adaptativa
- Oferece várias estratégias de busca conforme o tipo de pergunta e a configuração
Busca semântica
- Calcula a similaridade vetorial entre a pergunta e as representações de memória
- A implementação é simples e aplicável a perguntas gerais
- Pode encontrar informações semanticamente parecidas mesmo com formas de expressão diferentes
Busca com prompt
- O LLM executa o processo de recuperação em etapas
- Com base nos primeiros resultados, ajusta repetidamente os termos e o escopo da busca
- É adequada para perguntas complexas ou que exigem combinar várias memórias
- Como envolve chamadas adicionais ao LLM, pode aumentar custo e tempo de resposta
Busca híbrida
- Combina busca semântica vetorial com busca BM25 e por palavras-chave
- Usa ao mesmo tempo similaridade semântica e correspondência exata de termos
- É vantajosa para reduzir falhas na busca de nomes próprios, nomes de produtos, código, datas e afins
Busca GRPO
- Usa uma política de recuperação treinada com aprendizado por reforço
- Aprende o próprio método de selecionar as memórias necessárias para a pergunta
- Busca substituir a recuperação iterativa baseada em LLM por um modelo local ajustado finamente
- Atualmente é classificada como funcionalidade experimental
4. Geração de resposta
- As memórias recuperadas são organizadas em um formato definido
- Esse conteúdo é inserido no prompt do LLM
- O LLM gera a resposta usando em conjunto a pergunta e as memórias recuperadas
- A ideia é induzir respostas fundamentadas nas memórias armazenadas
Recursos de gestão para manter a qualidade da memória
-
Diferentemente de um repositório plano que apenas continua acumulando memórias, o sistema gerencia o estado das memórias existentes
-
Principais funções de gestão
- remoção de memórias duplicadas
- mesclagem de memórias semelhantes
- atualização de fatos alterados
- reorganização da estrutura de memória
-
Usa
Primary abstractioncomo base para atualização e consolidação das memórias -
O objetivo é reduzir o acúmulo ilimitado de duplicações ao longo do tempo
Suporte a vários tipos de memória
- É possível representar diferentes tipos de memória configurando de forma distinta o valor da memória e o método de abstração
Memória factual
- Informações relativamente estáveis, como pessoas, locais, atributos e configurações
- Ex.: local de trabalho de um usuário específico, ferramentas preferidas, stack tecnológica de um projeto
Memória episódica
- Eventos ou conversas ocorridos em um momento específico
- Ex.: decisões tomadas em uma reunião passada, processo usado para resolver um erro específico
Memória procedural
- Métodos de trabalho ou procedimentos repetíveis
- Ex.: procedimento de deploy de servidor, sequência de verificação de erros, regras de geração de documentos
Compartilhamento e isolamento de memória em múltiplos agentes
-
Vários agentes que operam no mesmo ambiente podem usar um espaço de memória compartilhado
-
Informações salvas por um agente podem ser reutilizadas por outro
-
Também é possível limitar o escopo da memória por agente ou por função
-
Efeitos esperados
- redução de duplicação de conhecimento entre agentes
- melhoria na passagem de trabalho entre agentes
- manutenção da consistência de informações comuns de projeto
-
A estrutura oferece suporte a compartilhamento seletivo e proteção de privacidade por meio de controle de acesso e isolamento
Separação entre infraestrutura de armazenamento e estrutura de representação
-
O sistema foi projetado para que a forma de representação da memória não dependa fortemente de um armazenamento específico
-
A estrutura do projeto inclui integração com os seguintes bancos de dados
- ChromaDB
- Redis
-
Pode ser aplicado em ambientes de armazenamento locais ou remotos
-
Mesmo trocando o backend de armazenamento, a estrutura de abstração e pistas da memória pode ser mantida
Forma básica de uso
- Requer Python 3.10 ou superior
- Clone o repositório no GitHub e instale o pacote
- Crie um
MemoraCliente defina um identificador de usuário ou de agente - Use
add()para adicionar conversas ou documentos à memória - Use
query()para realizar busca semântica - Use
advance_query()para realizar buscas avançadas nos modos Prompted ou GRPO
Estrutura de integração com agentes
-
Ao receber uma mensagem do usuário, primeiro recupera memórias relacionadas
-
Gera a resposta usando os resultados da busca e a pergunta do usuário
-
A resposta gerada e a mensagem do usuário são organizadas em um único registro de conversa
-
Essa conversa é então armazenada novamente no Memora
-
Processo repetitivo
- receber a pergunta
- recuperar memórias relevantes
- gerar resposta
- armazenar a conversa
- reutilizar nas perguntas seguintes
Avaliação de desempenho de memória de longo prazo
Benchmark LoCoMo
-
Avalia a capacidade de recuperar memórias em conversas de longa duração
-
Principais tipos de avaliação
- perguntas de etapa única
- perguntas em múltiplas etapas que combinam várias informações
- perguntas sobre relações temporais
- perguntas abertas
-
É possível testar combinações de busca semântica, Prompted e
Cue index
Benchmark LongMemEval
- Avalia a capacidade de um sistema de memória de longo prazo de lidar com vários tipos de pergunta
- Permite aplicar configurações de memória episódica e busca semântica
- Serve para verificar retenção de informação e desempenho de recuperação em ambientes reais de conversação de longo prazo
Aprendizado de política de recuperação com base em GRPO
-
Recurso experimental para aprender o procedimento de busca como uma política de aprendizado por reforço
-
Etapas do processo
- gerar caminhos de busca com a política atual
- avaliar fundamentação, duplicação e custo dos resultados de busca
- calcular vantagem relativa de grupo
- treinar a política de recuperação com o método GRPO
-
São apresentados como exemplos modelos da linha Qwen 3B ou 7B com ajuste fino via LoRA
-
O treinamento requer GPU
-
Objetivos
- reduzir o custo de chamar um LLM externo a cada busca
- construir estratégias de recuperação otimizadas para dados e tarefas específicos
-
Limitações
- são necessários dados de treinamento e critérios de avaliação
- soma-se a complexidade de treinamento e operação do modelo
- para uso geral, é mais complexo do que a busca semântica
Principais vantagens
- Permite preservar detalhes do texto original sem compressão
- A separação entre representação para busca e informação real torna a estrutura de memória mais clara
- É possível tratar remoção de duplicatas e atualização de memória de forma sistemática
- É possível escolher entre busca semântica, por palavras-chave, via LLM e com aprendizado por reforço
- Memórias factuais, episódicas e procedurais podem ser gerenciadas em um único framework
- Vários agentes podem compartilhar as mesmas memórias
- Busca integração com sistemas de agentes existentes com mudanças relativamente pequenas
- Pode suportar tanto estruturas de armazenamento locais quanto remotas
Limitações estruturais e pontos de atenção
- A qualidade de
Primary abstractioneCue anchorsafeta diretamente o desempenho da recuperação - Se a abstração gerada automaticamente for imprecisa, a memória pode não ser recuperada mesmo com o texto original correto
- Uma estrutura que não indexa diretamente o texto original pode ser desfavorável para recuperar frases específicas ou informações raras
- No processo de remoção de duplicatas e mesclagem, eventos diferentes podem acabar integrados incorretamente em uma única memória
- A busca com prompt pode aumentar custo e latência por exigir várias chamadas ao LLM
- A abordagem GRPO requer GPU, dados de treinamento e estrutura de avaliação, elevando a complexidade operacional
- Em memórias compartilhadas entre múltiplos agentes, permissões de acesso e isolamento de informação precisam ser projetados com clareza
- Ao armazenar dados pessoais ou conversas sensíveis, são necessárias políticas separadas de criptografia, exclusão e retenção
- O repositório público não tem releases e possui poucos indicadores de participação e uso, então ainda é difícil afirmar que sua estabilidade em operação de grande escala foi suficientemente validada
Conclusão
Uma abordagem de memória de longo prazo com camada de acesso estruturada
-
O Memora propõe sair do modelo de simplesmente vetorizar todo o texto original e sugere a seguinte estrutura
- os detalhes são preservados em
Memory value - o significado representativo é expresso por
Primary abstraction - diferentes caminhos de recuperação são organizados por
Cue anchors
- os detalhes são preservados em
-
Seu valor central está no equilíbrio entre preservação de informação e eficiência de recuperação
-
Em vez de simples busca documental, o potencial de uso parece maior nos seguintes cenários
- agentes personalizados que interagem com usuários por longos períodos
- sistemas que acumulam continuamente muitos documentos técnicos e de trabalho
- ambientes em que agentes de diferentes funções compartilham conhecimento
- projetos que precisam reutilizar decisões passadas e procedimentos de trabalho
Validação necessária antes da adoção
-
Na aplicação real, os seguintes fatores devem ser verificados primeiro
- qualidade da abstração e da geração de cues em documentos em coreano
- precisão de recuperação em comparação com RAG tradicional
- taxa de erro no processo de mesclagem de memórias
- crescimento de dados e velocidade de busca em operação de longo prazo
- custo de APIs de LLM e de embeddings
- forma de armazenamento de dados pessoais e controle de acesso
-
Em uma fase inicial, é adequado realizar um pequeno PoC com parte dos documentos principais e comparar o desempenho com RAG comum e com busca híbrida
Ainda não há comentários.