Dia 8/30: Loop ReAct no LangGraph
Então você construiu um sistema de IA agente com LangGraph e MCP, e está funcionando muito bem - até que começa a esquecer o que o usuário disse duas interações atrás. Você está tentando implementar um bot de suporte simples que pode responder a perguntas de acompanhamento, mas ele continua respondendo como se não tivesse memória. Você verificou a documentação do LangGraph, e parece que o StateGraph deveria ser capaz de lidar com esse tipo de contexto. Mas, por algum motivo, simplesmente não está funcionando.
Vamos dar um passo atrás e olhar como o loop ReAct do LangGraph deve funcionar. A ideia é que seu agente raciocine sobre o estado atual do mundo, atue com base nesse raciocínio, observe as consequências de sua ação e, em seguida, repita o processo. Esse loop é o núcleo de como os agentes LangGraph tomam decisões e aprendem com seu ambiente.
No seu bot de suporte, o loop ReAct pode parecer algo assim:
import langgraph as lg
# Crie um novo StateGraph
graph = lg.StateGraph()
# Adicione alguns nós e arestas ao gráfico
graph.add_node("greeting", "Olá! Como posso ajudá-lo?")
graph.add_node("question", "Você fez uma pergunta")
graph.add_node("answer", "Aqui está uma resposta para sua pergunta")
# Adicione algumas arestas condicionais entre os nós
graph.add_conditional_edges(
("greeting", "question", lambda x: x["user_input"] != ""),
("question", "answer", lambda x: x["user_input"] != "")
)
# Defina um ponto de verificação para salvar o estado atual do gráfico
def checkpoint(state):
# Salve o estado em um banco de dados ou arquivo
print("Checkpointing state:", state)
# Execute o loop ReAct
while True:
# Raciocinar: obter o estado atual do gráfico
state = graph.get_current_state()
# Agir: selecionar o próximo nó a visitar com base no estado atual
next_node = graph.get_next_node(state)
# Observar: obter a entrada do usuário e atualizar o estado
user_input = input("Usuário: ")
state["user_input"] = user_input
# Repetir: atualizar o gráfico e verificar o ponto de verificação do estado
graph.update_state(state)
checkpoint(state)
Este código configura um StateGraph simples com três nós: uma saudação, uma pergunta e uma resposta. O loop ReAct roda indefinidamente, raciocinando sobre o estado atual do gráfico, agindo com base nesse raciocínio, observando a entrada do usuário e repetindo o processo.
Mas aqui está a questão: se você executar este código, notará que o bot não se lembra do que o usuário disse duas interações atrás. Isso ocorre porque o StateGraph foi projetado para ser um sistema reativo relativamente simples - ele não possui memória ou contexto embutidos.
Para corrigir isso, você precisa adicionar algum tipo de memória ou contexto ao StateGraph. Uma maneira de fazer isso é usando as ferramentas MCP do LangGraph para criar um modelo mais complexo e contextual da entrada do usuário. Vamos nos aprofundar nisso amanhã, mas por enquanto, vamos apenas dizer que é uma boa ideia usar uma combinação de StateGraph e MCP para construir um sistema de IA mais robusto e contextual.
Uma armadilha prática a ser observada ao trabalhar com o loop ReAct é que pode ser fácil ficar preso em um loop infinito se seu agente não tiver uma maneira clara de terminar ou sair do loop. Por exemplo, se seu agente for projetado para continuar respondendo à entrada do usuário indefinidamente, você pode precisar adicionar algum tipo de condição de tempo limite ou saída para evitar que ele execute para sempre.
Olhando para o futuro, estaremos explorando técnicas mais avançadas para construir sistemas de IA contextuais com LangGraph e MCP - incluindo como integrar múltiplos modelos e sistemas para criar comportamentos mais sofisticados e semelhantes aos humanos.
Empresas brasileiras podem se beneficiar ao implementar sistemas de IA que entendem e retêm o contexto das interações com os usuários. O uso do LangGraph e MCP pode melhorar a experiência do cliente e a eficiência do atendimento. A compreensão do Loop ReAct é essencial para desenvolver bots mais inteligentes e responsivos.


