Voltar aos projetos
Tela inicial do projeto Deskly

Fullstack · Triagem por IA

Deskly

Service desk em que a triagem é feita por um agente de IA: categoria, prioridade, prazo de SLA, fila de atendimento e a primeira resposta ao solicitante saem antes de qualquer técnico abrir o ticket.

Stack

Next.js 16React 19Node.jsExpress 5LangGraphLangChainOpenAIPostgreSQL 17RabbitMQSSETailwind v4Docker

Telas

Clique em uma tela para ampliar e ler o conteúdo.

Painel de atendimento: métricas agregadas em SQL e gráficos em SVG escrito à mão
Lista com filtros, busca que ignora acentuação e ordenação por prioridade ou SLA
Fila crítica: o que precisa de ação agora
Chamado com linha do tempo, painel de triagem e resposta sugerida
Abertura: o formulário pede o relato, não a classificação
Resultado da triagem chegando na tela por SSE, sem recarregar
O grafo de triagem: cinco nós e uma aresta condicional para escalar o crítico
Rastro nó a nó: o que cada passo decidiu e se veio do modelo ou das regras

O problema

  • Num service desk o gargalo não é resolver — é triar: alguém precisa ler o chamado, entender do que se trata, decidir a urgência, escolher a fila e responder.
  • Enquanto isso, "a produção está parada" espera na mesma fila que "gostaria de instalar o Office", porque a prioridade vem da opinião de quem abre.
  • Automação de triagem que ninguém consegue auditar não sustenta decisão: se o chamado foi classificado errado, não há como saber por quê.

O que eu construí

  • Agente em LangGraph com cinco nós — classificar, priorizar, analisar, escalar (condicional) e redigir — e o solicitante não escolhe nem categoria nem prioridade.
  • Prioridade a partir do impacto descrito: produção parada vira crítico com SLA de 2h e escalação para o plantão; pedido de instalação vira baixa com 72h.
  • SLA que pausa enquanto o chamado aguarda o solicitante — tempo de resposta do usuário não é tempo de atendimento.
  • Decisão auditável: cada chamado guarda o percurso nó a nó, com o tempo de cada passo e se a resposta veio do modelo ou das regras determinísticas.
  • Funciona com e sem chave de LLM: sem a chave, os mesmos nós usam heurística determinística; com a chave, saída estruturada validada por Zod, e falha do modelo cai no fallback em vez de derrubar a triagem.
  • Abertura responde 202 e publica no RabbitMQ; o worker consome, grava e emite NOTIFY no Postgres, que a API repassa por SSE — a tela atualiza sem polling.
  • Uma tabela: colunas escalares para o que é filtrado e agregado, `jsonb` para o que só é lido junto com o chamado. Métricas em SQL, sem ORM e sem biblioteca de gráficos.