Files
clientflow_backend/app/prompt.py
2026-06-09 22:55:58 +01:00

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()