O funil de vendas de quase toda empresa tem uma planilha escondida em algum lugar com uma fórmula de pontuação que ninguém mais entende. Ela mistura cargo, tamanho da empresa, origem do lead e algumas palavras-chave, e produz um número que o time comercial aprendeu a ignorar. O motivo é simples: quando o topo da lista está errado, não existe onde mexer.
O Jev — o modelo da TypeSafe que devolve decisões tipadas com probabilidade em vez de texto — permite refazer essa pontuação de um jeito diferente: várias perguntas pequenas ao modelo e a combinação delas no seu código, com pesos que alguém escreveu, revisou e versionou.
O desenho das perguntas
Uma chamada por lead. No state, a mensagem que a pessoa enviou e os campos do
cadastro que a decisão realmente usa. Nada além disso.
{
"state": {
"mensagem": "Somos uma rede de 40 farmácias no interior de SP. Precisamos trocar o sistema de estoque até janeiro por causa de uma exigência da matriz. Quem cuida da negociação sou eu, diretor de operações.",
"empresa": {"segmento": "varejo farmacêutico", "funcionarios": 320},
"origem": "formulário do site",
"cargo_declarado": "diretor de operações"
},
"questions": {
"estagio": {
"type": "choice",
"instructions": "Em que estágio de compra esta mensagem indica que a pessoa está?",
"criteria": {
"pesquisando": "Quer entender o que o produto faz; sem prazo nem orçamento.",
"comparando": "Já conhece alternativas e está avaliando qual escolher.",
"decidindo": "Tem prazo, necessidade explícita e poder de decisão ou acesso a ele.",
"suporte": "Já é cliente e escreveu para pedir ajuda, não para comprar.",
"indefinido": "A mensagem não permite dizer o estágio."
}
},
"intencao_de_compra": {
"type": "score",
"instructions": "Quanto a mensagem indica intenção real de comprar em breve?",
"criteria": [
"Curiosidade; nenhuma necessidade declarada.",
"Interesse genérico, sem prazo.",
"Necessidade clara, sem prazo.",
"Necessidade clara com prazo declarado."
]
},
"aderencia_ao_produto": {
"type": "score",
"instructions": "Quanto o problema descrito é o problema que o nosso produto resolve?",
"criteria": [
"Fora do escopo do produto.",
"Adjacente; resolveríamos só uma parte.",
"Dentro do escopo, com adaptações.",
"Exatamente o caso de uso principal do produto."
]
},
"poder_de_decisao": {
"type": "noul",
"instructions": "A pessoa se apresenta como quem decide a compra ou como quem conduz a negociação?"
},
"pede_contato_humano": {
"type": "noul",
"instructions": "A mensagem pede explicitamente falar com uma pessoa, ligar ou agendar reunião?"
}
}
}
A opção indefinido é o escape obrigatório. Mensagens de formulário são curtas e
muitas vezes não dizem nada — sem escape, o modelo é obrigado a fingir que disse.
O que o código faz com a resposta
Piso de confiança. Confiança baixa no estágio significa que a mensagem não sustenta a classificação. Esse lead vai para nutrição automática, não para o telefone de um vendedor.
Regras determinísticas. pede_contato_humano acima do corte agenda contato,
independentemente da nota — é um pedido explícito do cliente, e ignorá-lo por
causa de um peso é o tipo de erro que custa reputação. O estágio suporte
desvia o lead inteiro para a fila de atendimento.
Combinação por último. Intenção, aderência e poder de decisão entram na fórmula com pesos por perfil de campanha. Como as réguas têm quatro níveis, cada nota é dividida por 3 antes de entrar na conta:
e = r.answers["estagio"]
if e.confidence < PISO or e.choice == "indefinido":
return nutricao_automatica(lead)
if e.choice == "suporte":
return fila_suporte(lead)
if r.answers["pede_contato_humano"].noul > 0.7:
return agendar_contato(lead, motivo="pedido explícito")
intencao = r.answers["intencao_de_compra"].score / 3
aderencia = r.answers["aderencia_ao_produto"].score / 3
decisor = r.answers["poder_de_decisao"].noul
nota = 0.45 * intencao + 0.40 * aderencia + 0.15 * decisor
Trocar o perfil da campanha é trocar o vetor de pesos, não reescrever a pergunta. A mecânica completa, com as ressalvas sobre normalizar réguas de tamanhos diferentes, está em pontuação composta.
Onde entra a pessoa
O limiar acompanha o risco, e aqui o risco é assimétrico: ligar para um lead frio custa o tempo de uma ligação; descartar um lead quente custa o contrato. Por isso, no topo da faixa, vale mandar para o vendedor mesmo com confiança mediana — e, na base, nunca descartar automaticamente. Um lead com nota baixa volta para nutrição, não para a lixeira.
Um segundo ponto de revisão humana é a calibração dos pesos: guardar a nota, a
distribuição e o desfecho real de cada lead é o que permite, três meses depois,
descobrir que aderencia_ao_produto prediz melhor que intencao_de_compra.
Sem esse registro, a fórmula volta a ser opinião.
Custo
Assumindo dez mil leads por mês — suposição deste artigo — e um state de cerca
de dois mil tokens, que cobre a mensagem e o registro da empresa: ao preço
oficial de US$ 0,042 por milhão de tokens de entrada, com saída gratuita, e o
dólar estimado em R$ 5,40, cada lead sai por cerca de R$ 0,00045 e o mês inteiro
por cerca de R$ 4,54. A fórmula está em
quanto custa uma decisão.
Onde isso quebra
Contagem e aritmética. “Quantos funcionários a empresa tem?” não é pergunta
para o modelo se o número já está no cadastro — e, se não estiver, ele não vai
descobrir. A documentação oficial é direta: o jev-1.13 não é calculadora e não
conta de forma confiável. Faixa de porte se resolve com um if no seu código.
Comparação de datas. “O prazo declarado cabe no nosso ciclo de implantação?” exige comparar datas, e o modelo lê data como texto. Extraia a data com uma pergunta e compare em código, como na receita de extrair datas.
State grande. Colar o histórico inteiro do CRM no state derruba a acurácia,
porque detalhe irrelevante age como distrator — é um dos limites declarados da
versão. Mande a última mensagem e os três campos que importam.
Aderência é julgamento do seu produto, não conhecimento geral. O modelo não
sabe o que você vende. Se a descrição do nível mais alto de
aderencia_ao_produto não disser, com exemplos, qual é o caso de uso principal,
a nota vira ruído. Isso é trabalho de
critérios que separam.
A lista completa dos nove modos de falha está em limites do Jev e os outros fluxos desta família em casos de uso.
Perguntas frequentes
Por que não pedir a nota do lead direto ao modelo?
Porque uma nota única esconde vários julgamentos num número e não tem alavanca de ajuste. Quando o topo da lista não faz sentido, você só pode reescrever o texto e torcer. Com dimensões separadas, você muda um coeficiente e roda de novo.
Que dimensões funcionam bem para lead scoring?
As que são independentes entre si. Intenção de compra, porte da empresa, urgência declarada e aderência ao produto costumam separar bem. Se duas dimensões andam sempre juntas nos seus dados, elas são a mesma pergunta escrita duas vezes, e somar as duas conta a mesma evidência em dobro.
Como o modelo sabe o que é um bom lead para mim?
Pelo que você escreve nos criteria de cada pergunta. O Jev não é ajustado com os seus dados: a documentação oficial diz que os mesmos pesos servem todas as contas e que a adaptação ao seu domínio acontece pelo conteúdo do state e pela descrição das opções e dos níveis.
Quanto custa pontuar dez mil leads?
Assumindo um state de cerca de dois mil tokens, que cobre a mensagem e o perfil da empresa, o preço oficial de US$ 0,042 por milhão de tokens de entrada e o dólar estimado em R$ 5,40 dão cerca de R$ 0,00045 por lead e cerca de R$ 4,54 por dez mil.
O modelo pode enriquecer o cadastro com dados que faltam?
Não. Ele não é treinado para gerar texto nem para buscar informação fora do state. Enriquecimento é trabalho de outra ferramenta; o Jev entra depois, julgando o que já está no registro.