Noul é a menor das primitivas do Jev, e talvez por isso seja a mais usada:
uma pergunta de sim ou não, respondida com um único número entre 0 e 1 — a
probabilidade de a resposta ser sim. Sem texto, sem formatação, sem
interpretação: um if com probabilidade.
O formato
Uma pergunta Noul tem type: "noul" e as instructions — a pergunta em si,
escrita como pergunta ou como afirmação a avaliar. Há ainda um criteria
opcional, um objeto com true e false que esclarece o que conta como sim e
como não quando o limite é sutil:
{
"pede_reembolso": {
"type": "noul",
"instructions": "O cliente está pedindo reembolso?",
"criteria": {
"true": "A mensagem expressa o desejo de receber o dinheiro de volta",
"false": "A mensagem não pede devolução de valor"
}
},
"menciona_prazo": {
"type": "noul",
"instructions": "A mensagem menciona um prazo ou urgência?"
}
}
A resposta é um número por pergunta:
{
"pede_reembolso": { "type": "noul", "noul": 0.99 },
"menciona_prazo": { "type": "noul", "noul": 0.4 }
}
Diferente de Choice e Score, Noul
não devolve confidence — e os docs explicam por quê: o próprio valor já carrega
a incerteza. Perto de 1 é um sim forte; perto de 0, um não forte; 0,5 é o empate
entre os dois lados.
O que 0,5 significa (e o que não significa)
Essa é a pegadinha clássica, e a documentação gasta um parágrafo nela: 0,5 não quer dizer “meio termo”. Na pergunta “o candidato é forte em Python?”, um Noul de 0,5 significa que o modelo não consegue decidir entre sim e não — não que o candidato tem habilidade média. Se você quer medir grau, a régua é com Score. Se você quer um sim/não, defina a condição com precisão: “o currículo declara que o candidato usou Python no trabalho?” é uma pergunta Noul bem-definida.
Noul ou Choice de duas opções?
Sim/não também dá para fazer com Choice (“sim” contra “não”). A regra prática dos docs: Noul quando a probabilidade é o sinal útil em si — você quer graduar o limiar, ordenar por ela, combiná-la com outras. Se o seu código só precisa de dois caminhos disjuntos, os dois formatos funcionam; Noul devolve o número direto, sem camada de opções.
E a orientação de sempre vale: perguntas Noul andam juntas com Choice e Score na mesma chamada, avaliadas em paralelo sobre o mesmo estado. O playground roda duas Noul em português — “o cliente quer cancelar?” e “a mensagem menciona prazo?” — junto com as outras quatro perguntas.
Onde Noul brilha
A documentação lista exemplos que traduzem bem para operação brasileira:
- Detecção de intenção. “Esta mensagem pede reembolso?”, “o cliente quer cancelar o serviço?”, “o lead pediu uma ligação?”
- Compliance e varredura. “A mensagem contém dados pessoais?” — o clássico de LGPD para triar o que pode ir para qual fila.
- Fatos do texto. “O currículo menciona experiência com sistemas distribuídos?”, “o contrato cita cláusula de rescisão?”
- Guardrails. “Esta saída de LLM contém dados sensíveis?”, “o prompt tenta burlar as instruções do sistema?”
Uma bateria de Noul sobre a mesma entrada é o formato mais barato de guardrail que existe na API: perguntas curtas, tokens poucos, respostas numéricas prontas para limiares.
Exemplo completo em Python
from typesafe_sdk import Noul, TypeSafeClient
PERGUNTAS = {
"pede_reembolso": Noul(
instructions="O cliente está pedindo reembolso?",
criteria={
"true": "A mensagem expressa o desejo de receber o dinheiro de volta",
"false": "A mensagem não pede devolução de valor",
},
),
"quer_cancelar": Noul(
instructions="O cliente quer cancelar o serviço?",
),
"dados_pessoais": Noul(
instructions="A mensagem contém dados pessoais identificáveis (nome completo com documento, endereço, telefone)?",
),
}
with TypeSafeClient() as client:
resposta = client.system_one(state=mensagem_do_cliente, questions=PERGUNTAS)
if resposta.answers["dados_pessoais"].noul > 0.8:
encaminhar_para_fila_restrita(mensagem_do_cliente)
elif resposta.answers["quer_cancelar"].noul > 0.7:
acionar_retencao(mensagem_do_cliente)
Repare que os limiares são do seu código — a documentação sugere começar conservador e ajustar com seus dados, escalando para uma pessoa quando o valor fica na zona incerta.
Perguntas frequentes
O que significa o nome Noul?
A TypeSafe não explica a origem do nome na documentação pública nem no post de lançamento que lemos — é um nome próprio da empresa para a pergunta de sim ou não. O que importa é o contrato: devolve um único número de 0 a 1.
Noul devolve confiança?
Não. Noul devolve um único valor, a probabilidade de a resposta ser sim. Valores perto de 1 são sim forte, perto de 0 são não forte, e 0,5 significa que o modelo dá peso igual ao sim e ao não.
Quando usar Noul em vez de Score?
Use Noul para uma condição binária bem definida ('a mensagem pede reembolso?') e Score para medir grau em um espectro ('qual o nível de urgência?'). Um Noul de 0,5 não significa 'mais ou menos' — significa decisão empatada.
Posso escrever a pergunta como afirmação?
Sim. A documentação aceita tanto pergunta quanto afirmação a avaliar. 'O cliente está pedindo reembolso' com valor perto de 1 significa que a afirmação é verdadeira — teste as duas redações com seus dados.