Skip to content

Commit d7bd24a

Browse files
authored
Merge pull request #1 from DessimA/dev
Dev
2 parents 51b42ed + 4c23d4e commit d7bd24a

29 files changed

Lines changed: 3207 additions & 641 deletions

.env.example

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
# Credenciais AWS Temporárias (Vocareum)
2+
# Copie os valores do console da AWS (AWS Details -> Credentials)
3+
AWS_ACCESS_KEY_ID=sua_access_key
4+
AWS_SECRET_ACCESS_KEY=sua_secret_key
5+
AWS_SESSION_TOKEN=seu_session_token
6+
AWS_REGION=us-west-2

.gitignore

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# Credenciais e Configurações Dinâmicas
2+
frontend/shared/config.js
3+
.env
4+
*.zip
5+
function.zip
6+
7+
# Scripts de automação local
8+
commit.sh
9+
infrastructure/investigate.sh
10+
infrastructure/test-iam.sh
11+
infrastructure/fix-cors.sh
12+
infrastructure/list-resources.sh
13+
14+
# Arquivos de Debug e Resultados de Teste
15+
debug-invoke.json
16+
debug-payload.json
17+
invoke-result.json
18+
response.json
19+
test-payload.json
20+
test-results.json
21+
22+
# Node dependencies
23+
node_modules/
24+
lambda/node_modules/
25+
26+
# Logs e Temporários
27+
*.log
28+
.DS_Store
29+
Thumbs.db

README.md

Lines changed: 62 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,30 @@
11
# 🎓 Smart Class Q&A
22

3-
> **O que é este projeto?** Imagine uma sala de aula online onde os alunos enviam centenas de mensagens. O professor não consegue ler tudo. Nosso sistema funciona como um "filtro inteligente" que separa o que é dúvida do que é conversa, avisando o professor apenas quando ele realmente precisa intervir.
3+
> **O que é este projeto?** Imagine uma sala de aula online onde os alunos enviam centenas de mensagens. O professor não consegue ler tudo. Nosso sistema funciona como um "filtro inteligente" que separa o que é dúvida técnica do que é interação social, alertando o professor e permitindo que ele foque no que realmente importa: **ensinar**.
44
55
---
66

7-
## 📖 Glossário para Iniciantes
8-
9-
Se você é novo na nuvem (Cloud), aqui estão os termos que usamos:
10-
* **Frontend**: As telas que o usuário vê (o site).
11-
* **Backend**: O "cérebro" que roda no servidor, longe dos olhos do usuário.
12-
* **AWS S3**: Uma pasta de arquivos na nuvem (onde guardamos o nosso site).
13-
* **AWS Lambda**: Uma função que "acorda", faz um trabalho rápido e "dorme". É barata e eficiente.
14-
* **DynamoDB**: Nosso caderno de anotações (Banco de Dados). É onde guardamos as dúvidas para sempre.
15-
* **Amazon Comprehend**: O serviço de inteligência que "lê" o texto e entende o sentimento.
7+
## 🌟 Status Atual: Fase 2 (Polished & Functional)
8+
O projeto evoluiu de um protótipo simples para uma aplicação robusta e visualmente profissional.
9+
10+
### ✅ Novas Funcionalidades
11+
* **Design Profissional**: Interfaces migradas para **Bootstrap 5** com tema escuro (Glassmorphism), totalmente responsivas e livres de emojis amadores.
12+
* **IA Aprimorada**:
13+
* **Classificação Híbrida**: Combina regras léxicas rigorosas com análise de sentimento e extração de entidades do **Amazon Comprehend**.
14+
* **Blacklist Inteligente**: O sistema agora entende contexto. "Não entendi" é bloqueado se for vago, mas "Não entendi o Lambda" é aprovado.
15+
* **Feedback Loop**: O professor pode sinalizar "Falso Positivo" (Não é dúvida), ajudando a calibrar o sistema.
16+
* **UX do Aluno**:
17+
* **Modal de Orientação**: Se o aluno envia uma pergunta vaga, um modal bloqueia a tela orientando-o a adicionar mais detalhes técnicos.
18+
* **Dashboard do Professor**:
19+
* **Centro de Comando**: Métricas de IA em tempo real (Acurácia, Confiança, Fallbacks).
20+
* **Top Alunos**: Identifica os alunos mais participativos (maior volume de dúvidas).
21+
* **Auditoria**: Visualização clara do motivo da classificação ("🤖 Motivo: Termo técnico 'EC2' encontrado com sentimento negativo").
1622

1723
---
1824

