\n\n\n\n A memória dos meus agentes IA: Resolver o inchaço & a lentidão - AgntAI A memória dos meus agentes IA: Resolver o inchaço & a lentidão - AgntAI \n

A memória dos meus agentes IA: Resolver o inchaço & a lentidão

📖 14 min read2,763 wordsUpdated Apr 5, 2026

Olá a todos, aqui é Alex, de volta ao agntai.net. Estamos a 23 de março de 2026, e recentemente encontrei um problema particular que acho que muitos de vocês, que constroem agentes de IA, provavelmente enfrentam: como evitar que a memória de longo prazo do seu agente se torne uma bagunça inchada, lenta e, em última análise, inútil?

Todos nós passamos por isso. Você começa com uma ideia brilhante para um agente que precisa lembrar das preferências dos usuários, das interações passadas, ou até mesmo de suas próprias descobertas internas. Você configura um banco de dados vetorial, joga um monte de embeddings e, por um tempo, é mágico. O agente parece inteligente, ciente do contexto, e você se sente satisfeito. Então, lenta mas seguramente, as coisas começam a dar errado. Os tempos de recuperação aumentam. O agente começa a ficar confuso, puxando informações irrelevantes porque sua memória está simplesmente muito vasta e não estruturada. É como tentar encontrar uma frase específica em um livro de um milhão de páginas sem índice. Recentemente, bati de frente com essa parede em um projeto pessoal, um agente projetado para me ajudar a gerenciar minhas tarefas de redação freelancer. Depois de cerca de dois meses de uso diário, sua “memória” era apenas um pântano de ideias de artigos inacabados, anotações de clientes e pedaços de pesquisa. Ele puxava de tudo e de nada. A empolgação inicial claramente havia desaparecido.

Hoje, quero falar sobre como podemos tornar nossos agentes mais inteligentes sobre o que eles lembram, e mais importante, sobre como eles recordam. Não se trata de alocar mais recursos de computação para o problema; trata-se de uma melhor organização e de um toque de metacognição no nível do agente. Mais especificamente, estou me concentrando em uma técnica que chamo de “Filtragem de Memória Hierárquica” – essencialmente, dar aos nossos agentes um meio estruturado de decidir o que lembrar, o que esquecer e como categorizar as coisas importantes para uma recuperação mais rápida e precisa.

O Problema com uma Memória Plana e Infinita

A maioria das implementações de memória de agente básica, a minha incluída por muito tempo, são bastante simples:

  • Novas informações chegam (consulta do usuário, observação do agente, pensamento interno).
  • Integre a informação.
  • Armazene o embedding e o texto original em um banco de dados vetorial.
  • Quando o contexto é necessário, consulte o banco de dados com um novo embedding.
  • Recupere os elementos mais similares.

Isso funciona bem por um curto período. Mas à medida que a memória cresce, vários problemas emergem:

  • Sobreposição Semântica: Muitas informações podem ser “semanticamente similares”, mas apenas algumas são realmente relevantes para a tarefa *atual*. Por exemplo, meu agente de redação recuperaria todos os meus artigos antigos sobre agentes de IA enquanto eu precisava apenas daquele sobre a arquitetura do agente.
  • Velocidade de Recuperação: À medida que o banco de dados cresce, até mesmo a busca por similaridade vetorial pode desacelerar, especialmente se você estiver realizando filtragens complexas ou precisar de reclasificação.
  • Ruído Contextual: O agente é sobrecarregado por muitas informações, o que resulta em respostas ou ações menos direcionadas. É como ter um assistente útil que apenas despeja todos os documentos potencialmente relacionados em sua mesa.
  • Esquecer é Difícil: Como podar informações antigas não relevantes sem perder algo importante? A poda manual não é escalável.

Meu agente de redação começou a alucinar títulos de artigos com base em ideias antigas abandonadas porque a pesquisa vetorial puxava fragmentos de conceitos pouco desenvolvidos. Era uma bagunça.

Apresentação da Filtragem de Memória Hierárquica (FMH)

A FMH não é um novo algoritmo notório; é uma combinação estratégica de técnicas existentes, aplicadas com uma perspectiva centrada no agente. A ideia central é ir além de um único repositório de memória plana e introduzir camadas de abstração e filtragem, guiadas pelos objetivos e estado atual do agente. Pense nisso como dar ao seu agente um arquivo de classificação com diferentes gavetas, pastas nessas gavetas, e um espaço de trabalho ativo.

