Skip to content

Commit 8bc552f

Browse files
committed
Fix mention conflicts
1 parent 7b79888 commit 8bc552f

2 files changed

Lines changed: 144 additions & 11 deletions

File tree

docs/SOCIAL_CONFLICTS_RESOLVED.md

Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
# 🎯 Correção de Conflitos Sociais no Agente Técnico
2+
3+
## 🚨 Problema Identificado
4+
5+
O agente técnico estava interceptando **todas as menções**, incluindo conversas casuais:
6+
7+
```
8+
❌ ANTES:
9+
@lucydev eae como vai?
10+
→ "Tentei procurar fontes mas não encontrei nada relevante..."
11+
12+
✅ DEPOIS:
13+
@lucydev eae como vai?
14+
→ (Passa para sistema de menções normais - conversa casual)
15+
```
16+
17+
## 🔧 Soluções Implementadas
18+
19+
### 1. **Filtro de Mensagens Sociais**
20+
```javascript
21+
// Detecta padrões claramente sociais/casuais
22+
const socialPatterns = [
23+
/\b(oi|olá|hey|eae|e aí|opa|salve)\b.*\b(como vai|como está|tudo bem|beleza|suave)\b/i,
24+
/\b(bom dia|boa tarde|boa noite)\b/i,
25+
/\b(obrigado|valeu|brigado|thanks)\b(?!.*\b(ajuda|help|problema|erro)\b)/i,
26+
/\b(tchau|bye|até|falou)\b/i,
27+
/^\s*(oi|olá|hey|eae|e aí|opa|salve)\s*[?!.]*\s*$/i,
28+
/^\s*(como vai|como está|tudo bem|beleza|suave)\s*[?!.]*\s*$/i
29+
];
30+
31+
// Se é claramente social, NÃO é técnico
32+
if (isSocial) return false;
33+
```
34+
35+
### 2. **Padrões Técnicos Específicos**
36+
```javascript
37+
// Requer contexto técnico específico, não apenas palavras isoladas
38+
const technicalHelpPatterns = [
39+
/\b(erro|error|bug|exception)\b.*\b(javascript|python|java|php|css|html|sql|node|react)\b/i,
40+
/\b(javascript|python|java|php|css|html|sql|node|react)\b.*\b(erro|error|bug|exception)\b/i,
41+
/\b(como|help|ajuda)\b.*\b(resolver|consertar|corrigir|fixar)\b.*\b(erro|bug|problema)\b/i,
42+
/\b(aggregateerror|typeerror|referenceerror|syntaxerror|nullpointerexception)\b/i,
43+
/\b(promise|async|await)\b.*\b(rejeitada|rejected|error|erro)\b/i
44+
];
45+
```
46+
47+
### 3. **Confiança Mais Restritiva**
48+
```javascript
49+
// ANTES: 60% confiança (muito baixo)
50+
MIN_CONFIDENCE: 0.6
51+
52+
// DEPOIS: 80% confiança (mais rigoroso)
53+
MIN_CONFIDENCE: 0.8
54+
55+
// Nova fórmula: Necessita 2+ keywords técnicas OU padrão técnico específico
56+
const confidence = (techHits >= 2 ? techHits * 0.3 : 0) + (hasTechnicalHelpPattern ? 0.8 : 0);
57+
```
58+
59+
## 📊 Resultados dos Testes
60+
61+
### **Mensagens Sociais (NÃO intercepta)**
62+
-`"eae como vai?"`**Social** (passa para menções normais)
63+
-`"oi, tudo bem?"`**Social** (passa para menções normais)
64+
-`"obrigado pela ajuda"`**Social** (passa para menções normais)
65+
-`"bom dia, como está?"`**Social** (passa para menções normais)
66+
-`"valeu cara, muito legal"`**Social** (passa para menções normais)
67+
68+
### **Mensagens Técnicas (intercepta corretamente)**
69+
-`"meu JavaScript está dando erro AggregateError"`**Técnico**
70+
-`"como resolver TypeError em Python?"`**Técnico**
71+
-`"ajuda com bug no código React"`**Técnico**
72+
-`"meu programa Java não funciona, dá NullPointerException"`**Técnico**
73+
74+
## 🎯 Comportamento Atual
75+
76+
### Cenário 1: Conversa Casual
77+
```
78+
Usuário: @lucydev eae como vai?
79+
Bot: (Sistema de menções normais responde com conversa casual)
80+
```
81+
82+
### Cenário 2: Dúvida Técnica
83+
```
84+
Usuário: @lucydev meu JavaScript está dando erro AggregateError
85+
Bot: (Agente técnico busca e retorna solução técnica)
86+
```
87+
88+
## 🔄 Fluxo de Decisão
89+
90+
```
91+
Menção recebida
92+
93+
1. É claramente social? → SIM → Sistema de menções normais
94+
95+
2. Tem padrões técnicos específicos? → NÃO → Sistema de menções normais
96+
97+
3. Confiança ≥ 80%? → SIM → Agente técnico
98+
99+
4. Caso contrário → Sistema de menções normais
100+
```
101+
102+
## 🎉 Benefícios Alcançados
103+
104+
1.**Sem interferência social**: Conversas casuais fluem naturalmente
105+
2.**Detecção precisa**: Apenas dúvidas técnicas reais são interceptadas
106+
3.**Melhor UX**: Usuários podem conversar normalmente com a Lucy
107+
4.**Especialização**: Agente técnico focado apenas em problemas reais
108+
5.**Compatibilidade**: Funciona perfeitamente com sistema de menções existente
109+
110+
---
111+
112+
**Status: ✅ CONFLITOS RESOLVIDOS - Sistema operando em harmonia**
113+
114+
Agora o agente técnico e o sistema de menções normais coexistem perfeitamente, cada um atendendo seu propósito específico sem interferir no outro! 🎯

