evalAtendimentosGate.mjs 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. import { classificarPergunta } from "#services/atendimentosQueryService.js";
  2. const CASES = [
  3. { query: "cliente pedindo segunda via de boleto", esperado: true, tipo: "positivo" },
  4. { query: "problema de internet lenta", esperado: true, tipo: "positivo" },
  5. { query: "cancelamento de contrato", esperado: true, tipo: "positivo" },
  6. { query: "cliente reclamando que a internet caiu de novo", esperado: true, tipo: "positivo" },
  7. { query: "solicitação de mudança de endereço de instalação", esperado: true, tipo: "positivo" },
  8. { query: "cliente questionando cobrança duplicada na fatura", esperado: true, tipo: "positivo" },
  9. { query: "pedido de upgrade de plano de internet", esperado: true, tipo: "positivo" },
  10. { query: "me conta algo engraçado que um cliente falou", esperado: true, tipo: "quase-armadilha" },
  11. { query: "qual foi a reclamação mais estranha que já recebemos", esperado: true, tipo: "quase-armadilha" },
  12. { query: "quantos atendimentos tivemos essa semana", esperado: true, tipo: "quase-armadilha" },
  13. { query: "o que aconteceu no último atendimento", esperado: true, tipo: "quase-armadilha" },
  14. { query: "vocês têm histórico de conversas com clientes?", esperado: true, tipo: "quase-armadilha" },
  15. { query: "previsão do tempo para amanhã em Paris", esperado: false, tipo: "negativo" },
  16. { query: "receita de bolo de chocolate", esperado: false, tipo: "negativo" },
  17. { query: "quem ganhou o jogo de futebol ontem", esperado: false, tipo: "negativo" },
  18. { query: "qual a capital da Austrália", esperado: false, tipo: "negativo" },
  19. { query: "como treinar para uma maratona", esperado: false, tipo: "negativo" },
  20. { query: "melhores filmes de ficção científica dos anos 80", esperado: false, tipo: "negativo" }
  21. ];
  22. async function main() {
  23. const rows = [];
  24. for (const c of CASES) {
  25. const { relacionado } = await classificarPergunta(c.query, []);
  26. rows.push({
  27. query: c.query,
  28. tipo: c.tipo,
  29. esperado: c.esperado,
  30. obtido: relacionado,
  31. resultado: relacionado === c.esperado ? "OK" : (c.esperado ? "FALSO-NEGATIVO (grave)" : "falso-positivo")
  32. });
  33. }
  34. console.log("\n=== evalAtendimentosGate ===\n");
  35. console.table(rows);
  36. const acertos = rows.filter((r) => r.resultado === "OK").length;
  37. const falsosNegativos = rows.filter((r) => r.resultado.startsWith("FALSO-NEGATIVO"));
  38. const falsosPositivos = rows.filter((r) => r.resultado === "falso-positivo");
  39. console.log("\n--- resumo ---");
  40. console.log(`acurácia: ${acertos}/${rows.length} (${((acertos / rows.length) * 100).toFixed(0)}%)`);
  41. console.log(`falsos-negativos (bloqueou pergunta legítima, ERRO GRAVE): ${falsosNegativos.length}`);
  42. if (falsosNegativos.length) console.log(falsosNegativos.map((r) => ` - "${r.query}"`).join("\n"));
  43. console.log(`falsos-positivos (deixou passar pergunta fora do tema): ${falsosPositivos.length}`);
  44. if (falsosPositivos.length) console.log(falsosPositivos.map((r) => ` - "${r.query}"`).join("\n"));
  45. console.log("");
  46. }
  47. main()
  48. .then(() => process.exit(0))
  49. .catch((err) => {
  50. console.error("[evalAtendimentosGate] erro:", err);
  51. process.exit(1);
  52. });