Camada 1: Memória de Trabalho Efêmera (Curto Prazo)

É o seu buffer de conversa padrão, o contexto imediato. É de curta duração e diretamente relacionado à interação em andamento. Meu agente a utiliza para as 5 a 10 últimas trocas de uma conversa. É rápido, diretamente acessível, e não atinge o armazenamento de memória a longo prazo, a menos que seja explicitamente solicitado.

Implementação: Uma simples `deque` ou lista de objetos de mensagem. Fácil.

Camada 2: Memória de Longo Prazo Categorizada (Médio Prazo)

É aqui que a mágica começa. Em vez de uma imensa base de dados vetorial, nós partitionamos nossa memória de longo prazo em categorias. Essas categorias não são arbitrárias; elas são derivadas das tarefas ou áreas esperadas do agente. Para meu agente de escrita, as categorias incluem “Projetos de Clientes”, “Ideias de Artigos (Ativas)”, “Ideias de Artigos (Arquivadas)”, “Notas de Pesquisa” e “Preferências Pessoais”.

Quando novas informações chegam, o agente primeiro decide a que categoria elas pertencem. Essa decisão pode ser tomada por uma breve chamada de LLM ou um conjunto de regras. Por exemplo, se um usuário disser: “Comece um novo artigo sobre aprendizado federado”, a função interna de “gerenciador de memória” do agente classificaria isso como “Ideias de Artigos (Ativas)”.

Cada categoria tem, então, seu próprio armazenamento vetorial menor (ou até mesmo um índice separado em um armazenamento vetorial maior, como Pinecone ou Weaviate). Isso reduz significativamente o espaço de pesquisa quando o agente precisa recuperar informações relacionadas a uma categoria específica.

Exemplo de Implementação: Prompt de Categorização

Aqui está um exemplo em Python simplificado usando um LLM para categorizar uma mensagem recebida:


from openai import OpenAI

client = OpenAI()

def categorize_message(message: str, categories: list[str]) -> str:
 prompt = f"""Você é um assistente inteligente encarregado de categorizar as mensagens dos usuários.
 Atribua a seguinte mensagem a uma das categorias fornecidas.
 Retorne APENAS o nome da categoria.

 Categorias: {", ".join(categories)}

 Mensagem: "{message}"

 Categoria:"""
 
 response = client.chat.com_messages.create(
 model="gpt-4o", # Ou qualquer que seja seu modelo preferido
 messages=[{"role": "user", "content": prompt}],
 max_tokens=50,
 temperature=0.0
 )
 return response.choices[0].message.content.strip()

# Exemplo de uso para meu agente de escrita
my_categories = [
 "Projetos de Clientes",
 "Ideias de Artigos (Ativas)",
 "Ideias de Artigos (Arquivadas)",
 "Notas de Pesquisa",
 "Preferências Pessoais",
 "Conversa Geral",
 "Gestão de Tarefas"
]

new_message = "Lembre-se que eu prefiro escrever artigos nas terças e quintas."
category = categorize_message(new_message, my_categories)
print(f"Mensagem categorizada como: {category}") # Saída: Preferências Pessoais

new_message_2 = "Vamos começar a redigir o plano para o artigo 'Memória dos Agentes AI'."
category_2 = categorize_message(new_message_2, my_categories)
print(f"Mensagem categorizada como: {category_2}") # Saída: Ideias de Artigos (Ativas)

Uma vez categorizada, a mensagem e seu embedding são armazenados no repositório de memória da categoria respectiva. Isso é uma enorme vitória: quando o agente precisa recuperar “preferências pessoais”, ele consulta apenas essa parte específica, muito menor, de sua memória.

Camada 3: Memória Resumida & Consolidada (Arquivo de Longo Prazo)

É a camada da “sabedoria”. Com o tempo, até mesmo as memórias categorizadas podem se tornar volumosas. Minha categoria “Ideias de Artigos (Ativas)”, por exemplo, pode acumular dezenas de planos detalhados, links de pesquisa e sessões de brainstorming para um único artigo. O agente não precisa recordar *cada detalhe* toda vez. O que ele frequentemente precisa é de um resumo ou uma compreensão geral.

Essa camada envolve uma consolidação periódica. O agente (ou um processo em segundo plano) identifica clusters de memórias conexas dentro de uma categoria e gera um resumo conciso. Esses resumos são então armazenados em um repositório de memória distinto, mesmo em um nível superior, potencialmente com links direcionando às memórias detalhadas.

Exemplo de Caso de Uso: Resumir o Progresso de um Projeto