utils/technicalAgent.js

Lines changed: 30 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ const CONFIG = {
1212
DEBUG: false, // Debug desativado - sistema funcionando corretamente
1313
MAX_QUERY_LENGTH: 100, // Máximo de caracteres na query
1414
CACHE_DURATION: 30 * 60 * 1000, // 30 minutos de cache
15-
MIN_CONFIDENCE: 0.6, // Confiança mínima para ativar busca
15+
MIN_CONFIDENCE: 0.8, // Confiança mais alta para evitar falsos positivos sociais
1616
MIN_RESULT_SCORE: 0.35, // Score mínimo equilibrado (não muito alto nem muito baixo)
1717
};
1818

@@ -179,24 +179,43 @@ function isTechnicalHelpRequest(text) {
179179
.normalize("NFD")
180180
.replace(/[\u0300-\u036f]/g, "");
181181

182+
// Filtrar mensagens claramente sociais/casuais primeiro
183+
const socialPatterns = [
184+
/\b(oi|olá|hey|eae|e aí|opa|salve)\b.*\b(como vai|como está|tudo bem|beleza|suave)\b/i,
185+
/\b(bom dia|boa tarde|boa noite)\b/i,
186+
/\b(obrigado|valeu|brigado|thanks)\b(?!.*\b(ajuda|help|problema|erro)\b)/i,
187+
/\b(tchau|bye|até|falou)\b/i,
188+
/^\s*(oi|olá|hey|eae|e aí|opa|salve)\s*[?!.]*\s*$/i, // Só cumprimentos
189+
/^\s*(como vai|como está|tudo bem|beleza|suave)\s*[?!.]*\s*$/i, // Só perguntas sociais
190+
/\b(legal|massa|show|top|maneiro|dahora)\b(?!.*\b(erro|bug|problema|ajuda)\b)/i
191+
];
192+
193+
// Se é claramente social, NÃO é técnico
194+
const isSocial = socialPatterns.some(pattern => pattern.test(normalized));
195+
if (isSocial) {
196+
return false;
197+
}
198+
182199
// Contar hits de palavras técnicas
183200
const techHits = technicalKeywords.filter(keyword =>
184201
normalized.includes(keyword)
185202
).length;
186203

187-
// Verificar padrões de ajuda
188-
const helpPatterns = [
189-
/\b(erro|error|bug|exception)\b/i,
190-
/\b(ajuda|help|socorro)\b/i,
191-
/\b(como|porque|por que)\b.*\?(.*)/i,
192-
/\b(não|nao|not).*funciona/i,
193-
/\b(problema|issue|trouble)\b/i
204+
// Verificar padrões de ajuda TÉCNICA específicos
205+
const technicalHelpPatterns = [
206+
/\b(erro|error|bug|exception)\b.*\b(javascript|python|java|php|css|html|sql|node|react)\b/i,
207+
/\b(javascript|python|java|php|css|html|sql|node|react)\b.*\b(erro|error|bug|exception)\b/i,
208+
/\b(como|help|ajuda)\b.*\b(resolver|consertar|corrigir|fixar)\b.*\b(erro|bug|problema)\b/i,
209+
/\b(não|nao|not)\s+(funciona|working|works)\b.*\b(código|code|script|função|function)\b/i,
210+
/\b(aggregateerror|typeerror|referenceerror|syntaxerror|nullpointerexception)\b/i,
211+
/\b(promise|async|await)\b.*\b(rejeitada|rejected|error|erro)\b/i
194212
];
195213

196-
const hasHelpPattern = helpPatterns.some(pattern => pattern.test(normalized));
214+
const hasTechnicalHelpPattern = technicalHelpPatterns.some(pattern => pattern.test(normalized));
197215

198-
// Calcular confiança
199-
const confidence = (techHits * 0.3) + (hasHelpPattern ? 0.7 : 0);
216+
// Calcular confiança - agora mais restritiva
217+
// Necessita pelo menos 2 keywords técnicas OU um padrão técnico específico
218+
const confidence = (techHits >= 2 ? techHits * 0.3 : 0) + (hasTechnicalHelpPattern ? 0.8 : 0);
200219

201220
return confidence >= CONFIG.MIN_CONFIDENCE;
202221
}

0 commit comments

Comments
 (0)