from typing import TypedDict
from langgraph.graph import StateGraph, END
1. Estado compartilhado
class AgentState(TypedDict, total=False):
comentario_original: str
politicas_relevantes: str
analise_do_agente: str
status_da_moderacao: str
justificativa_final: str
2. Diretrizes simuladas
DIRETRIZES = {
"spam": "É proibido divulgar links, promoções enganosas ou repetir mensagens comerciais.",
"ofensivo": "É proibido insultar, humilhar ou atacar outros usuários.",
"inadequado": "Linguagem agressiva ou imprópria pode exigir edição antes da publicação."
}
3. Agente Analisador
def agente_analisador(state: AgentState):
texto = state["comentario_original"].lower()
if any(p in texto for p in ["http", "promoção", "grátis", "compre agora"]):
analise = "potencialmente problemático: spam"
elif any(p in texto for p in ["idiota", "burro", "lixo"]):
analise = "potencialmente problemático: ofensivo"
elif any(p in texto for p in ["ruim", "ok", "mais ou menos"]):
analise = "neutro"
else:
analise = "positivo"
return {"analise_do_agente": analise}
4. Rota condicional
def rota_analise(state: AgentState):
if "potencialmente problemático" in state["analise_do_agente"]:
return "pesquisador"
return "aprovar"
5. Agente Pesquisador de Políticas
def agente_pesquisador(state: AgentState):
analise = state["analise_do_agente"]
if "spam" in analise:
politica = DIRETRIZES["spam"]
elif "ofensivo" in analise:
politica = DIRETRIZES["ofensivo"]
else:
politica = DIRETRIZES["inadequado"]
return {"politicas_relevantes": politica}
6. Agente Revisor
def agente_revisor(state: AgentState):
analise = state["analise_do_agente"]
politica = state.get("politicas_relevantes", "")
if "spam" in analise:
return {
"status_da_moderacao": "Remover por Spam",
"justificativa_final": f"{analise}. Política aplicada: {politica}"
}
if "ofensivo" in analise:
return {
"status_da_moderacao": "Editar por linguagem inadequada",
"justificativa_final": f"{analise}. Política aplicada: {politica}"
}
return {
"status_da_moderacao": "Aprovado",
"justificativa_final": "Comentário sem violação."
}
7. Nó de aprovação direta
def aprovar_direto(state: AgentState):
return {
"status_da_moderacao": "Aprovado",
"justificativa_final": "Comentário positivo ou neutro, sem necessidade de revisão."
}
8. Construção do grafo
builder = StateGraph(AgentState)
builder.add_node("analisador", agente_analisador)
builder.add_node("pesquisador", agente_pesquisador)
builder.add_node("revisor", agente_revisor)
builder.add_node("aprovar", aprovar_direto)
builder.set_entry_point("analisador")
builder.add_conditional_edges(
"analisador",
rota_analise,
{
"pesquisador": "pesquisador",
"aprovar": "aprovar"
}
)
builder.add_edge("pesquisador", "revisor")
builder.add_edge("revisor", END)
builder.add_edge("aprovar", END)
graph = builder.compile()
9. Teste
entrada = {
"comentario_original": "Esse curso é lixo, comprem meu produto grátis aqui!"
}
resultado = graph.invoke(entrada)
print(resultado)