1925
## 🏗️ Arquitetura do Sistema
2026

21-
Aqui está como os componentes conversam entre si. O fluxo segue as setas:
27+
O sistema é **Serverless**, garantindo custo zero quando ocioso e escala infinita.
2228

2329
```mermaid
2430
graph TD
@@ -27,48 +33,61 @@ graph TD
2733
Professor((👨‍🏫 Professor))
2834
2935
%% Frontend
30-
WebApp_Aluno["📱 App do Aluno<br/>(Hospedado no S3)"]
31-
WebApp_Prof["💻 Painel do Professor<br/>(Hospedado no S3)"]
36+
WebApp_Aluno["📱 Portal do Aluno<br/>(Bootstrap 5 Dark)"]
37+
WebApp_Prof["💻 Command Center<br/>(Bootstrap 5 Analytics)"]
3238
3339
%% Backend
34-
API["☁️ Gateway de Entrada<br/>(Function URL)"]
35-
Lambda["⚙️ Cérebro (Lambda)<br/>(Processa a Lógica)"]
40+
API["☁️ Lambda Function URL<br/>(Gateway)"]
41+
Logic["⚙️ Core Logic<br/>(Node.js 18)"]
3642
3743
%% Dados e IA
38-
DB[("🗄️ Banco de Dados<br/>(DynamoDB)")]
39-
IA["🧠 Inteligência Artificial<br/>(Amazon Comprehend)"]
40-
SNS["🔔 Notificação SNS<br/>(Avisa o Professor)"]
41-
42-
%% Fluxo de Envio
43-
Aluno -->|Envia Mensagem| WebApp_Aluno
44-
WebApp_Aluno -->|Chama API| API
45-
API --> Lambda
46-
47-
%% Processamento
48-
Lambda -->|Pergunta: O que é isso?| IA
49-
IA -->|Responde: É uma dúvida!| Lambda
44+
DB[("🗄️ DynamoDB<br/>(Persistência)")]
45+
IA["🧠 Amazon Comprehend<br/>(NLP & Sentiment)"]
46+
SNS["🔔 Amazon SNS<br/>(Alertas)"]
47+
48+
%% Fluxo
49+
Aluno -->|POST /mensagem| WebApp_Aluno
50+
WebApp_Aluno --> API --> Logic
51+
52+
Logic -->|1. Regras Locais| Logic
53+
Logic -->|2. Validação NLP| IA
5054
51-
%% Decisão
52-
Lambda -->|Salva no Caderno| DB
53-
Lambda -->|Envia Alerta| SNS
54-
Lambda -.->|Se for conversa fiada| Descarte[🗑️ Mensagem Descartada]
55-
56-
%% Fluxo de Leitura
57-
WebApp_Prof -->|Verifica se há dúvidas| API
58-
API -->|Lê do Caderno| DB
59-
DB --> WebApp_Prof
60-
WebApp_Prof -->|Toca Alerta Sonoro 🔊| Professor
55+
Logic -->|Salva Dúvida| DB
56+
Logic -->|Notifica| SNS
57+
58+
WebApp_Prof -->|Polling /duvidas| API
59+
API -->|Lê Dados| DB
60+
WebApp_Prof -->|Alertas Sonoros| Professor
6161
```
6262

6363
---
6464

65-
## 🚀 Como este projeto ajuda?
65+
## 📖 Glossário Técnico
66+
67+
* **Frontend**: HTML5, CSS3, Bootstrap 5, Bootstrap Icons, Vanilla JS.
68+
* **Backend**: Node.js (AWS Lambda), AWS SDK v3.
69+
* **Banco de Dados**: Amazon DynamoDB (NoSQL).
70+
* **IA**: Amazon Comprehend (DetectSentiment, DetectKeyPhrases).
71+
* **Infra**: Serverless Framework (conceitual) / Shell Scripts manuais.
72+
73+
---
74+
75+
## 🛠️ Instalação e Uso
76+
77+
Para implantar este projeto na sua conta AWS, consulte o guia detalhado em: [**DEPLOY.md**](DEPLOY.md).
6678

67-
1. **Foco total**: O professor não se distrai com "Bom dia" ou "kkk".
68-
2. **Agilidade**: O alerta sonoro garante que a dúvida seja respondida na hora.
69-
3. **Organização**: Todas as dúvidas ficam salvas para consulta posterior.
79+
### Scripts Disponíveis
80+
* `tests/test-classifier.js`: Testa a lógica de classificação local.
81+
* `tests/test-filters.js`: Valida casos de borda e blacklist contextual.
82+
* `infrastructure/deploy.sh`: (Opcional) Script utilitário para deploy simplificado.
7083

