A caixa compartilhada é um padrão organizacional acidental. Começa com um
endereço contato@, ganha um financeiro@, depois um parcerias@, e em algum
momento existe uma pessoa cujo trabalho de manhã é abrir cada mensagem, decidir
de quem é e encaminhar. Não é um trabalho difícil; é um trabalho que não
termina.
O Jev, modelo da TypeSafe AI, devolve decisões tipadas com probabilidade em vez de texto gerado. Para triagem de e-mail, isso significa transformar a leitura manual em uma chamada por mensagem, com o destino, a urgência e a natureza do pedido saindo juntos.
O desenho das perguntas
O state leva o e-mail limpo. Limpo é literal: sem assinatura, sem aviso de
confidencialidade, sem a cadeia de respostas anteriores coladas embaixo.
from typesafe_sdk import Choice, Noul, Score
perguntas = {
"destino": Choice(
instructions="Qual área da empresa deve tratar este e-mail?",
criteria={
"comercial": "Pedido de orçamento, proposta, interesse em contratar.",
"financeiro": "Nota fiscal, pagamento, boleto, reembolso, cobrança.",
"suporte": "Problema com um produto ou serviço já contratado.",
"juridico": "Contrato, notificação, órgão público, processo.",
"rh": "Candidatura, currículo, assunto de pessoal.",
"nao_classificavel": "Não dá para dizer a área a partir deste texto.",
},
),
"urgencia": Score(
instructions="Qual a urgência real deste e-mail?",
criteria=[
"Informativo; não exige resposta.",
"Resposta em alguns dias resolve.",
"Pede resposta rápida ou cita prazo próximo.",
"Prazo vencendo ou operação parada.",
],
),
"esforco_de_resposta": Score(
instructions="Quanto trabalho a resposta exige de quem receber?",
criteria=[
"Resposta padrão de uma linha.",
"Resposta simples, com consulta a um sistema.",
"Exige análise ou coordenação entre áreas.",
"Exige decisão de gestão ou parecer especializado.",
],
),
"exige_resposta": Noul(
instructions="O remetente espera uma resposta, explícita ou implicitamente?"
),
"cita_prazo_formal": Noul(
instructions="O texto cita prazo legal, notificação, órgão público ou consequência jurídica?"
),
}
A opção nao_classificavel é o escape. Sem ela, todo boletim informativo e todo
e-mail automático de sistema vira “comercial” com confiança mediana, e você
descobre isso um mês depois olhando a fila errada.
O que o código faz com a resposta
Piso de confiança primeiro. Abaixo do piso, o e-mail vai para a fila geral, com a distribuição registrada. Nenhum encaminhamento automático acontece — um e-mail no departamento errado custa um dia de atraso.
Regras determinísticas depois. cita_prazo_formal acima do corte manda para
o jurídico, sempre, independentemente do destino escolhido. Essa é uma política
com consequência legal; não deve depender de peso nenhum.
Combinação por último. Urgência e esforço decidem a ordem, e a combinação é interessante porque não é uma soma: o e-mail urgente e barato de responder vem antes do urgente e caro, porque tirá-lo da fila libera capacidade.
d = r.answers["destino"]
if r.answers["cita_prazo_formal"].noul > 0.6:
return encaminhar(email, "juridico", prioridade=1.0)
if d.confidence < PISO or d.choice == "nao_classificavel":
return fila_geral(email, distribuicao=d.probabilities)
if r.answers["exige_resposta"].noul < 0.3:
return arquivar(email)
urgencia = r.answers["urgencia"].score / 3
esforco = r.answers["esforco_de_resposta"].score / 3
prioridade = 0.75 * urgencia + 0.25 * (1 - esforco)
encaminhar(email, d.choice, prioridade)
Onde entra a pessoa
Na fila geral, que é onde a confiança baixa aterrissa, e na revisão por amostragem dos encaminhamentos automáticos. A segunda é a que mede se o piso está no lugar certo: se a amostra mostra erro perto de zero, o piso está alto demais e você está mandando gente ler e-mail que o sistema resolveria.
O limiar acompanha o risco: encaminhar errado um e-mail comercial custa um dia; encaminhar errado uma notificação extrajudicial custa um prazo. Por isso o jurídico tem uma regra determinística antes do Choice, e não um peso dentro dele. A lógica de faixas está em roteamento por confiança, e o desenho da fila humana em revisão humana.
Custo
Assumindo cinquenta mil e-mails por mês — suposição deste artigo — com 955 tokens de entrada por chamada, o perfil das nossas medições de 18/09/2026: 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 e-mail sai por cerca de R$ 0,00022 e o mês por cerca de R$ 10,83. A conta completa está em quanto custa uma decisão.
Vale notar de onde vem o barato: as cinco perguntas viajam na mesma chamada, e o
state é cobrado uma vez só. Perguntar a sexta coisa custa apenas os tokens
dela. Esse é o padrão de
fan-out especulativo.
Onde isso quebra
State grande é o risco número um aqui. Cadeias de e-mail crescem sozinhas:
um “segue abaixo” traz seis mensagens antigas e três assinaturas. A documentação
oficial lista state grande cheio de detalhe irrelevante entre os nove modos de
falha declarados do jev-1.13 — o detalhe age como distrator e ainda esconde
qual parte da entrada gerou a resposta errada. Corte a cadeia antes de enviar; o
efeito está em context rot.
Datas e prazos. “O prazo citado vence esta semana?” é comparação de datas, e o modelo lê data como texto. Extraia a data com uma pergunta e compare no código, como faz a receita de extrair datas.
Conteúdo adversarial. Caixa pública recebe phishing, e phishing é texto
escrito para direcionar quem lê. A documentação avisa que o state não é
tratado como hostil por padrão. A defesa é arquitetural: nenhuma ação
irreversível — pagar, liberar acesso, responder com dado — deve depender de uma
única resposta do modelo.
Anexos. O jev-1.13 aceita texto apenas. Extraia o texto do PDF antes, ou
mande apenas o nome e o tipo do arquivo como campo do state.
A lista completa está em limites do Jev e os outros fluxos em casos de uso.
Perguntas frequentes
Regra de remetente e palavra-chave não resolve?
Resolve a parte fácil e falha nas bordas, que é onde o custo está. Regras determinísticas devem continuar: elas são baratas e auditáveis. O modelo entra no que sobra, que é o julgamento sobre o texto livre.
O que mandar no state de um e-mail?
Assunto, corpo limpo e os poucos campos estruturados que a decisão usa. Assinatura, aviso de confidencialidade e histórico de resposta encadeado são ruído: a documentação oficial lista state grande cheio de detalhe irrelevante entre os modos de falha declarados.
E os anexos?
O jev-1.13 aceita texto apenas: string, objeto JSON ou lista de textos, sem imagem, áudio ou vídeo, segundo a página oficial de modelos. Extraia o texto do anexo antes e mande como campo do state, ou mande só o nome e o tipo do arquivo.
Dá para responder o e-mail automaticamente?
Não com este modelo. Ele decide o destino e a prioridade; escrever a resposta é tarefa de um modelo generativo ou de uma pessoa. A documentação diz que o jev-1.13 não é treinado para gerar texto.
Quanto custa triar cinquenta mil e-mails por mês?
Com o perfil das nossas medições, 955 tokens de entrada por chamada, ao preço oficial de US$ 0,042 por milhão de tokens de entrada e com o dólar estimado em R$ 5,40, cinquenta mil e-mails saem por cerca de R$ 10,83 em chamadas.