Plataforma SaaS de Suporte Técnico com Sistema Multi-Agente de IA usando LangGraph e Google Gemini 2.5 Flash
- Sobre o Projeto
- Tecnologias
- Arquitetura
- Requisitos
- Instalação
- Como Rodar
- Como Testar
- Documentação API
- Estrutura de Pastas
- Recursos
O TechSupport Pro é uma plataforma completa de atendimento técnico que utiliza Inteligência Artificial para automatizar e otimizar o suporte ao cliente através de um sistema de múltiplos agentes especializados.
- ❌ Atendimento manual lento e custoso
- ❌ Tickets criados desnecessariamente para perguntas simples
- ❌ Falta de triagem inteligente de problemas
- ❌ Respostas inconsistentes entre atendentes
Sistema multi-agente que automaticamente classifica e roteia cada mensagem para o agente especializado:
- 🤖 FAQ Agent: Responde perguntas comuns instantaneamente
- 💬 General Support Agent: Investiga consultas ambíguas e complexas
- 🎫 Support Agent: Cria tickets para problemas que requerem atenção humana
- 🧠 Orchestrator: Classifica e roteia cada mensagem com IA
- FastAPI - Framework web moderno e rápido
- LangGraph - Orquestração de agentes com state machine
- Google Gemini 2.5 Flash - Modelo de IA generativa
- SQLAlchemy (Async) - ORM para banco de dados
- PostgreSQL/Neon - Banco de dados relacional
- Pydantic V2 - Validação de dados
- UV - Gerenciador de pacotes Python ultrarrápido
- React 19 - Biblioteca JavaScript moderna
- TypeScript - Tipagem estática
- Vite - Build tool extremamente rápido
- Tailwind CSS v4 - Framework CSS utility-first
- shadcn/ui - Componentes UI acessíveis
- React Router - Roteamento SPA
- Docker - Containerização
- Git - Controle de versão
┌─────────────────────────────────────────────────────────────┐
│ USUÁRIO ENVIA MENSAGEM │
└─────────────────────┬───────────────────────────────────────┘
↓
┌─────────────────────────────┐
│ 🧠 ORCHESTRATOR AGENT │
│ (Classifica com Gemini) │
└─────────────┬───────────────┘
↓
┌─────────────────────────────┐
│ Análise de Intenção │
│ - Cumprimentos │
│ - Perguntas simples │
│ - Consultas ambíguas │
│ - Problemas técnicos │
└─────────────┬───────────────┘
↓
┌─────────────┴─────────────┐
│ ROTEAMENTO │
└───┬─────────┬─────────┬───┘
↓ ↓ ↓
┌───────────┐ ┌──────────┐ ┌─────────┐
│ 💡 FAQ │ │ 💬 GENERAL│ │ 🎫 SUPP │
│ AGENT │ │ SUPPORT │ │ ORT │
│ │ │ AGENT │ │ AGENT │
│ Busca KB │ │ Investiga │ │ Cria │
│ Responde │ │ Esclarece │ │ Ticket │
└───────────┘ └──────────┘ └─────────┘
↓ ↓ ↓
┌─────────────┴─────────────┐
│ RESPOSTA AO USUÁRIO │
└───────────────────────────┘
Frontend (React) → FastAPI Backend → LangGraph → Gemini 2.5 Flash
↓ ↓ ↓ ↓
UI/UX REST API State Graph Classificação IA
↓
Knowledge Base
PostgreSQL/Neon
- Python 3.11+ (Download)
- Node.js 18+ e pnpm (Download Node)
- UV - Package manager Python (Instalação)
- Git (Download)
- Google Gemini API Key - Criar chave gratuita
- Neon PostgreSQL (ou PostgreSQL local) - Criar conta grátis
- Docker & Docker Compose - Para deploy containerizado
git clone https://github.com/seu-usuario/techsupport-multi-agents.git
cd techsupport-multi-agentsWindows (PowerShell):
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"macOS/Linux:
curl -LsSf https://astral.sh/uv/install.sh | sh# Criar e ativar ambiente virtual
uv venv
.venv\Scripts\activate # Windows
# ou
source .venv/bin/activate # macOS/Linux
# Instalar dependências
uv sync
# Copiar arquivo de ambiente
copy .env.example .env # Windows
# ou
cp .env.example .env # macOS/LinuxEdite o arquivo .env com suas credenciais:
# Google Gemini API
GOOGLE_API_KEY=sua_chave_api_aqui
# Database (Neon PostgreSQL)
DATABASE_URL=postgresql+asyncpg://user:password@host/dbname
# Opcional - Configurações adicionais
ENVIRONMENT=development
LOG_LEVEL=INFO🔑 Como obter API Key do Gemini:
- Acesse: https://aistudio.google.com/apikey
- Faça login com sua conta Google
- Clique em "Create API Key"
- Copie a chave e cole no
.env
O banco de dados é criado automaticamente ao iniciar a aplicação pela primeira vez.
Seed inicial (opcional):
# Para popular com dados de exemplo
uv run python src/db/migrations/seed.pycd frontend-tech-support
# Instalar pnpm (se não tiver)
npm install -g pnpm
# Instalar dependências
pnpm installVocê precisará de 3 terminais abertos:
# Ativar ambiente virtual
.venv\Scripts\activate # Windows
# ou
source .venv/bin/activate # macOS/Linux
# Iniciar servidor
uv run uvicorn src.api.main:app --reload --port 8000✅ Backend rodando em: http://localhost:8000
📚 Swagger Docs em: http://localhost:8000/docs
cd frontend-tech-support
# Iniciar dev server
pnpm dev✅ Frontend rodando em: http://localhost:5174
Use para executar testes, scripts ou visualizar logs adicionais.
# Build e start
docker-compose up --build
# Parar
docker-compose down✅ Aplicação completa em: http://localhost:3000
- Acesse o frontend: http://localhost:5174
- Clique em "Iniciar Chat"
- Experimente estas mensagens:
Teste FAQ Agent:
"Como resetar minha senha?"
"Quais são os horários de atendimento?"
"O que é a TechSupport Pro?"
Teste General Support Agent:
"Preciso de ajuda"
"Tenho uma dúvida sobre o sistema"
"Olá, bom dia!"
Teste Support Agent (cria ticket):
"Não consigo fazer login há 3 dias. Tentei resetar a senha mas o email não chega. Erro: Connection timeout. URGENTE!"
- Acesse: http://localhost:8000/docs
- Clique em "POST /chat/message"
- Clique em "Try it out"
- Cole este JSON no Request Body:
{
"message": "Como resetar minha senha?",
"session_id": "test123"
}- Clique em "Execute"
- Veja a resposta com metadata do agente utilizado
# Enviar mensagem
curl -X POST http://localhost:8000/chat/message \
-H "Content-Type: application/json" \
-d '{
"message": "Como resetar minha senha?",
"session_id": "test123"
}'
# Criar ticket
curl -X POST http://localhost:8000/tickets/ \
-H "Content-Type: application/json" \
-d '{
"title": "Erro ao fazer login",
"description": "Sistema retorna erro 500",
"priority": "HIGH"
}'
# Listar Knowledge Base
curl http://localhost:8000/api/knowledge-base/# Script de teste para validar busca com acentos
uv run python test_normalization.py# Script que testa os 3 tipos de roteamento
uv run python reseed_kb.pyOs logs mostram detalhes do processamento:
[FAQ DEBUG] Query: como resetar senha
[FAQ DEBUG] Keywords extraídos: ['como', 'resetar', 'senha']
[FAQ DEBUG] Item: 'Como resetar senha?' - Score: 6
[FAQ DEBUG] ✅ Melhor match encontrado com score 6
# Backend (pytest)
uv run pytest
# Frontend (vitest)
cd frontend-tech-support
pnpm test- URL: http://localhost:8000/docs
- Teste todos os endpoints diretamente no navegador
- Veja exemplos de requisições e respostas
- URL: http://localhost:8000/redoc
- Documentação limpa ideal para referência
| Método | Endpoint | Descrição |
|---|---|---|
POST |
/chat/message |
Enviar mensagem para sistema multi-agente |
GET |
/chat/health |
Health check do serviço |
POST |
/tickets/ |
Criar novo ticket |
GET |
/tickets/ |
Listar todos os tickets |
GET |
/tickets/{id} |
Buscar ticket específico |
GET |
/api/knowledge-base/ |
Listar itens da KB |
POST |
/api/knowledge-base/ |
Criar item na KB |
PUT |
/api/knowledge-base/{id} |
Atualizar item da KB |
DELETE |
/api/knowledge-base/{id} |
Deletar item da KB |
📖 Veja documentação completa: SWAGGER_DOCS.md
techsupport-multi-agents/
├── 📂 src/ # Código fonte backend
│ ├── 📂 agents/ # Sistema multi-agente
│ │ ├── orchestrator.py # Orquestrador LangGraph
│ │ ├── faq_agent.py # Agente de perguntas frequentes
│ │ ├── support_agent.py # Agente de criação de tickets
│ │ └── general_support_agent.py # Agente para consultas ambíguas
│ │
│ ├── 📂 api/ # FastAPI REST API
│ │ ├── main.py # App principal com metadata
│ │ └── routes/
│ │ ├── chat.py # Endpoints de chat
│ │ ├── tickets.py # Endpoints de tickets
│ │ └── knowledge_base.py # Endpoints da KB
│ │
│ ├── 📂 db/ # Banco de dados
│ │ ├── db_connet.py # Conexão async
│ │ ├── models.py # Models SQLAlchemy
│ │ └── migrations/
│ │ └── seed.py # Dados iniciais
│ │
│ └── 📂 utils/ # Utilitários
│ └── text_utils.py # Normalização de texto
│
├── 📂 frontend-tech-support/ # Frontend React
│ ├── src/
│ │ ├── components/ # Componentes React
│ │ ├── pages/ # Páginas (Chat, Admin)
│ │ ├── services/ # APIs e serviços
│ │ ├── contexts/ # React Context (Theme)
│ │ └── styles/ # CSS global
│ │
│ ├── package.json
│ └── vite.config.ts
│
├── 📄 pyproject.toml # Dependências Python (UV)
├── 📄 uv.lock # Lockfile UV
├── 📄 .env # Variáveis de ambiente
├── 📄 .gitignore
└── 📄 README.md # Documentação do projeto
- Sistema multi-agente com LangGraph
- Roteamento inteligente (FAQ/General/Support)
- Base de conhecimento com busca normalizada
- Sistema de tickets com CRUD completo
- API REST com FastAPI
- Documentação Swagger automática
- Histórico de sessões e mensagens
- Normalização de texto (remove acentos)
- Scoring avançado para matching de KB
- Debug logging detalhado
- Interface de chat moderna
- Painel administrativo da KB
- Sistema de temas (claro/escuro/sistema)
- Renderização de Markdown
- Gerenciamento de sessões
- Badge de protocolo de tickets
- Loading states e error handling
- Testes automatizados (pytest + vitest)
- Autenticação de usuários (JWT)
- Dashboard de analytics
- Exportação de relatórios
- Integração com Whatsapp
- Monitoramento e observabilidade
1. Usuário envia mensagem
↓
2. ORCHESTRATOR analisa com Gemini 2.5 Flash
↓
3. Classifica em 3 categorias:
├─ FAQ → Cumprimentos, perguntas diretas na KB
├─ GENERAL_SUPPORT → Perguntas ambíguas, investigação necessária
└─ SUPPORT → Problemas técnicos detalhados (>30 palavras)
↓
4. Executa agente correspondente
├─ FAQ: Busca na KB com normalização e scoring
├─ GENERAL_SUPPORT: Responde de forma empática e investiga
└─ SUPPORT: Cria ticket automaticamente
↓
5. Retorna resposta com metadata:
- response: Texto da resposta
- agent_used: Nome do agente (FAQ/GENERAL_SUPPORT/SUPPORT)
- decision: Explicação do roteamento
- confidence: Score de confiança (0.0-1.0)
- tools_used: Ferramentas utilizadas
- session_id: ID para continuar conversa
Contribuições são bem-vindas!
- Fork o projeto
- Crie uma branch para sua feature (
git checkout -b feature/nova-feature) - Commit suas mudanças (
git commit -m 'Adiciona nova feature') - Push para a branch (
git push origin feature/nova-feature) - Abra um Pull Request
Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.
- Seu Nome - GitHub
- 🐛 Issues: GitHub Issues
- 📖 Docs: http://localhost:8000/docs
- FastAPI - Framework web incrível
- LangChain - Ferramentas para LLMs
- Google Gemini - Modelo de IA generativa
- React - Biblioteca UI
- Tailwind CSS - Framework CSS
⭐ Se este projeto te ajudou, considere dar uma estrela no GitHub!