//Caso de uso

Análise de avaliações de produto em escala

Amostragem de avaliações existia porque leitura humana é cara. Quando a leitura custa frações de centavo, a amostra perde a razão de ser.

Quase toda empresa com produto no varejo digital tem o mesmo relatório mensal: alguém lê duzentas avaliações de um total de vinte mil, monta uma lista de reclamações mais comuns e apresenta. O relatório está certo dentro da amostra e erra exatamente onde importa — nos problemas raros e graves, que aparecem pouco e custam caro.

A amostragem não era preguiça: era orçamento. Leitura humana é cara. Quando a leitura de uma avaliação passa a custar frações de centavo, a pergunta muda de “qual amostra?” para “por que amostrar?”.

O Jev é o modelo da TypeSafe AI que recebe um texto e devolve decisões tipadas — uma opção, uma nota, um sim ou não — com a probabilidade de cada uma. Para avaliações, isso significa transformar texto solto em colunas de banco.

O desenho das perguntas

Uma chamada por avaliação, com o texto e o mínimo de contexto do pedido.

{
  "state": {
    "nota_estrelas": 2,
    "texto": "O produto em si é bom, mas chegou com a caixa amassada e faltando o carregador. Já é a segunda vez que compro e vem incompleto. Pedi troca e ninguém responde.",
    "categoria_do_produto": "eletroportátil",
    "dias_desde_a_entrega": 9
  },
  "questions": {
    "tema": {
      "type": "choice",
      "instructions": "Qual é o assunto principal da reclamação ou do elogio?",
      "criteria": {
        "qualidade_do_produto": "Defeito, durabilidade, desempenho ou acabamento do produto.",
        "entrega": "Prazo, embalagem, extravio, item faltando ou transportadora.",
        "atendimento": "Resposta, troca, garantia ou falta de retorno da empresa.",
        "preco": "Valor, promoção, frete ou cobrança.",
        "elogio_geral": "Elogio sem apontar problema.",
        "outro": "Não se encaixa em nenhum dos temas acima."
      }
    },
    "severidade": {
      "type": "score",
      "instructions": "Qual a gravidade do problema relatado para o cliente?",
      "criteria": [
        "Nenhum problema relatado.",
        "Incômodo pequeno; o cliente seguiu usando.",
        "Problema relevante; exigiu esforço do cliente.",
        "Problema grave; produto inutilizável, risco ou prejuízo."
      ]
    },
    "risco_de_reputacao": {
      "type": "score",
      "instructions": "Quanto este texto tende a afastar outros compradores se ficar visível?",
      "criteria": [
        "Neutro ou positivo.",
        "Reclamação comum, sem detalhe marcante.",
        "Relato detalhado e convincente de um problema.",
        "Relato de risco à segurança, fraude ou descaso grave."
      ]
    },
    "pede_providencia": {
      "type": "noul",
      "instructions": "O cliente pede troca, estorno, garantia ou alguma providência da empresa?"
    },
    "menciona_risco_a_saude": {
      "type": "noul",
      "instructions": "O texto menciona risco à saúde, ferimento, choque, queimadura ou incêndio?"
    }
  }
}

Repare que dias_desde_a_entrega é um número calculado no seu banco, não uma data que o modelo teria de interpretar. Essa separação é deliberada, e o motivo está na seção de limites, mais abaixo.

O que o código faz com a resposta

Piso de confiança primeiro. Avaliações curtas — “não gostei” — não sustentam classificação. Confiança baixa manda a avaliação para a pilha de revisão ou simplesmente para a categoria “sem sinal”, que é uma resposta honesta.

Regras determinísticas depois. menciona_risco_a_saude acima do corte dispara alerta imediato para o time de qualidade, sem passar por nota nenhuma. É política, não julgamento ponderado. pede_providencia abre um caso no atendimento.

Combinação por último. Severidade e risco de reputação definem a ordem da fila de resposta pública.

t = r.answers["tema"]

if r.answers["menciona_risco_a_saude"].noul > 0.5:
    alerta_qualidade(avaliacao)          # corte baixo: falso positivo é barato

if t.confidence < PISO:
    return marcar(avaliacao, tema="sem_sinal")

if r.answers["pede_providencia"].noul > 0.7:
    abrir_caso_atendimento(avaliacao)

