1
resposta

integrar memória Langgraph

1️ Conceito Aplicado

O objetivo do agente e:

Armazene informações relevantes dos e-mails (memória persistente)

Busque contexto anterior antes de responder

Construa prompt dinâmico com histórico + regras

Responda de forma contextualizada e coerente

Isso transforma o agente de reativo em contextual e acumulativo.

2️ Arquitetura do Fluxo
Novo e-mail recebido

Search Memory Tool (busca contexto relevante)

Prompt Dinâmico (histórico + regras + perfil)

LLM decide ação

Managed Memory Tool (salva nova informação relevante)

Resposta

3️ Setup Básico
pip install langgraph langchain langchain-google-genai langmem python-dotenv

import os
from dotenv import load_dotenv
from typing import TypedDict
from langchain_google_genai import ChatGoogleGenerativeAI
from langchain.agents import tool
from langgraph.graph import StateGraph, END
from langmem import MemoryManager
load_dotenv()

llm = ChatGoogleGenerativeAI(
model="gemini-1.5-flash",
temperature=0
)
4️ Estado do Grafo
class EmailState(TypedDict):
email: str
memory_context: str
response: str
5️ Configuração da Memória
memory = MemoryManager()
6️ Managed Memory Tool (Salvar Memória)

Responsável por armazenar informações importantes.

@tool
def ManagedMemoryTool(content: str):
"""Armazena informações relevantes na memória."""
memory.add(content)
return "Memória atualizada com sucesso."
7️ Search Memory Tool (Buscar Memória)

Busca informações anteriores relacionadas ao e-mail atual.

@tool
def SearchMemoryTool(query: str):
"""Busca informações relevantes na memória."""
results = memory.search(query)
return "\n".join(results) if results else "Nenhum contexto relevante encontrado."
8️ Construção Dinâmica do Prompt

Aqui combinamos:

Perfil do usuário

Regras

Histórico relevante

Novo e-mail

user_profile = {
"name": "Moacir",
"role": "Advogado",
}

triage_rules = """
Responda formalmente.
Priorize clientes.
Considere compromissos anteriores.
"""

def build_dynamic_prompt(email, memory_context):
return f"""
Você é assistente de {user_profile['name']}, {user_profile['role']}.

Regras:
{triage_rules}

Contexto relevante anterior:
{memory_context}

Novo e-mail:
{email}

Responda considerando o histórico.
"""
9️ Nó de Busca de Memória
def search_memory_node(state: EmailState):
context = SearchMemoryTool.invoke(state["email"])
return {"memory_context": context}
10 Nó do Agente com Prompt Dinâmico
def agent_node(state: EmailState):
prompt = build_dynamic_prompt(
state["email"],
state["memory_context"]
)

response = llm.invoke(prompt)

# Salva informações importantes automaticamente
ManagedMemoryTool.invoke(
    f"E-mail processado: {state['email']}"
)

return {"response": response.content}

1️1️ Construção do Grafo
builder = StateGraph(EmailState)

builder.add_node("search_memory", search_memory_node)
builder.add_node("agent", agent_node)

builder.set_entry_point("search_memory")

builder.add_edge("search_memory", "agent")
builder.add_edge("agent", END)

graph = builder.compile()
1️2️ Execução
initial_state = {
"email": """
Assunto: Audiência semana que vem

Dr., confirmando disponibilidade para audiência já mencionada anteriormente.
"""
}

result = graph.invoke(initial_state)

print(result["response"])

Evolução Conceitual

Sem memória → agente responde isoladamente
Com memória → agente constrói continuidade narrativa

1 resposta

Olá, Moacir! Como vai?

Parabéns pela forma como integrou memória no LangGraph!

Observei que você explorou o uso de ferramentas para buscar e salvar contexto de forma persistente, utilizou muito bem a construção dinâmica de prompts para enriquecer as respostas e ainda compreendeu a importância de transformar o agente em contextual e acumulativo.

Continue compartilhando suas soluções, com certeza isso ajudará outros estudantes e tem grande relevância para o fórum.

Fico à disposição! E se precisar, conte sempre com o apoio do fórum.

Abraço e bons estudos!

AluraConte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!