warleygsantos's picture
Criacao de dropdown para tags e exibe a explicacao
170ebd9 unverified
import gradio as gr
from langchain.output_parsers import ResponseSchema
from langchain.output_parsers import StructuredOutputParser
from langchain.chat_models import ChatOpenAI
from langchain.prompts import PromptTemplate
template = '''
Primeiro, limpe todo o historico, não deixe conversas anteriores influenciar no que vem a seguir.
Categorize o comentário relacionando com a tag escrita pelo um vendedor relatando a objeção do cliente que se recusou a realizar a compra. Tome como base os exemplos para tomar a decisar de qual categoria escolher:
Vou apresentar as categorias, uma descrição e exemplos:
Muito negativo:
Nesta categoria, a perspectiva de venda futura é considerada muito baixa, indicando a impossiblidade de fechar futuros negócios. Exemplos:
1. Cliente expressou que não deseja mais comprar.
2. Cliente fora do perfil
3. O cliente é pessoa físlica
4. O cliente é consumidor final
5. O cliente solicitou produto ou serviço que não trabalhamos
6. O cliente é prestador de serviço
7. O cliente mudou de ramo de atividade
8. O cliente é sem perfil
9. O cliente encerrou as atividades
10. CNPJ baixado
11. O clinte fechou
12. Problema de cadastro do cliente
13. Numero de telefone do cliente não existe
14. Cliente prefere em outro canal de vendas
15. O cliente opta por contato através de outros vendedores, Representantes Comerciais Autônomos (RCA), compras presenciais, televendas, aplicativo, site, vendedor externo ou no balcão.
16. Excluir cliente da base
17. Remover do agendamento
18. Cliente pediu cancelamento
Negativa:
Aqui, há um reconhecimento de que a venda não foi concretizada devido a algum obstáculo ou desafio específico. Exemplos:
1. Problemas financeiros: Sem limite de crédito, sem prazo para compra, inadimplentes, com boletos a pagar, negativado, devendo.
2. Problemas logísticos: Aguardando data da rota de entrega, local do cliente não contemplado pela rota, espera pelo caminhão encher para iniciar as rotas, cliente precisa do produto antes da data de entrega.
3. Problemas de concorrência: Melhor preço ou prazo oferecido pelo concorrente.
4. Problemas de estoque do vendedor: Produto indisponível ou quantidade insuficiente em estoque no estoque do vendedor.
5. Cliente se recusa a atender a ligação: Nunca atende as ligações
6. Problemas com vendas: Os produtos estão represados
7. Cliente bloqueado
Neutra:
Refere-se a situações em que a comunicação com o cliente não foi bem-sucedida ou que o cliente ainda não possue demanda, o que pode impactar a conclusão da venda. Exemplos:
1. Cliente não atendeu: Ligação caiu na caixa postal, ligação chamou até cair, contato sem sucesso, comprador auxente, cx postal
2. Cliente não estava no momento: O comprador não estava no momento, o comprador não podia conversar no momento
3. Cliente abastecido: Cliente com estoque elevado, Cliente não tem demanda, comprou recentimente
4. Cliente esta aguardando recebimento de pedidos
5. Cliente ligou para pedir informações
6. Pós venda
7. Cliente reagendado
8. Cliente ausente
9. Envio de campanha: Envio de ofertas e promoções
10. Aguardando recebimento de pedidos
11. O vendedor não forneceu informações claras ou suficientes para categorizar a experiência
12. Atendimento repetido: O agendamento de ligar para o cliente foi feito por engano, deixando o atendimento duplicado
Positiva:
O cliente prefere adquirir o produto diretamente do vendedor que esta realizando o atendimento, sem utilizar outro canal.
1. Cliente realizou uma cotação: cliente perguntou os preços, cliente pediu um orçamento
Muito positiva:
Esta é a situação mais otimista, indicando uma perspectiva positiva por parte do cliente de que pode realizar compras diretamente do vendedor que esta realizando o atendimento, sem utilizar outro canal no futuro próximo.
1. O cliente vai verificar o seu estoque e realizar o pedido posteriormente.
Apenas retorne o array JSON para cada analise, não adicione NADA.
Não tente muitas imterpretações, siga os exemplos.
Lembrese que quem escreveu o comentário e marcou a tag foi o vendedor.
Não seja otimista, priorise as piores experiencias.
Id: {id}
Tag: {tag}
Comentário: {input}
{format_instructions}
'''
id_schema = ResponseSchema(
name='id', description='Mesmo id recebido na entrada'
)
sentiment_schema = ResponseSchema(
name='experiencia',
description='O texto é "muito positivo", "positivo", "neutro", "negativo", "muito negativo"? Utilize apenas estas palavras.'
)
subject_schema = ResponseSchema(
name='assunto', description='Qual o assunto do texto? Utilize até tres palavras.'
)
explanation_schema = ResponseSchema(
name='explicacao', description='Explique o motivo de ter escolhido a experiencia. Não invente, SEM INTERPRETAÇÃO'
)
response_schemas = [id_schema, sentiment_schema, subject_schema, explanation_schema]
parser = StructuredOutputParser.from_response_schemas(response_schemas)
format_instructions = parser.get_format_instructions()
chat = ChatOpenAI(temperature=0.0)
prompt = PromptTemplate(
template=template,
input_variables=['input', 'tag'],
partial_variables={'format_instructions': format_instructions},
)
chain = prompt | chat | parser
def greet(entrada, tag):
dados_lista = [{
'id': 1,
'input': entrada,
'tag': tag
}]
resposta = chain.batch(dados_lista)
return resposta[0]['experiencia'], resposta[0]['explicacao']
title = "Sentiment Analysis for Sales"
examples = [
["Informou que perdemos em todas cotações, informou que a diferença de preço é muito grande."],
["Mandei nossas promoções e me coloquei a disposição, perdemos pedido por conta de preço."],
["Tem comprado em fábricas, quando precisar disse que irá entrar em contato comigo."],
["Disse que vai conferir o estoque e me retornar amanhã"],
]
dropdown = gr.Dropdown(
[
"cotação",
"cliente inadimplente",
"reagendar",
"sem demanda",
"não temos o produto",
"envio de ofertas",
"não atende",
"outros motivos"
],
value="outros motivos",
label="Tag",
info="Classifica o atendimento"
)
# cria a interface com o gradio
iface = gr.Interface(
fn=greet,
inputs=["text", dropdown],
outputs=["text", "text"],
examples=examples,
title=title
)
iface.launch(share=True)