Digamos que meu agente esteja trabalhando em um projeto de cliente há uma semana. A categoria “Projetos de Clientes” para “Artigo de Blog Acme Corp” acumulou de 50 a 100 entradas de memória individuais (notas de reunião, fragmentos de pesquisa, parágrafos rascunho, feedbacks). Em vez de recuperar tudo isso, o agente pode periodicamente criar um resumo:


def resumir_memorias(memorias: list[str], contexto: str) -> str:
 # 'memorias' seria uma lista de fragmentos de texto relevantes recuperados de uma categoria
 # 'contexto' poderia ser algo como "Resuma os progressos no blog da Acme Corp."
 
 convite = f"""Você é um assistente inteligente. Examine as informações seguintes
 e forneça um resumo conciso relevante ao contexto fornecido.
 
 Contexto: {contexto}
 
 Informações:
 {'\n'.join([f"- {m}" for m in memorias])}
 
 Resumo:"""
 
 resposta = client.chat_com_messages.create(
 modelo="gpt-4o",
 messages=[{"role": "user", "content": convite}],
 max_tokens=500,
 temperatura=0.2
 )
 return resposta.choices[0].message.content.strip()

# Imagine que 'memorias_cliente_recuperadas' contenham muitas entradas detalhadas
# da categoria "Projetos de Clientes" para a Acme Corp.
# (Isso implicaria uma busca vetorial dentro dessa categoria específica)

# Para a demonstração, vamos inventar algumas memórias:
memorias_cliente_recuperadas = [
 "Reunião de 2026-03-18: Tema de discussão do post do blog 'O futuro da IA no marketing'.",
 "Nota de pesquisa: Três estudos de caso relevantes sobre o ROI do marketing com IA.",
 "Parágrafo de introdução redigido, enviado ao cliente para feedback inicial em 2026-03-20.",
 "Feedback do cliente recebido: 'A introdução está boa, concentre-se mais em exemplos práticos.'",
 "Início da seção sobre 'Jornadas do cliente personalizadas com IA'.",
 "A fazer: Encontrar estatísticas mais recentes sobre a adoção de IA em pequenas empresas."
]

resumo_projeto = resumir_memorias(
 memorias_cliente_recuperadas,
 "Resuma os progressos atuais e os pontos-chave para o 'Post do blog da Acme Corp.'."
)
print(f"Resumo do projeto:\n{resumo_projeto}")
# Exemplo de saída:
# Resumo do projeto:
# Os progressos do 'Post do blog da Acme Corp.' intitulado 'O futuro da IA no marketing' incluem uma reunião inicial em 2026-03-18.
# A pesquisa reuniu 3 estudos de caso sobre o ROI do marketing com IA. A introdução foi redigida e recebeu feedback positivo do cliente em 2026-03-20,
# com a sugestão de adicionar mais exemplos práticos. O trabalho começou na seção 'Jornadas do cliente personalizadas com IA'.
# Uma tarefa restante é encontrar estatísticas atualizadas sobre a adoção de IA em pequenas empresas.

Esse resumo é então armazenado como uma nova memória de nível superior na categoria “Resumos de Projetos Arquivados”, referenciando as memórias detalhadas se necessário. Quando o agente precisa rapidamente relembrar o estado do projeto da Acme Corp, ele pode recuperar esse resumo diretamente, em vez de vasculhar entre todas as notas individuais.

Essa abordagem também ajuda no esquecimento. Quando um projeto é concluído e arquivado, as memórias detalhadas podem eventualmente ser excluídas ou movidas para armazenamento frio, enquanto os resumos valiosos permanecem.

Recuperação de memória com HMF

O processo de recuperação se torna também mais inteligente:

  1. Classificação inicial: Quando o agente precisa recuperar informações (por exemplo, para responder a uma consulta do usuário ou informar uma ação), seu “gerenciador de memória” classifica primeiramente o *tipo* de informação necessária. “Quais são os meus prazos de clientes?” apontaria para “Projetos de Clientes.” “Fale-me sobre minhas preferências pessoais de escrita” apontaria para “Preferências Pessoais.”
  2. Pesquisa direcionada: O agente realiza então uma busca de similaridade vetorial *apenas dentro da memória da categoria identificada*. Isso é muito mais rápido e preciso do que pesquisar em um banco de dados monolítico.
  3. Aprimoramento contextual (opcional): Se a busca inicial fornecer demais ou de menos, o agente pode usar suas capacidades LLM para refinar a consulta de pesquisa, reorganizar os resultados ou até decidir consultar uma categoria mais ampla ou a camada de memória resumida. “Certo, encontrei alguns prazos, mas qual é o *mais urgente*?”
  4. Lembrete consolidado: Para tarefas complexas, o agente pode extrair um resumo de alto nível da camada 3, e depois aprofundar nas categorias da camada 2 para detalhes específicos se necessário.

