Chatbot inteligente para o Centro de Formação e de Desenvolvimento de Pessoas do Poder Judiciário do RS – CJUD. O assistente virtual COJUD utiliza técnicas de RAG (Retrieval-Augmented Generation) para fornecer informações precisas sobre cursos EAD-Autoaprendizagem.
COJUD é o assistente virtual do CJUD, representado por uma coruja verde. Atualmente em beta, o chatbot pode:
- Responder dúvidas sobre cursos
- Recomendar cursos da categoria EAD-Autoaprendizagem
- Manter contexto da conversa
- Exibir informações detalhadas dos cursos com imagens e cards visuais
moodle-chatbot/
├── backend/ # API Node.js + Express + TypeScript
│ ├── src/
│ │ ├── routes/ # Rotas da API
│ │ ├── services/ # Serviços (Gemini, embeddings, knowledge base)
│ │ └── config.ts # Configurações
│ ├── data/
│ │ └── courses.json # Base de conhecimento (cursos)
│ └── package.json
├── frontend/ # Widget React + TypeScript
│ ├── src/
│ │ ├── components/ # Componentes React
│ │ ├── hooks/ # Hooks customizados
│ │ └── utils/ # Utilitários
│ ├── public/
│ │ └── widget-loader.js # Script de carregamento para Moodle
│ └── package.json
├── base_conhecimento/ # Base de conhecimento original
│ └── info_cursos.json # Arquivo fonte dos cursos
└── README.md
- Node.js 20+ ou 22+
- npm ou yarn
- Chave de API do Google Gemini
- Instale as dependências:
cd backend
npm install- Configure as variáveis de ambiente:
# Copie o arquivo de exemplo
cp env.example .env
# Edite o .env com suas configurações:
GEMINI_API_KEY=sua_chave_aqui
GEMINI_MODEL=gemini-2.5-flash
PORT=3001
NODE_ENV=development
CORS_ORIGIN=*
USE_EMBEDDINGS=false # Opcional: habilita busca semântica com embeddings- Copie a base de conhecimento:
# Certifique-se de que backend/data/courses.json existe
# Ele deve ser uma cópia de base_conhecimento/info_cursos.json- Execute o servidor:
npm run devO servidor estará disponível em http://localhost:3001
- Instale as dependências:
cd frontend
npm install- Configure a URL da API (opcional):
# Crie um arquivo .env
VITE_API_URL=http://localhost:3001- Execute em modo desenvolvimento:
npm run dev- Build para produção:
npm run buildOs arquivos serão gerados em frontend/dist/
- Faça o build do frontend:
cd frontend
npm run build-
Faça upload dos arquivos para seu CDN/servidor:
dist/cojud-chatbot.es.jsoudist/cojud-chatbot.umd.jsdist/assets/*(CSS e outros assets)public/widget-loader.js
-
Adicione no footer do Moodle ou em um bloco HTML:
<div id="cojud-chatbot-root"></div>
<script>
window.COJUD_API_URL = 'https://sua-api.com';
window.COJUD_WIDGET_URL = 'https://seu-cdn.com';
</script>
<script src="https://seu-cdn.com/widget-loader.js"></script><iframe
src="https://seu-cdn.com/widget.html"
style="position: fixed; bottom: 20px; right: 20px; width: 400px; height: 600px; border: none; z-index: 10000;"
allow="clipboard-read; clipboard-write">
</iframe>- ✅ Integração com Google Gemini 2.5 Flash
- ✅ Manutenção de contexto da conversa
- ✅ Detecção de referências a mensagens anteriores
- ✅ Extração automática de contexto do usuário (área, função)
- ✅ Busca por palavras-chave otimizada
- ✅ Busca semântica com embeddings (opcional)
- ✅ Filtros por carga horária, modalidade, área
- ✅ Até 20 cursos por resposta
- ✅ Cache de respostas para performance
- ✅ Widget flutuante moderno e responsivo
- ✅ Modo expandido (sidebar à direita)
- ✅ Cards visuais para cursos individuais
- ✅ Lista compacta para múltiplos cursos
- ✅ Botão de nova conversa
- ✅ Renderização de HTML nas mensagens
- ✅ Animações suaves
- ✅ Cabeçalho com imagem e título
- ✅ Informações organizadas em seções:
- Introdução
- Objetivo
- Conteúdo
- Público-alvo
- Carga horária e modalidade
- ✅ Link direto para o curso no Moodle
O chatbot utiliza Retrieval-Augmented Generation (RAG) para fornecer respostas precisas:
- Base de Conhecimento: Cursos armazenados em JSON (
backend/data/courses.json) - Retrieval: Busca por palavras-chave ou embeddings semânticos
- Augmentation: Contexto dos cursos relevantes é injetado no prompt
- Generation: Gemini gera resposta baseada no contexto
Para mais detalhes, consulte RAG_IMPLEMENTATION.md
Cada curso na base de conhecimento possui:
{
filename: string;
courseName: string;
titulo: string;
introducao: string;
modalidade: string;
cargaHoraria: string;
disponibilidade: string;
publicoAlvo: string;
certificado: string;
instrutor: string;
avaliacao: string;
objetivo: string;
conteudo: string;
qualityScore: number;
id: string;
cursoUrl: string;
pdfUrl: string;
imageUrl: string;
inscricoesStatus: string;
cursoFechado: string;
}| Variável | Descrição | Padrão |
|---|---|---|
GEMINI_API_KEY |
Chave da API do Google Gemini | Obrigatório |
GEMINI_MODEL |
Modelo do Gemini a usar | gemini-2.5-flash |
PORT |
Porta do servidor | 3001 |
NODE_ENV |
Ambiente (development/production) | development |
CORS_ORIGIN |
Origem permitida para CORS | * |
USE_EMBEDDINGS |
Habilita busca semântica | false |
| Variável | Descrição | Padrão |
|---|---|---|
VITE_API_URL |
URL da API backend | http://localhost:3001 |
Backend:
npm run dev # Desenvolvimento com hot-reload
npm run build # Compila TypeScript
npm run start # Executa versão compilada
npm run type-check # Verifica tipos sem compilarFrontend:
npm run dev # Servidor de desenvolvimento Vite
npm run build # Build para produção
npm run preview # Preview do build
npm run type-check # Verifica tipos TypeScriptBackend:
- TypeScript
- Express.js
- Google Gemini API (
@google/generative-ai) - CORS
- dotenv
Frontend:
- React 18
- TypeScript
- Vite
- CSS puro (sem frameworks)
Opções de deploy:
- Vercel (Serverless Functions)
- Netlify Functions
- Railway
- Heroku
- Servidor próprio (Node.js)
Variáveis de ambiente necessárias:
GEMINI_API_KEYGEMINI_MODEL(opcional)PORT(opcional)NODE_ENV=production
Opções de deploy:
- Vercel
- Netlify
- Cloudflare Pages
- Qualquer CDN/servidor estático
Após o build:
- Faça upload da pasta
dist/para seu servidor/CDN - Configure a URL da API no
.envou via variáveis de ambiente - Adicione o script de carregamento no Moodle
- Verifique se a porta 3001 está disponível
- Confirme que o arquivo
.envexiste e temGEMINI_API_KEY - Verifique se
backend/data/courses.jsonexiste
- Verifique se
VITE_API_URLestá correto - Confirme que o backend está rodando
- Verifique CORS no backend
- Verifique se o script
widget-loader.jsestá acessível - Confirme que
#cojud-chatbot-rootexiste no DOM - Verifique o console do navegador para erros
- Verifique se
backend/data/courses.jsonestá atualizado - Confirme que a estrutura do JSON está correta
- Verifique os logs do backend
- O chatbot está em beta e atualmente suporta apenas cursos EAD-Autoaprendizagem
- Futuras expansões incluirão outras categorias de cursos e FAQ
- O cache de respostas está em memória (Map). Para produção com múltiplas instâncias, considere Redis
- Embeddings são opcionais e podem melhorar a precisão da busca semântica
ISC