
Dia 5/30: Estado vs Memória no LangGraph
Recentemente, passei uma tarde frustrante depurando um bot de suporte construído com LangGraph, observando-o esquecer consistentemente o contexto da conversa após apenas algumas trocas. O problema se manifestou de uma maneira simples: o bot perguntava ao usuário seu nome no início de cada interação, mesmo que ele já o tivesse fornecido. Era como se o bot não tivesse memória de conversas passadas, ou mesmo da atual. Esse comportamento não apenas era irritante, mas também fazia o bot parecer menos inteligente e menos capaz de fornecer suporte significativo.
Depois de investigar o código, percebi que o problema não estava na inteligência do bot ou na complexidade das conversas, mas em como eu estava usando o StateGraph do LangGraph em comparação com sua gestão de memória. Essencialmente, eu estava confundindo transições de estado com armazenamento de memória. No LangGraph, o StateGraph é usado para definir o fluxo de uma conversa ou processo, incluindo transições condicionais entre estados. No entanto, as informações armazenadas nesses estados (como o nome de um usuário) não são persistidas entre interações, a menos que sejam gerenciadas explicitamente através da memória.
Para ilustrar o problema e sua solução, vamos considerar um exemplo simplificado de um bot que cumprimenta os usuários e lembra seus nomes entre interações. Inicialmente, meu código poderia parecer algo assim:
from langgraph import StateGraph, add_node, add_conditional_edges
# Criar um novo StateGraph
graph = StateGraph()
# Adicionar nós para cumprimentar e perguntar o nome do usuário
add_node(graph, "start", "Olá! Qual é o seu nome?")
add_node(graph, "greeted", "Prazer em conhecê-lo, $name!")
# Adicionar arestas condicionais com base na entrada do usuário
add_conditional_edges(graph, "start", "greeted", lambda input: input.startswith("Meu nome é"))
# Este é um exemplo simplificado e não lida com a entrada real do usuário ou memória.
# O problema aqui é que "name" não está armazenado em lugar nenhum, então é perdido após o término da interação.
O erro chave neste exemplo é assumir que a transição de estado (movendo de "start" para "greeted") armazena inerentemente o nome do usuário. Na realidade, uma vez que a interação termina (por exemplo, o usuário fecha a janela de chat), o estado e qualquer informação que ele possa ter contido são perdidos. Para realmente lembrar o nome do usuário, precisamos usar as capacidades de gestão de memória do LangGraph, tipicamente através do Protocolo de Contexto do Modelo (MCP).
Aqui está uma versão corrigida que demonstra como usar a memória de forma eficaz:
from langgraph import StateGraph, add_node, add_conditional_edges
from mcp import MemoryManager
# Inicializar a gestão de memória
memory = MemoryManager()
# Criar um novo StateGraph
graph = StateGraph()
# Adicionar nós para cumprimentar, perguntar o nome do usuário e uma pergunta de acompanhamento
add_node(graph, "start", "Olá! Qual é o seu nome?")
add_node(graph, "greeted", "Prazer em conhecê-lo, $name! Como posso ajudá-lo hoje?")
# Função para extrair o nome da entrada do usuário e armazená-lo na memória
def extract_and_store_name(input):
name = input.replace("Meu nome é ", "")
memory.store("user_name", name)
return True
# Adicionar arestas condicionais com base na entrada do usuário, incluindo a extração e armazenamento do nome
add_conditional_edges(graph, "start", "greeted", extract_and_store_name)
# Antes de responder, carregar o nome do usuário da memória
def load_name(context):
name = memory.load("user_name")
if name:
context["name"] = name
return TrueEmpresas brasileiras que utilizam bots de suporte podem se beneficiar ao entender a importância da gestão de memória em interações. A implementação correta pode aumentar a satisfação do cliente e a eficiência do atendimento. Este artigo fornece insights práticos para desenvolvedores que buscam aprimorar suas soluções de IA.
Noticias relacionadas

Envie Mensagens SMS Personalizadas de uma Planilha Usando Claude Cowork e Vonage
Aprenda a usar Claude Cowork e o Vonage Tooling MCP Server para enviar SMS personalizados a partir de feedback de clientes armazenados em uma planilha. O tutorial abrange desde a configuração até o envio das mensagens.

Métodos de Pesquisa de Concorrentes na Amazon: Um Guia para Desenvolvedores com Código
Este tutorial ensina a construir um sistema completo de pesquisa de concorrentes na Amazon usando Python e a API Pangolinfo, apresentando o framework IBADM e código pronto para produção.

Construa uma Ferramenta de Análise Somente para Leitura Antes de Dar Ações ao Seu Agente
Aprenda a criar um agente de análise que responda a perguntas em linguagem natural, garantindo segurança ao limitar suas ações a um escopo restrito inicialmente.
Gostou do conteudo?
Receba toda semana as principais novidades sobre WebMCP.