83 lines
2.7 KiB
Python
83 lines
2.7 KiB
Python
import json
|
|
|
|
from app.schemas import AnalyzeRequest
|
|
|
|
|
|
def build_prompt(request: AnalyzeRequest) -> str:
|
|
state_json = request.current_state.model_dump_json(indent=2)
|
|
|
|
source_line = f"\nORIGEM DO EVENTO:\n{request.source}\n" if request.source else ""
|
|
|
|
return f"""
|
|
Analisa esta conversa real de cliente B2B. A empresa vende carregadores EV AC / wallbox.
|
|
|
|
IMPORTANTE:
|
|
- A ÚLTIMA MENSAGEM DO CLIENTE é a mensagem principal a classificar.
|
|
- Usa o HISTÓRICO ANTERIOR apenas como contexto.
|
|
- Não trates mensagens anteriores da empresa como se fossem a ação final.
|
|
- Se a última mensagem é do cliente e contém pedido, pergunta, solicitação, dúvida ou confirmação, who_has_the_ball = empresa e conversation_state = a_aguardar_empresa.
|
|
|
|
{source_line}
|
|
ÚLTIMA MENSAGEM DO CLIENTE:
|
|
{request.last_customer_message}
|
|
|
|
HISTÓRICO ANTERIOR / CONTEXTO:
|
|
{request.previous_context}
|
|
|
|
ESTADO ATUAL CONHECIDO ANTES DA ÚLTIMA MENSAGEM:
|
|
{state_json}
|
|
|
|
Devolve JSON com estes campos:
|
|
{{
|
|
"case_type": "",
|
|
"intent": "",
|
|
"product_interest": "",
|
|
"conversation_state": "",
|
|
"commercial_state": "",
|
|
"relationship_state": "",
|
|
"next_action": "",
|
|
"who_has_the_ball": "",
|
|
"urgency": "",
|
|
"risk": "",
|
|
"summary": "",
|
|
"evidence": [],
|
|
"confidence": 0.0
|
|
}}
|
|
|
|
Valores permitidos, usar exatamente estes valores:
|
|
|
|
case_type:
|
|
comercial, marketing, suporte, financeiro, outro
|
|
|
|
intent:
|
|
pedido_informacao, pedido_preco, pedido_contacto, pedido_proposta, pedido_orcamento, pedido_ajuste_proposta, followup_proposta, pedido_encomenda, pedido_proforma, pedido_fatura, confirmacao_adjudicacao, pedido_confirmacao_tecnica, comprovativo_pagamento, negociacao_preco, sem_interesse, remover_lista, suporte, resposta_ambigua, outro
|
|
|
|
conversation_state:
|
|
novo, a_aguardar_empresa, a_aguardar_cliente, resolvida, precisa_revisao
|
|
|
|
commercial_state:
|
|
novo_lead, interessado, qualificacao, proposta_pedida, proposta_enviada, negociacao, encomenda_pendente, proforma_pedida, pagamento_recebido, preparar_envio, cliente_ativo, sem_interesse, perdido, ganho, desconhecido
|
|
|
|
relationship_state:
|
|
novo_contacto, lead_existente, cliente_ativo, ex_cliente, desconhecido
|
|
|
|
who_has_the_ball:
|
|
empresa, cliente, ambos, desconhecido
|
|
|
|
urgency:
|
|
baixa, media, alta
|
|
|
|
risk:
|
|
baixo, medio, alto
|
|
|
|
Regras:
|
|
- Usa exatamente os valores permitidos. Não uses acentos, sinónimos ou variações.
|
|
- Para urgency usa "media", nunca "média".
|
|
- Para risk usa "medio", nunca "médio".
|
|
- next_action deve ser uma frase curta em português, nunca enum nem código.
|
|
- evidence deve conter frases curtas retiradas da conversa.
|
|
- summary deve ser curto e útil para o comercial.
|
|
- Não inventes informação.
|
|
- Responde apenas JSON válido, sem markdown.
|
|
""".strip()
|