Nesta atividade, implementei um fluxo de Human in the Loop com LangGraph para aumentar o controle e a confiabilidade de agentes de IA. A proposta foi permitir que o agente pausasse antes da execução de uma ação externa, possibilitando revisão e intervenção humana antes que a ferramenta fosse acionada.
Para isso, configurei um agente baseado em StateGraph, com um estado responsável por armazenar o histórico de mensagens. Também implementei a função reduceMessages, que permite anexar novas mensagens ou substituir mensagens existentes quando possuem o mesmo identificador. Para garantir unicidade e controle das mensagens, utilizei UUIDs.
O grafo foi estruturado com um nó para chamada do modelo Gemini e outro nó para execução de ações externas, como buscas na internet com Tavily Search. A execução foi compilada com persistência em SQLite e com o parâmetro interrupt_before=["action"], permitindo que o agente interrompa o fluxo antes de executar ferramentas.
Durante os testes, utilizei threadid dinâmico para evitar conflitos com históricos anteriores e permitir o isolamento de conversas. Também utilizei snapshots para consultar o estado atual do agente no momento da pausa, revisar a chamada de ferramenta proposta e injetar uma versão modificada da mensagem no estado. Após a intervenção humana, o grafo foi retomado e executou a ação com os parâmetros revisados.
Com isso, foi possível validar na prática como o* Human in the Loop* torna o comportamento do agente mais controlável, auditável e seguro, principalmente em situações nas quais uma ferramenta externa será acionada ou uma decisão crítica precisa ser revisada antes de prosseguir.
Como em praticamente todos os foruns estou enfrentando problemas de recursos decidi economizar da seguinte forma:
- Tavily com max_results=1;
- testes curtos;
- thread_id separado por cenário;
- poucas perguntas com busca externa;
- intervenção feita direto no snapshot, sem chamar o LLM novamente antes da aprovação;
- streaming para observar execução sem repetir testes.
Segue o link com o código: https://github.com/Moquiuti/LangGraph_Orquestrando_agentes_e_multiagentes/blob/main/Human_in_the_Loop_com_LangGraph.ipynb