Uma camada de decisão sem treinamento
A equipe de pesquisa aplicada da Nokia abriu o código do AnyJev, uma biblioteca Python que converte qualquer LLM aberto em um modelo de decisão calibrado — sem uma única etapa de fine-tuning. O objetivo é atender a uma demanda recorrente em produção: escolher uma resposta dentro de um conjunto fixo de opções, em vez de pedir que o modelo escreva uma frase livre.
O projeto já está disponível no PyPI sob licença Apache-2.0 e oferece backends para transformers e vLLM, com pontuação por prefixo compartilhado — o que acelera a inferência em lotes.
De onde vem a ideia
O AnyJev herda a interface do Jev, o modelo de “System One” que a TypeSafe AI lançou em setembro de 2026. A premissa é a mesma: você fornece uma pergunta tipada e recebe uma decisão acompanhada de uma probabilidade que pode ser usada como limiar. Essa probabilidade é lida diretamente da distribuição do próximo token do modelo — nada é gerado, interpretado ou treinado.
A biblioteca suporta três tipos de pergunta: choice (escolhe uma entre K opções), yes/no e score (posiciona a resposta em faixas ordenadas).
O problema de ler logits diretamente
Muitos projetos open source já restringem o próximo token aos rótulos das opções e leem os scores diretamente. A equipe da Nokia aponta duas falhas nesse atalho. A primeira é que a resposta pode mudar quando as opções são reordenadas. A segunda é que as probabilidades não são calibradas.
As causas documentadas são duas: viés de prior (o modelo favorece certos rótulos, como “Sim” em relação a “Não”, independentemente do input) e viés de posição (o modelo prefere determinadas posições na lista de opções).
Como o AnyJev corrige: níveis L0 e L1
Toda decisão carrega um campo de nível.
O nível L0 (zero rótulos, ativado por padrão) aplica duas correções. A primeira são deslocamentos cíclicos: para uma pergunta com K opções, a lista é exibida em K rotações, de modo que cada opção apareça em cada posição uma única vez; os resultados são combinados em espaço logarítmico por média geométrica. A segunda é a correção de prior, que mantém uma média móvel das distribuições previstas em entradas reais e a divide por um fator de 0,75, começando após 8 itens.
O nível L1 (de 100 a 500 rótulos por pergunta) adiciona escalonamento de temperatura sobre o L0 e salva os valores ajustados em um pequeno artefato JSON. O L1 remodela a confiança, mas não altera a ordem das respostas.
Resultados no benchmark
No Qwen3-8B com o dataset BANKING77 (20 classes, 300 itens de teste), o AnyJev reduziu a taxa de inversão de ordem de 0,230 para 0,073 no nível L0, e a acurácia subiu de 0,747 para 0,803 (L0) e 0,807 (L1). O erro de calibração (ECE) caiu de 0,240 para 0,095.
O dado mais relevante para produção é o tráfego “auto-decidível” com 5% de erro: ele salta de 7,7% para 52,0% com o L1 — ou seja, mais da metade das decisões podem ser tomadas automaticamente com risco controlado.
Como começar
O uso básico é direto:
pip install "anyjev[hf]"
from anyjev import Decider, Question
from anyjev.backends.hf import HFBackend
d = Decider(HFBackend("Qwen/Qwen3-8B"))
route = Question.choice(
"Qual time deve tratar isso?",
["billing", "technical", "sales", "other"],
name="route",
)
r = d.decide({"conversation": [...]}, [route])
r["route"].distribution # probabilidades por opção
Para servir em produção, basta iniciar o vLLM com cache de prefixo e apontar um VLLMBackend para ele.
Por que isso importa agora
À medida que empresas brasileiras colocam LLMs para classificar tickets, rotear chamados e triar leads, a calibração das probabilidades deixa de ser um detalhe acadêmico e vira requisito de confiabilidade. O AnyJev entrega esse ganho sem custo de treinamento — um atalho prático para quem já usa Qwen, OLMo, Granite, Phi ou Mistral e não quer (ou não pode) fazer fine-tuning de um modelo próprio.
Descubra mais sobre noticiAI
Assine para receber nossas notícias mais recentes por e-mail.



