O Jev não adivinha a sua intenção: ele responde a pergunta escrita. A
documentação lista “leitura literal” como o primeiro dos modos de falha
conhecidos do jev-1.13, e isso significa que a maior parte do seu trabalho de
qualidade acontece em dois campos de texto: instructions e criteria.
Esta página reúne o que a documentação oficial demonstra sobre esses dois campos, com os números que ela publicou, mais o que aprendemos escrevendo critérios em português.
O que o modelo recebe
Três fatos que mudam como você escreve:
- O identificador da pergunta não é enviado. Chamar a pergunta de
pediu_estornonão ajuda o modelo em nada. A pergunta completa precisa estar nasinstructions. - Nomes de opção e descrições são enviados. Em um
Choice, o modelo vê
cobrancae vê o texto que explica o que é cobrança. Os dois carregam sentido. - Cada nível de um Score é julgado por si. O modelo não vê o número do nível nem os vizinhos. Escrever “pior que o nível anterior” não significa nada para ele.
O terceiro ponto tem demonstração publicada. Para um relato de botão desalinhado
por poucos pixels, com níveis descritos apenas como 0, 1 e 2, a resposta
saiu nota 0,57 com confiança 0,35, espalhada entre dois níveis. O mesmo relato,
com os três níveis descritos por situação, saiu nota 0,00 com confiança 1,00.
Números na descrição não ajudam; situações ajudam.
Descreva situações, não graus
“Moderadamente grave” não dá ao modelo nada com que comparar o texto. “Funcionalidade quebrada, mas existe contorno” dá.
A regra vale para qualquer primitiva. Compare:
{
"gravidade_ruim": {
"type": "score",
"instructions": "Qual a gravidade do problema, de baixa a alta?",
"criteria": ["Baixa", "Média", "Alta"]
},
"gravidade_boa": {
"type": "score",
"instructions": "Qual a gravidade do problema relatado?",
"criteria": [
"Cosmético; não afeta o funcionamento",
"Funcionalidade degradada, mas existe contorno",
"Bloqueio; não existe contorno"
]
}
}
A segunda versão não é mais bonita: ela é respondível. Um texto pode ser comparado com “existe contorno”. Não pode ser comparado com “média”.
Separe o que se confunde
Quando duas opções vivem brigando, o problema quase nunca é o modelo: é que as descrições não dizem onde uma termina e a outra começa. A técnica recomendada é descrever a fronteira dos dois lados.
{
"assunto": {
"type": "choice",
"instructions": "Qual é o assunto principal da mensagem?",
"criteria": {
"politica_de_estorno": {
"cobre": "Perguntas sobre as regras: prazo, condições, quem tem direito",
"nao_cobre": "Um pedido concreto de estorno já em andamento",
"exemplos": ["Em quantos dias posso pedir estorno?", "Compra no débito dá direito a estorno?"]
},
"status_de_estorno": {
"cobre": "Perguntas sobre um estorno específico já solicitado",
"nao_cobre": "Dúvidas gerais sobre a regra",
"exemplos": ["Meu estorno do pedido A-104 saiu?", "Faz dez dias e o dinheiro não voltou"]
},
"outro": "Nenhum dos assuntos anteriores"
}
}
}
A documentação autoriza essa estrutura de forma explícita: instructions, as
descrições de opção de Choice, as descrições de nível de Score e os campos true
e false de um Noul aceitam string, objeto, lista ou null. Os nomes dos campos
internos são seus — cobre, nao_cobre, exemplos não são palavras reservadas,
são rótulos que você escolhe para organizar o sentido.
E vale o contrário também: quando o nome da opção já basta, null é uma resposta
honesta. {"calmo": null, "frustrado": null, "irritado": null} está correto.
Exemplos ajudam quando parecem com os seus dados
A documentação publica uma comparação que vale guardar. Sobre um relato de falha de exportação que funciona em outro navegador:
| Descrição dos níveis | Nota | Confiança |
|---|---|---|
| Texto simples, sem exemplos | 1,30 | 0,54 |
| Com exemplo pertinente (“falha em um navegador e funciona em outro”) | 1,07 | 0,90 |
| Com exemplo sem relação (“busca falha, navegar por categorias funciona”) | 1,28 | 0,57 |
Duas leituras. A primeira: exemplo que se parece com a sua entrada real concentra a probabilidade e melhora a separação. A segunda, que a própria documentação faz questão de registrar: confiança maior não prova que a resposta está correta. Escolha exemplos cujo nível esperado você conhece e teste em casos separados antes de manter a mudança.
Alinhe instrução e critério
O sétimo modo de falha declarado da versão é justamente instrução e critério
pedindo coisas diferentes. O caso extremo que a documentação cita: um Noul em que
true significa “não” e false significa “sim” vai ter desempenho pior. Trate o
critério como extensão da instrução, escrita na mesma direção, com a mesma
linguagem.
Um teste caseiro que funciona: leia a instrução e os critérios em voz alta para alguém que não conhece o sistema. Se a pessoa hesita, o modelo também vai. A documentação usa uma versão disso: quando você olha uma resposta errada e se pega explicando o que realmente queria dizer, essa explicação é a metade que faltou na instrução.
Uma dimensão por pergunta
Se o critério mistura assuntos — “pontual e inteligente e experiente” —, a pergunta mede três coisas e nenhuma entrada consegue ser colocada. A confiança cai, e a nota passa a significar pouco. Separe em uma pergunta por dimensão e combine no seu código, normalizando cada nota pelo número do nível mais alto antes de aplicar pesos.
Outro detalhe do mesmo tipo: quando existe um caso extremo raro que exige ação diferente, ele merece nível próprio. Uma régua de irritação que termina em “muito irritado” não distingue o cliente irritado do cliente abusivo; acrescentar “conteúdo abusivo ou ameaçador” resolve, porque a ação do sistema é outra.
Em português, escreva em português
Nos nossos cinco testes de 18 de setembro de 2026, com critérios escritos em português, o caso de regionalismo nordestino (“oxe”, “num abre”) foi classificado como dúvida técnica com probabilidade 1,00 e confiança 1,00. Já a ironia — elogio literal com sentido oposto — derrubou a categoria para “outro”. A lição prática: critérios em português funcionam, e o lugar onde o desenho precisa de cuidado é onde a língua carrega sentido implícito.
Como a TypeSafe declara que o inglês é a língua principal de treino, teste no seu próprio conteúdo antes de automatizar. E se a dúvida for qual tipo de pergunta usar, comece por qual primitiva usar. Os limites que explicam boa parte dessas recomendações estão em os limites do jev-1.13.
Perguntas frequentes
O modelo vê o nome da opção ou só a descrição?
Vê os dois. Segundo a documentação, os nomes das opções e as descrições são enviados ao modelo, e é por isso que descrições que separam bem as opções mudam o resultado. O identificador da pergunta, ao contrário, não é enviado.
Posso deixar a descrição de uma opção vazia?
Pode: a documentação aceita null quando o nome da opção já basta, como em calmo, frustrado e irritado. Use texto quando duas opções puderem se confundir.
Numerar os níveis de um Score ajuda?
Não. A documentação mostra o mesmo relato recebendo nota 0,57 com confiança 0,35 quando os níveis eram só 0, 1 e 2, e nota 0,00 com confiança 1,00 com níveis descritos por situação. O modelo recebe as descrições e nada mais.
Quando vale usar objeto JSON no criteria?
Quando a fronteira entre duas opções é sutil e você precisa dizer o que a opção cobre, o que pertence à vizinha e alguns exemplos. A documentação aceita string, objeto, lista ou null em instructions e nas descrições de opção, nível e Noul.
Exemplos dentro do critério sempre melhoram?
Não. Na comparação publicada pela documentação, um exemplo pertinente levou a nota de 1,30 para 1,07 com confiança de 0,54 para 0,90; um exemplo sem relação com o caso quase não mudou nada (1,28 e 0,57). E confiança maior não prova acerto.