prioridade = 0.6 * (r.answers["severidade"].score / 3) \
           + 0.4 * (r.answers["risco_de_reputacao"].score / 3)
gravar(avaliacao, tema=t.choice, prioridade=prioridade,
       distribuicao=t.probabilities)

O corte de 0,5 para risco à saúde é intencionalmente mais baixo que os outros. Limiar acompanha o risco da ação: um falso positivo custa a leitura de um analista; um falso negativo custa um recall que ninguém fez. Esse raciocínio está em roteamento por confiança.

Onde entra a pessoa

Em dois lugares. No alerta de segurança, sempre — nenhuma ação de recall ou de notificação deve sair automática. E na revisão periódica da pilha outro: ela é o melhor indicador de que a sua lista de temas envelheceu. Quando 8% das avaliações caem em outro, existe um tema novo no mercado que você ainda não nomeou.

Um terceiro uso, mais silencioso, é a auditoria: guardar a distribuição inteira, e não só o tema escolhido, permite reprocessar o histórico quando você mudar um limiar, sem chamar a API de novo.

Custo

Assumindo cem mil avaliações por mês — suposição deste artigo — com 955 tokens de entrada por chamada, o perfil das nossas medições: 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 avaliação sai por cerca de R$ 0,00022 e o mês inteiro por cerca de R$ 21,66. A fórmula e as ressalvas estão em quanto custa uma decisão.

O ganho não é o dinheiro poupado: é trocar uma amostra de 1% por 100% do volume, o que muda a natureza do relatório.

Onde isso quebra

Contagem. “Quantas avaliações reclamam de entrega este mês?” é uma pergunta para o seu banco, não para o modelo. A documentação oficial diz que o jev-1.13 não conta de forma confiável e que o erro cresce com o tamanho da lista. Pergunte uma avaliação por vez e some no código.

Comparação de datas. “Esta reclamação é anterior à mudança de transportadora?” também é código. O modelo lê data como texto, não como quantidade ordenada.

Nota de estrelas não é resumo do texto. Avaliações de 1 estrela com texto elogioso e o contrário existem em qualquer base. Deixe a estrela no state como contexto, mas não a use para validar a resposta do modelo — são dois sinais diferentes, e a divergência entre eles costuma ser informação.

Ironia e exagero. O português informal de avaliação é cheio de hipérbole (“pior compra da minha vida” sobre um atraso de um dia). No nosso teste em português, de 18 de setembro de 2026, o modelo leu ironia corretamente no sentimento mas ficou incerto na categoria. Essa combinação é o caso de usar a confiança, não de ignorá-la.

A lista completa dos nove modos de falha declarados está em limites do Jev, e os cinco casos em português estão em o Jev funciona em português. O índice desta família fica em casos de uso.

Perguntas frequentes

Por que não usar análise de sentimento comum?

Porque sentimento sozinho não diz o que fazer. Uma avaliação negativa sobre entrega e outra sobre defeito de fabricação exigem times diferentes. O desenho útil junta o tema, a severidade e a intenção na mesma chamada, e deixa o agrupamento para o seu código.

O modelo entende ironia em avaliação em português?

No nosso teste de 18/09/2026, um texto irônico em português do Brasil recebeu sentimento negativo com 98% — a ironia passou. Mas a categoria caiu em 'Outro' com confiança 0,72, ou seja, o enquadramento ficou incerto. Foram cinco chamadas, não um benchmark.

Dá para descobrir temas que eu não listei?

Não diretamente. O Choice escolhe entre as opções que você escreveu, e o modelo não gera categorias novas. O caminho é manter uma opção de escape e revisar periodicamente o que caiu nela: essa pilha é a sua lista de temas faltando.

Como faço o ranking de problemas por mês?

No seu código, agregando as respostas. O modelo avalia uma avaliação por vez; contagem, média e série temporal são aritmética, e a documentação oficial recomenda manter aritmética fora do modelo.

Quanto custa avaliar cem mil avaliações?

Com o perfil das nossas medições, 955 tokens de entrada por chamada, o preço oficial de US$ 0,042 por milhão de tokens de entrada e o dólar estimado em R$ 5,40, cem mil avaliações saem por cerca de R$ 21,66 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