//Caso de uso

Triagem de caixa de entrada corporativa

Caixas compartilhadas como contato@ e financeiro@ morrem do mesmo jeito: alguém precisa ler tudo para saber o que é de quem.

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.

Quer dominar decisões com IA em português? O curso da comunidade está em pré-venda.

Garantir pré-venda por R$ 499,00

Pré-venda: R$ 499,00 · Após o lançamento: R$ 799,00