Spaces:
Runtime error
Runtime error
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) | |