“`html

Esse “acesso por camadas” é crucial. Ele imita a forma como os humanos lembram informações: não nos lembramos de cada conversa que tivemos quando nos perguntam novidades sobre nosso trabalho. Lembramos o resumo do nosso trabalho, depois de projetos específicos, e, em seguida, de detalhes específicos dentro desses projetos.

Além do armazenamento: Gestão ativa da memória

HMF também abre a porta para uma gestão de memória mais ativa pelo próprio agente:

  • Auto-reflexão e consolidação: Periodicamente, o agente pode revisar suas próprias memórias dentro de uma categoria, identificar redundâncias ou oportunidades de resumo, e consolidar de forma proativa.
  • Política de esquecimento: Definir regras para o esquecimento. “Arquivar todas as ideias de artigos (ativas) que não foram tocadas há 3 meses.” “Excluir entradas de ‘Conversa Geral’ com mais de 2 semanas.” Isso impede a sobrecarga de memória sem intervenção manual.
  • Poda motivada por objetivos: Se um projeto específico estiver concluído, o agente pode marcar suas memórias detalhadas associadas para arquivamento ou eventual exclusão, mantendo apenas o resumo de alto nível.

Meu agente de redação agora tem um trabalho cron noturno que executa uma função de “revisão de memória”. Ele busca “Ideias de artigos (ativas)” que não foram atualizadas há mais de 60 dias e me informa sobre elas. Se eu confirmar que não estão mais ativas, ele as move para “Ideias de artigos (arquivadas)” e gera um resumo conciso. Isso melhorou consideravelmente minha memória ativa, e meu agente está muito menos propenso a apresentar antigas ideias irrelevantes.

Para lembrar na arquitetura do seu agente

Se você está construindo agentes e enfrentando problemas de escala de memória, aqui está o que eu recomendo tentar:

  1. Não trate toda a memória da mesma forma: Diferencie o contexto conversacional de curto prazo, o conhecimento categorizado de médio prazo e a sabedoria resumida de longo prazo.
  2. Implemente a categorização cedo: Projete o sistema de memória do seu agente com categorias explícitas com base em suas funções principais ou áreas de usuário. Utilize uma pequena chamada LLM ou um sistema baseado em regras para classificar as informações entrantes.
  3. Use várias (menores) lojas/índices vetoriais: Em vez de um enorme banco de dados vetorial, considere usar índices ou coleções separadas para cada categoria de memória. Isso torna as pesquisas muito mais rápidas e direcionadas.
  4. Adote a sumarização para a memória de longo prazo: Estabeleça um processo (manual ou automatizado) para resumir periodicamente grupos de memórias detalhadas relacionadas. Armazene esses resumos separadamente e vincule-os às entradas detalhadas.
  5. Desenhe para o esquecimento: Integre políticas explícitas para podar ou arquivar informações antigas e não relevantes. Não deixe seu agente se tornar um acumulador digital.
  6. Dê ao seu agente um papel de “gerente de memória”: Em vez de simplesmente empilhar informações na memória, dê ao seu agente uma função interna ou um sub-agente cuja única tarefa é decidir *como* e *onde* as informações devem ser armazenadas, recuperadas e gerenciadas.

Mudar de uma memória plana e monolítica para um sistema hierárquico e ativamente gerido foi uma mudança significativa para meu agente de redação. É mais rápido, mais inteligente e muito menos propenso a confusão semântica. Isso requer um pouco mais de trabalho de design inicial, mas os benefícios em termos de desempenho e consistência do agente realmente valem a pena. Experimente HMF em seu próximo projeto de agente e me avise como está indo!

Até a próxima, continue construindo agentes inteligentes!

Alex Petrov, agntai.net

Artigos Relacionados

“`

🕒 Published:

🧬
Written by Jake Chen

Deep tech researcher specializing in LLM architectures, agent reasoning, and autonomous systems. MS in Computer Science.

Learn more →
Browse Topics: AI/ML | Applications | Architecture | Machine Learning | Operations

Recommended Resources

AidebugAgntboxClawdevAgntup
Scroll to Top