1
resposta

[Projeto] Sistema de Moderacao de Conteudo com Multi-Agentes (LangGraph + Human in the Loop)

Fala pessoal! Compartilhando mais um projeto do curso de Engenharia de Agentes de IA.

Construi um sistema de moderacao de conteudo para plataformas educacionais usando 4 agentes especializados orquestrados com LangGraph:

  1. Agente Analisador — classifica comentarios como POSITIVO, NEUTRO ou PROBLEMATICO
  2. Agente Pesquisador de Politicas — consulta diretrizes internas + busca externa (Tavily)
  3. Agente Revisor — consolida analise e recomenda acao final (APROVAR/REMOVER/EDITAR)
  4. Executor de Acao — aplica a decisao final

O diferencial do projeto e o Human in the Loop (HITL): quando o sistema detecta conteudo problematico, ele pausa a execucao e solicita revisao humana
antes de agir. O moderador pode confirmar, cancelar ou editar a decisao do agente — inclusive modificar o estado interno do grafo com update_state.

Conceitos aplicados:

  • StateGraph com TypedDict para estado tipado
  • interrupt_before para pausar no no critico
  • AsyncSqliteSaver para persistencia de checkpoints
  • Conditional edges com funcao de roteamento
  • Lazy singleton para inicializacao segura do LLM
  • Busca contextual com Tavily Search

Stack: Python, LangGraph, LangChain, OpenAI GPT-3.5, Tavily, SQLite async

Repo: https://github.com/recuperarcontato4-prog/moderacao-ia

Aceito feedback e sugestoes! Se alguem quiser trocar ideia sobre LangGraph ou HITL, estou por aqui.

1 resposta

Olá, Isaac. Como vai?

Parabéns pelo excelente projeto! O nível de maturidade técnica que você demonstrou ao orquestrar múltiplos agentes com o LangGraph é impressionante, especialmente pela implementação do padrão Human-in-the-Loop (HITL). Esse é, sem dúvida, o "estado da arte" para sistemas que exigem alta confiabilidade, como a moderação de conteúdo.

O seu uso do interrupt_before e do update_state é um diferencial técnico importante. Em sistemas de produção, permitir que um humano não apenas aprove, mas edite o estado interno do grafo antes da próxima transição, garante que o aprendizado do sistema e a precisão da ação final sejam muito superiores a um fluxo puramente automatizado.

Para agregar ainda mais valor ao seu projeto, deixo algumas sugestões de boas práticas e pontos de evolução:

  • Gerenciamento de Memória (Checkpoints): Como você está usando o AsyncSqliteSaver, uma funcionalidade interessante de explorar é o Time Travel. Com os checkpoints persistidos, você consegue "voltar no tempo" no grafo, re-executar nós com entradas diferentes e comparar os resultados. Isso é excelente para depurar decisões erradas do Agente Revisor.
  • Avaliação com Cadeia de Pensamento (CoT): No nó do Agente Analisador, você pode implementar uma técnica de Chain of Thought. Em vez de apenas retornar o rótulo (POSITIVO/NEUTRO/PROBLEMATICO), force o LLM a escrever o raciocínio em um campo reasoning dentro do seu TypedDict. Isso ajuda o moderador humano a entender por que o agente tomou aquela decisão.
  • Segurança e Custo: Como você mencionou o uso do GPT-3.5 e busca externa com Tavily, uma boa prática é implementar um limite de tokens ou de profundidade de busca no Agente Pesquisador para evitar que o grafo entre em loops infinitos ou consuma créditos excessivos em casos de entradas muito ambíguas.
  • Refinamento do Roteamento: Se o seu sistema crescer, você pode trocar as conditional_edges simples por um nó "Supervisor" que utiliza um modelo menor (como um GPT-4o-mini ou similar) apenas para orquestrar qual agente deve falar a seguir, tornando o sistema ainda mais dinâmico.

O repositório parece muito bem estruturado! Implementar persistência assíncrona com SQLite demonstra uma preocupação real com a escalabilidade da aplicação. Continue explorando as capacidades de persistence do LangGraph, pois elas são a chave para criar agentes de memória longa.

Espero que possa ter lhe ajudado!