7184
---
7285

73-
## 🛠️ Próximos Passos
74-
Para instalar o projeto, siga o guia em: [**DEPLOY.md**](DEPLOY.md)
86+
## 📊 Roadmap & Progresso
87+
88+
- [x] **Fase 1: MVP** (Protótipo funcional, IA básica).
89+
- [x] **Fase 2: Refinamento** (UI Bootstrap, Modal de Aviso, Blacklist Contextual, Métricas IA).
90+
- [ ] **Fase 3: Inteligência Avançada** (Integração com LLM/Claude para respostas automáticas, Persistência de Feedback para retreino).
91+
92+
---
93+
&copy; 2025 Smart Class Q&A System

debug-invoke.json

Whitespace-only changes.

debug-payload.json

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{
2+
"rawPath": "/mensagem",
3+
"requestContext": {
4+
"http": {
5+
"method": "POST"
6+
}
7+
},
8+
"body": "{\"message\":\"Teste de Debug Script\",\"email\":\"debug@teste.com\",\"type\":\"text\"}",
9+
"isBase64Encoded": false
10+
}

docs/algorithm.md

Lines changed: 58 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,78 @@
1-
# 🧠 O Cérebro do Smart Class
1+
# 🧠 Algoritmo de Classificação (v2.0)
22

3-
Para saber se uma mensagem é importante, usamos uma "Peneira Inteligente" que funciona em três camadas. Se uma mensagem passar por todas, ela chega ao professor.
3+
O coração do Smart Class Q&A é o seu sistema de classificação híbrido, que decide se uma mensagem é uma **DÚVIDA TÉCNICA** (que deve acordar o professor) ou uma **INTERAÇÃO SOCIAL** (que pode ser ignorada ou apenas logada).
4+
5+
A versão 2.0 introduz o conceito de "Contexto sobre Regra", onde a presença de termos técnicos pode anular regras de bloqueio simples.
46

57
---
68

7-
## 🔬 As 3 Camadas da Peneira
9+
## 🔬 O Fluxo de Decisão (Pipeline)
10+
11+
O sistema processa cada mensagem em etapas sequenciais:
812

913
```mermaid
1014
flowchart TD
11-
Inicio(["Mensagem do Aluno"]) --> Camada1{"1. Peneira Rápida<br/>(Regras Simples)"}
15+
Inicio(["📩 Nova Mensagem"]) --> Normalizacao[("1. Normalização<br/>(Lowercase, remove acentos)")]
16+
17+
Normalizacao --> AnaliseLexica{"2. Análise Léxica"}
18+
19+
AnaliseLexica -- "Identifica Termos" --> TermosTecnicos["Termos AWS/Tech<br/>(Lambda, EC2, Erro...)"]
20+
AnaliseLexica -- "Identifica Padrões" --> Blacklist["Blacklist<br/>('Não entendi', 'Oi')"]
21+
22+
TermosTecnicos --> DecisaoLogica{"3. Lógica Contextual"}
23+
Blacklist --> DecisaoLogica
24+
25+
DecisaoLogica -- "Tem Termo Técnico?" --> SimTermo["✅ Sim (Contexto Rico)"]
26+
DecisaoLogica -- "Sem Termo Técnico?" --> NaoTermo["❌ Não (Vago)"]
27+
28+
SimTermo --> IA{"4. Validação IA<br/>(Amazon Comprehend)"}
29+
NaoTermo -- "Está na Blacklist?" --> Lixeira(["🗑️ Rejeitar (VAGA)"])
30+
NaoTermo -- "Score Baixo?" --> Lixeira
1231
13-
Camada1 -- "Frase muito curta<br/>ou só 'Oi'" --> Lixeira(["🗑️ INTERAÇÃO<br/>Ignorada"])
32+
IA -- "Confiança Alta +<br/>Sentimento Negativo/Neutro" --> Aprovado[["🔔 DÚVIDA APROVADA"]]
33+
IA -- "Confiança Baixa" --> Fallback["⚠️ Fallback (Usa Regra Local)"]
1434
15-
Camada1 -- "Frase completa ou<br/>com interrogação" --> Camada2{"2. Peneira Técnica<br/>(Palavras-Chave)"}
35+
Aprovado --> Persistencia[("DynamoDB + SNS")]
36+
```
1637

17-
Camada2 -- "Tem '?' ou termos como<br/>'Lambda', 'Erro', 'Acesso'" --> Camada3{"3. Peneira de IA<br/>(Amazon Comprehend)"}
18-
Camada2 -- "Saudações educadas<br/>'Obrigado', 'Valeu'" --> Lixeira
38+
---
1939

