|
@@ -86,6 +86,12 @@ const AVALIACAO_SYSTEM_PROMPT = [
|
|
|
"derrubar o score para 1-4 só porque o problema em si não foi resolvido ali — avalie pela qualidade",
|
|
"derrubar o score para 1-4 só porque o problema em si não foi resolvido ali — avalie pela qualidade",
|
|
|
"da interação até o momento da transferência (faixa 5-8, a depender de agilidade e clareza), não",
|
|
"da interação até o momento da transferência (faixa 5-8, a depender de agilidade e clareza), não",
|
|
|
"pelo desfecho técnico que ficou a cargo do outro setor.",
|
|
"pelo desfecho técnico que ficou a cargo do outro setor.",
|
|
|
|
|
+ "IMPORTANTE sobre bot automático do cliente: se, depois da mensagem do atendente, a resposta que",
|
|
|
|
|
+ "chega for um bot automático de OUTRO negócio do próprio cliente (não uma resposta real da pessoa",
|
|
|
|
|
+ "sobre o atendimento — ver regra do campo resumo sobre esse padrão), isso NÃO conta como \"o atendente",
|
|
|
|
|
+ 'não respondeu"/negligência: não existe uma pessoa real esperando resposta depois disso. Avalie o',
|
|
|
|
|
+ "score apenas pela qualidade da mensagem que o próprio atendente enviou (clareza, correção, tom) e",
|
|
|
|
|
+ "não penalize pela ausência de continuidade — a conversa não teve para onde continuar.",
|
|
|
"Um atendimento resolvido com cliente satisfeito NUNCA recebe score abaixo de 6.",
|
|
"Um atendimento resolvido com cliente satisfeito NUNCA recebe score abaixo de 6.",
|
|
|
"Se nenhum atendente humano participou, use score_atendente = null.",
|
|
"Se nenhum atendente humano participou, use score_atendente = null.",
|
|
|
"Pela mesma lógica de escrever a justificativa antes do score: escreva o resumo ANTES de decidir",
|
|
"Pela mesma lógica de escrever a justificativa antes do score: escreva o resumo ANTES de decidir",
|
|
@@ -186,6 +192,85 @@ const AVALIACAO_SYSTEM_PROMPT = [
|
|
|
'→ score_atendente: 8-9 — atendimento breve mas cordial e resolvido; o piso 6 para resolvido=sim +',
|
|
'→ score_atendente: 8-9 — atendimento breve mas cordial e resolvido; o piso 6 para resolvido=sim +',
|
|
|
" sentimento=positivo se aplica normalmente.",
|
|
" sentimento=positivo se aplica normalmente.",
|
|
|
"",
|
|
"",
|
|
|
|
|
+ "Exemplo 9 — problema some sozinho e o cliente confirma o retorno ao normal, mesmo sem nenhuma ação",
|
|
|
|
|
+ ' técnica do atendente (resolvido = "sim", NÃO "nao" — isso vale mesmo fora de contexto de fora do',
|
|
|
|
|
+ " expediente; qualquer confirmação do cliente de que o problema não existe mais conta):",
|
|
|
|
|
+ 'Cliente: "Rede 5G sumiu"',
|
|
|
|
|
+ "(atendente assume o atendimento horas depois)",
|
|
|
|
|
+ 'Atendente Lucas: "Bom dia, segue sem aparecer?"',
|
|
|
|
|
+ 'Cliente: "Voltou"',
|
|
|
|
|
+ 'Atendente Lucas: "Certo, obrigado pelo retorno"',
|
|
|
|
|
+ "(atendente encerra o atendimento)",
|
|
|
|
|
+ '→ resolvido: "sim" — o cliente confirma que a rede voltou; o problema deixou de existir, mesmo sem',
|
|
|
|
|
+ ' nenhuma ação técnica do atendente. NÃO escreva "encerrou o atendimento sem resolver o problema" —',
|
|
|
|
|
+ " o retorno espontâneo confirmado pelo cliente É a resolução.",
|
|
|
|
|
+ '→ score_atendente: 6-7 — piso 6 por resolvido=sim; não sobe mais porque o atendente não fez nada',
|
|
|
|
|
+ " além de confirmar o retorno (não há diagnóstico/ação a reconhecer).",
|
|
|
|
|
+ "",
|
|
|
|
|
+ "Exemplo 10 — contato proativo do ATENDENTE (não do cliente) cuja resposta cai em um bot automático",
|
|
|
|
|
+ ' de OUTRO negócio do próprio cliente — NÃO é o cliente respondendo, NÃO é falta de resposta do',
|
|
|
|
|
+ ' atendente, e NÃO conta como "fora do expediente" real (resolvido = "indefinido", sem penalizar o',
|
|
|
|
|
+ " score do atendente):",
|
|
|
|
|
+ ' Atendente Thiago: "Olá Gerson, este é um acompanhamento da sua ativação de internet. Sua conexão',
|
|
|
|
|
+ ' está funcionando 100% ou você precisa de suporte?"',
|
|
|
|
|
+ ' (resposta recebida no número do cliente, horas depois): "Olá! Seja bem-vindo(a). Me chamo Leonardo,',
|
|
|
|
|
+ ' sou gestor da Hospedagens Prime, especializada em hospedagens de curta temporada... Como podemos',
|
|
|
|
|
+ ' ajudar?"',
|
|
|
|
|
+ " → Esse texto de resposta é claramente um bot automático de divulgação de OUTRO negócio do cliente",
|
|
|
|
|
+ " (hospedagem), sem NENHUMA relação com internet/ativação — não é o Gerson respondendo sobre o",
|
|
|
|
|
+ " assunto do atendimento. Reconheça esse padrão pelo conteúdo, não pela etiqueta de horário que",
|
|
|
|
|
+ " porventura acompanhe a mensagem.",
|
|
|
|
|
+ ' → resumo (bom): "O atendente Thiago entrou em contato proativamente com o cliente Gerson para',
|
|
|
|
|
+ ' acompanhar a ativação da internet. A resposta recebida foi de um bot automático de outro negócio',
|
|
|
|
|
+ ' do cliente (divulgação de hospedagem), sem relação com o atendimento; o cliente não respondeu',
|
|
|
|
|
+ ' realmente."',
|
|
|
|
|
+ ' → resumo (ruim, NÃO faça): "O cliente respondeu fora do horário de expediente e não houve resposta',
|
|
|
|
|
+ ' subsequente do atendente." (trata o bot como se fosse o cliente respondendo, e ainda inverte a',
|
|
|
|
|
+ " culpa para o atendente, que não tinha nada de real para responder)",
|
|
|
|
|
+ ' → resolvido: "indefinido" — não há confirmação nenhuma, do cliente real, de que a internet está',
|
|
|
|
|
+ " funcionando ou não; a mensagem automática não informa nada sobre isso.",
|
|
|
|
|
+ ' → score_atendente: não penalize por "não responder" ao bot — a mensagem do próprio atendente foi',
|
|
|
|
|
+ " clara e apropriada; avalie só por ela (tipicamente 6-8, a depender só da qualidade dessa mensagem).",
|
|
|
|
|
+ "",
|
|
|
|
|
+ "Exemplo 11 — mesmo padrão do Exemplo 10, outro negócio (salão de beleza) — reforça que o bot pode ser",
|
|
|
|
|
+ " de QUALQUER ramo, e que o erro mais perigoso é atribuir o conteúdo do bot ao ATENDENTE por engano:",
|
|
|
|
|
+ ' Atendente Thiago: "Olá Emerson, referente à sua solicitação de suporte. Gostaríamos de confirmar se',
|
|
|
|
|
+ ' o atendimento foi concluído com sucesso e se sua conexão está operando normalmente."',
|
|
|
|
|
+ " (resposta recebida no número do cliente, no mesmo instante): \"Olá, tudo bem? Será um prazer lhe",
|
|
|
|
|
+ " atender. Nosso horário de atendimento é terça a sexta das 8:30 às 11:30... Para agilizar o seu",
|
|
|
|
|
+ " atendimento selecione a opção desejada: 1- Escovas e Tratamentos 2- Corte 3- Mechas ou Coloração...\"",
|
|
|
|
|
+ " → Esse texto é um bot automático de um SALÃO DE BELEZA, negócio do cliente sem nenhuma relação com",
|
|
|
|
|
+ " internet — mesmo padrão do Exemplo 10, só que de outro ramo. O detalhe do menu numerado (corte,",
|
|
|
|
|
+ " escova, unha...) é o sinal claro de que é um bot alheio, não uma resposta da pessoa.",
|
|
|
|
|
+ ' → resumo (bom): "O atendente Thiago entrou em contato proativamente com o cliente Emerson para',
|
|
|
|
|
+ ' confirmar se o suporte havia sido concluído com sucesso. A resposta recebida foi de um bot',
|
|
|
|
|
+ ' automático de outro negócio do cliente (um salão de beleza), sem relação com o atendimento; não',
|
|
|
|
|
+ ' houve resposta real do cliente."',
|
|
|
|
|
+ ' → resumo (ruim, NÃO faça): "O atendente apresentou uma lista de serviços de beleza e não respondeu',
|
|
|
|
|
+ ' à solicitação do cliente." (ERRO GRAVE: atribui ao atendente um conteúdo que veio de um bot no',
|
|
|
|
|
+ " número do cliente — o atendente não tem nada a ver com salão de beleza)",
|
|
|
|
|
+ ' → score_atendente: NÃO é "atendente confundiu o assunto com um serviço de beleza" — o atendente não',
|
|
|
|
|
+ " escreveu isso, um bot alheio escreveu; julgue o score só pela mensagem real do Thiago (clara e",
|
|
|
|
|
+ " correta), tipicamente 6-8, sem relação nenhuma com o conteúdo do bot.",
|
|
|
|
|
+ "",
|
|
|
|
|
+ "Exemplo 12 — mesmo tipo de abertura proativa dos Exemplos 10/11 (atendente confirma se o suporte foi",
|
|
|
|
|
+ " concluído), mas SEM bot alheio dessa vez — o cliente responde de verdade. A identificação de quem",
|
|
|
|
|
+ " iniciou o contato vale para TODO atendimento que começa assim, não só para os casos que caem em bot:",
|
|
|
|
|
+ ' Atendente Thiago: "Olá Braulio, referente à sua solicitação de suporte. Gostaríamos de confirmar se',
|
|
|
|
|
+ ' o atendimento foi concluído com sucesso e se sua conexão está operando normalmente."',
|
|
|
|
|
+ 'Cliente Braulio: "Sim, tudo funcionando"',
|
|
|
|
|
+ 'Atendente Thiago: "Perfeito, muito obrigado pelo retorno! Qualquer dificuldade que notar ficamos à',
|
|
|
|
|
+ ' sua disposição."',
|
|
|
|
|
+ ' → resumo (bom): "O atendente Thiago entrou em contato proativamente com o cliente Braulio para',
|
|
|
|
|
+ ' confirmar se o atendimento anterior havia sido concluído com sucesso. O cliente confirmou que a',
|
|
|
|
|
+ ' conexão estava funcionando normalmente."',
|
|
|
|
|
+ ' → resumo (ruim, NÃO faça): "O cliente Braulio entrou em contato para verificar se o atendimento',
|
|
|
|
|
+ ' havia sido concluído com sucesso. O atendente Thiago confirmou que a conexão estava funcionando' ,
|
|
|
|
|
+ ' normalmente, e o cliente confirmou isso." (inverte quem perguntou e quem confirmou — foi o',
|
|
|
|
|
+ " atendente que perguntou, o cliente só confirmou)",
|
|
|
|
|
+ ' → resolvido: "sim", sentimento "positivo", score 8-9 — o conteúdo do atendimento em si está certo;',
|
|
|
|
|
+ " só a direção de quem iniciou é o que costuma sair invertida, e é isso que este exemplo corrige.",
|
|
|
|
|
+ "",
|
|
|
"Campos:",
|
|
"Campos:",
|
|
|
'- resolvido: "sim" se o problema do cliente foi claramente resolvido na conversa — inclui o caso em',
|
|
'- resolvido: "sim" se o problema do cliente foi claramente resolvido na conversa — inclui o caso em',
|
|
|
" que o PRÓPRIO CLIENTE confirma que já está tudo certo/resolvido, mesmo sem ter detalhado qual era",
|
|
" que o PRÓPRIO CLIENTE confirma que já está tudo certo/resolvido, mesmo sem ter detalhado qual era",
|
|
@@ -197,7 +282,7 @@ const AVALIACAO_SYSTEM_PROMPT = [
|
|
|
" não dá para concluir.",
|
|
" não dá para concluir.",
|
|
|
'- sentimento_cliente_final: sentimento do cliente AO FINAL da conversa ("positivo", "neutro", "negativo"',
|
|
'- sentimento_cliente_final: sentimento do cliente AO FINAL da conversa ("positivo", "neutro", "negativo"',
|
|
|
' ou "indefinido" quando o cliente some/não se manifesta no final).',
|
|
' ou "indefinido" quando o cliente some/não se manifesta no final).',
|
|
|
- "- resumo: 2 a 4 frases objetivas e específicas — nunca genéricas. Regras: (1) se um problema",
|
|
|
|
|
|
|
+ "- resumo: 4 a 6 frases objetivas e específicas — nunca genéricas. Regras: (1) se um problema",
|
|
|
" mencionado é causado por outro (ex.: internet bloqueada POR CAUSA de boleto em atraso), explicite",
|
|
" mencionado é causado por outro (ex.: internet bloqueada POR CAUSA de boleto em atraso), explicite",
|
|
|
" essa relação de causa em vez de listar os dois como problemas soltos e desconectados; (2) diga o",
|
|
" essa relação de causa em vez de listar os dois como problemas soltos e desconectados; (2) diga o",
|
|
|
' que o cliente pediu/solicitou concretamente (ex.: "agendar o pagamento para liberar a internet"),',
|
|
' que o cliente pediu/solicitou concretamente (ex.: "agendar o pagamento para liberar a internet"),',
|
|
@@ -284,6 +369,42 @@ const AVALIACAO_SYSTEM_PROMPT = [
|
|
|
' Exemplo bom: "Cliente entrou em contato reclamando de falta de sinal de internet, mas já era fora',
|
|
' Exemplo bom: "Cliente entrou em contato reclamando de falta de sinal de internet, mas já era fora',
|
|
|
' do horário de atendimento do setor. O próprio cliente comentou depois que o sinal voltou a',
|
|
' do horário de atendimento do setor. O próprio cliente comentou depois que o sinal voltou a',
|
|
|
' funcionar sozinho após algum tempo."',
|
|
' funcionar sozinho após algum tempo."',
|
|
|
|
|
+ " (12) leia a conversa até o desfecho REAL mais recente antes de resumir — não pare numa etapa",
|
|
|
|
|
+ " intermediária (ex.: transferência para outro setor) se a conversa continuar depois disso com o",
|
|
|
|
|
+ " desfecho final. Em especial, quando a conversa registrar uma LIGAÇÃO/CONTATO TELEFÔNICO feito para",
|
|
|
|
|
+ " concluir algo (ex.: ligar para o número que o cliente passou para efetivar um cancelamento) e/ou uma",
|
|
|
|
|
+ " AÇÃO DE CAMPO subsequente (ex.: técnico foi até o local retirar equipamento), cite esses passos",
|
|
|
|
|
+ " finais no resumo — eles são o desfecho real, não invente que \"o cliente não respondeu\" ou que",
|
|
|
|
|
+ ' "não houve solução" se a conversa mostra essas etapas acontecendo depois.',
|
|
|
|
|
+ " (13) verifique QUEM enviou a PRIMEIRA mensagem da conversa antes de escrever quem \"entrou em",
|
|
|
|
|
+ ' contato"/"procurou atendimento" — nem todo atendimento começa com o cliente pedindo ajuda; muitos',
|
|
|
|
|
+ " começam com o ATENDENTE/empresa entrando em contato de forma proativa (ex.: mensagem de",
|
|
|
|
|
+ " acompanhamento pós-ativação, cobrança, aviso). Quando a primeira mensagem é do atendente, diga isso",
|
|
|
|
|
+ ' explicitamente (ex.: "o atendente Fulano entrou em contato para acompanhamento da ativação") — nunca',
|
|
|
|
|
+ ' escreva "o cliente entrou em contato/solicitou ajuda" quando quem iniciou foi a empresa.',
|
|
|
|
|
+ " Além disso: às vezes, depois da mensagem do atendente, a resposta que chega no número do cliente é",
|
|
|
|
|
+ " claramente um bot/atendimento automático de OUTRO negócio do próprio cliente (ex.: propaganda de",
|
|
|
|
|
+ " hospedagem, loja, serviço qualquer, sem nenhuma relação com internet/o motivo do atendimento) — não",
|
|
|
|
|
+ " uma resposta real da pessoa sobre o problema em questão. Reconheça esse padrão pelo conteúdo",
|
|
|
|
|
+ " (mensagem de divulgação/menu automático de um negócio não relacionado) e descreva no resumo que a",
|
|
|
|
|
+ " mensagem do atendente caiu num bot automático do cliente (de outro assunto/negócio) e que o cliente",
|
|
|
|
|
+ " não respondeu novamente depois disso — não trate o texto do bot como se fosse o cliente pedindo",
|
|
|
|
|
+ ' ajuda ou respondendo ao assunto do atendimento, e não escreva "não houve resposta durante o',
|
|
|
|
|
+ ' expediente" como se o atendente estivesse esperando: o bot respondeu, só que não é uma resposta',
|
|
|
|
|
+ " real da pessoa. CUIDADO com um erro comum ao tentar corrigir isso: essa mensagem automática",
|
|
|
|
|
+ " aparece no histórico rotulada com o nome do CLIENTE (é o número dele, afinal) — mas o conteúdo não",
|
|
|
|
|
+ " é do atendente nem do cliente, é de um bot de terceiros. NUNCA atribua esse conteúdo ao ATENDENTE",
|
|
|
|
|
+ ' (ex.: nunca escreva "o atendente apresentou uma lista de serviços de beleza/hospedagem" ou "o',
|
|
|
|
|
+ ' atendente confundiu o assunto") — foi o cliente quem recebeu essa resposta automática em seu',
|
|
|
|
|
+ " próprio número, o atendente não teve nenhuma participação nela. O conteúdo do bot não é fala de",
|
|
|
|
|
+ " nenhum dos dois participantes reais do atendimento.",
|
|
|
|
|
+ ' Exemplo ruim: "O cliente entrou em contato após a ativação da internet e solicitou ajuda. O',
|
|
|
|
|
+ ' atendimento foi transferido para Thiago, mas não houve resposta durante o período de expediente do',
|
|
|
|
|
+ ' setor." (inverte quem iniciou o contato, inventa uma "transferência" e um pedido de ajuda que não',
|
|
|
|
|
+ " aconteceram, e ignora que a resposta recebida foi de um bot alheio)",
|
|
|
|
|
+ ' Exemplo bom: "O atendente Thiago entrou em contato com o cliente Gerson para acompanhamento da',
|
|
|
|
|
+ ' ativação da internet. A resposta recebida no número do cliente foi de um bot automático de outro',
|
|
|
|
|
+ ' negócio dele (não relacionado ao atendimento); o cliente não respondeu novamente."',
|
|
|
"- sugestoes_melhoria: 0 a 5 itens curtos e acionáveis para o atendente/equipe melhorar; lista vazia se exemplar.",
|
|
"- sugestoes_melhoria: 0 a 5 itens curtos e acionáveis para o atendente/equipe melhorar; lista vazia se exemplar.",
|
|
|
"- atendentes: nomes dos atendentes humanos que participaram (como aparecem na conversa).",
|
|
"- atendentes: nomes dos atendentes humanos que participaram (como aparecem na conversa).",
|
|
|
"- visita_agendada: true se ficou combinada visita técnica presencial na conversa.",
|
|
"- visita_agendada: true se ficou combinada visita técnica presencial na conversa.",
|
|
@@ -531,7 +652,7 @@ export async function gerarAvaliacaoViaLLM(atendimento, mensagens) {
|
|
|
{ role: "user", content: conteudoUsuario }
|
|
{ role: "user", content: conteudoUsuario }
|
|
|
],
|
|
],
|
|
|
format: AVALIACAO_JSON_SCHEMA,
|
|
format: AVALIACAO_JSON_SCHEMA,
|
|
|
- options: { temperature: 0, num_ctx: 8192, num_predict: 1024 }
|
|
|
|
|
|
|
+ options: { temperature: 0, num_ctx: 16384, num_predict: 1024 }
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
let dados;
|
|
let dados;
|