20-
Camada3 -- "Detecta Dúvida ou<br/>Problema Técnico" --> Sucesso[["✅ DÚVIDA SALVA"]]
21-
Camada3 -- "Elogio social sem<br/>conteúdo técnico" --> Lixeira
40+
## 📝 Detalhes das Camadas
2241

23-
Sucesso --> Notificar["🔔 Avisar Professor"]
24-
```
42+
### 1. Camada de Regras & Contexto
43+
Diferente da versão anterior, a blacklist não é absoluta.
44+
* **Antes:** Se a mensagem continha "não entendi", era rejeitada (assumia-se vago).
45+
* **Agora:**
46+
* "Não entendi nada" -> **REJEITADA** (Está na blacklist E não tem termo técnico).
47+
* "Não entendi o Comprehend" -> **APROVADA** (Termo técnico "Comprehend" anula a blacklist).
2548

26-
---
49+
### 2. Vocabulário Expandido (`constants.js`)
50+
O sistema agora reconhece mais de 50 termos técnicos, incluindo:
51+
* **Serviços de IA:** Comprehend, Rekognition, Polly, Bedrock.
52+
* **Infraestrutura:** EC2, Lambda, VPC, Subnet.
53+
* **Conceitos:** Erro, Log, Console, Tela, Configuração.
2754

28-
## 📝 O que cada camada faz?
55+
### 3. Validação de IA (Amazon Comprehend)
56+
Se a mensagem passa pelas regras locais, ela é enriquecida pela IA da AWS:
57+
* **Sentimento:** Mensagens com sentimento `NEGATIVO` (frustração) ou `NEUTRO` (pergunta técnica direta) ganham pontos.
58+
* **Key Phrases:** A IA extrai entidades. Se a confiança da extração for alta, o score da mensagem sobe.
2959

30-
### 1. Camada de Regras (O "Segurança")
31-
Esta camada é a mais rápida. Ela olha o tamanho da frase.
32-
* Se o aluno digitar apenas "Oi", o sistema já sabe que não é uma dúvida técnica e nem gasta tempo (ou dinheiro) chamando a Inteligência Artificial.
60+
---
3361

34-
### 2. Camada Técnica (O "Especialista")
35-
Aqui o sistema procura por palavras importantes da nossa aula, como:
36-
* **Serviços AWS**: Lambda, S3, EC2.
37-
* **Sinais de Dúvida**: "Como", "Porque", "Erro", "Não funciona".
62+
## 🔄 O Loop de Feedback (Aprendizado)
3863

39-
### 3. Camada de IA (O "Mestre")
40-
Esta é a parte mais avançada. Usamos o **Amazon Comprehend** para entender o *sentimento* da frase.
41-
* Se o aluno estiver frustrado ("Não estou conseguindo acessar o link"), a IA detecta isso como algo urgente.
42-
* Se for apenas um elogio ("Aula top professor!"), a IA entende que é uma interação social e não interrompe o professor.
64+
O sistema agora possui um mecanismo de correção humana:
65+
1. Se o classificador errar e marcar uma conversa como dúvida, ela aparece no dashboard.
66+
2. O professor clica no botão **"✕" (Falso Positivo)**.
67+
3. O sistema envia um evento para o endpoint `/feedback`.
68+
4. A mensagem é marcada no banco de dados com `correctClassification: 'INTERACAO'`.
69+
5. *(Futuro)* Esses dados serão usados para re-treinar o modelo ou ajustar os pesos do classificador automaticamente.
4370

4471
---
4572

46-
## 💡 Por que usamos IA se já temos regras?
47-
As regras são ótimas para o óbvio, mas a IA é necessária para o **contexto**.
48-
Exemplo: "O S3 está dando erro" não tem um ponto de interrogação, mas é claramente uma dúvida/problema que o professor precisa saber. A IA consegue perceber isso!
73+
## 📊 Métricas de Decisão
74+
75+
O dashboard exibe em tempo real:
76+
* **Confiança Média:** Quão seguro o sistema está de suas classificações.
77+
* **Taxa de Fallback:** Quantas vezes o Amazon Comprehend falhou e o sistema teve que confiar apenas nas regras locais.
78+
* **Score de IA:** Uma pontuação de 0 a 100 calculada combinando Regras + Sentimento + Entidades.

docs/latex/arquitetura.png

272 KB
Loading

0 commit comments

Comments
 (0)