Quando não usar o laya? Os limites de um motor de decisões que não gera texto

Quando não usar laya? Sempre que o produto final for linguagem. O laya é uma família de modelos de decisão de pesos abertos da Convai Innovations, sob Apache 2.0, que responde perguntas tipadas (choice, score e noul) em um único forward pass, sem nunca gerar texto. Isso descarta redação, resumo, extração de campos abertos e raciocínio em várias etapas. Também descarta uso zero-shot: os checkpoints base ficam em 0,362 e 0,352 no benchmark typed-decisions, abaixo do baseline de classe majoritária (0,461). Com fine-tuning, sobe para 0,766. Decisão repetida em volume? Cabe. Texto? Não cabe.
Todo mundo está publicando o que o laya faz
Quase ninguém está dizendo onde ele simplesmente não serve
E essa é a parte que salva projeto, porque escolher a ferramenta errada pra tarefa custa semana de trabalho jogada fora…
O laya é uma família de modelos de decisão de pesos abertos da Convai Innovations, publicada sob licença Apache 2.0, com três checkpoints (inglês, multilíngue e typed-decisions) no Hugging Face
Este post é sobre o outro lado da decisão: os cenários em que ele não é a resposta, e como tu descobre isso ANTES de instalar qualquer coisa
O que o laya é, de fato, antes de falar do que ele não é
A premissa técnica é bem específica, e é dela que saem todos os limites
O laya nunca gera texto
Ele responde perguntas tipadas sobre um estado (texto, e-mail, ticket ou JSON) em um único forward pass, sem amostrar tokens de saída. Sem geração, sem parsing de saída, sem aquela ginástica de arrancar JSON válido do meio de um parágrafo
Se você conhece a diferença entre um classificador e um chat, é mais ou menos por aí: o laya é da família dos que marcam uma opção, não dos que escrevem uma redação
Formação Claude Code
Domine Claude Code do absoluto zero até o avançado
- 120 aulas
- 4 projetos
- 9h 45min
As três primitivas de pergunta:
- choice: escolhe uma opção, com distribuição de probabilidade por opção
- score: posiciona o input em uma rubrica ordinal
- noul: devolve uma probabilidade calibrada de verdadeiro
É isso. Todo problema que tu jogar nele precisa caber em uma dessas três formas, ou não cabe
E a arquitetura?
O checkpoint principal em inglês usa o backbone ModernBERT-large (395M, totalmente ajustado, bidirecional) somado a uma cabeça de decisão treinada do zero, com 2 camadas transformer, um option marker scorer e uma cabeça act/escalate. Total: 421M de parâmetros
Contexto de 512 tokens, com head_max_len de 192
Já o laya-multilingual usa mmBERT-base, tem 322M de parâmetros, contexto de 1.024 tokens (head_max_len 256) e cobre mais de 100 idiomas
O checkpoint em inglês foi publicado em 18 de setembro de 2026 e a variante multilíngue no dia seguinte, 19 de setembro de 2026
Modelo novinho, então. Guarda essa informação pra calibrar expectativa 🙂
Os cinco cenários em que o laya não é a ferramenta certa
Agora a parte que interessa
Cada limite aqui vem direto da premissa de arquitetura, não é implicância
1. Qualquer tarefa que exige texto gerado
Parece óbvio, mas é o erro número um
O modelo não amostra tokens de saída. Ponto
Então redigir resposta de suporte, escrever commit message, gerar descrição de produto, montar e-mail: nada disso é trabalho pra ele. Não é que fica ruim, é que a operação não existe
O laya pode decidir QUAL template usar, mas quem escreve o texto do template é outra coisa
2. Extração livre de campos não enumerados
Tirar "o nome do fornecedor" de uma nota fiscal é extração aberta: a resposta é uma string que não estava numa lista de opções
Isso não vira choice (porque não tem opções pra escolher) e não vira score (porque não é rubrica ordinal)
Agora, "este documento é fatura, boleto ou contrato?" vira choice tranquilo
Sente a diferença? Enumerado cabe, aberto não cabe
3. Raciocínio em várias etapas
Um forward pass não tem cadeia intermediária
Não existe passo A que alimenta passo B dentro da mesma chamada. O modelo olha o estado e devolve a probabilidade, sem rascunho no meio do caminho
Dá pra encadear perguntas do lado de fora, no seu código, claro. Mas aí quem raciocina é a sua orquestração, não o modelo
Tome cuidado com isso: é fácil desenhar um fluxo que parece uma pergunta só e na verdade são três decisões empilhadas
4. Uso zero-shot
Esse aqui dói, e é o que mais gera frustração
Sem fine-tuning, os checkpoints base ficam perto do acaso no benchmark typed-decisions: 0,362 e 0,352, contra um baseline aleatório de 0,318 e um baseline de classe majoritária de 0,461
Leia de novo: chutar sempre a classe majoritária bate o modelo sem ajuste
O próprio README do projeto é honesto sobre isso e descreve o laya como "a fast base to specialise, not a zero-shot decision engine"
Ou seja: se você não tem dados rotulados pra especializar, você não tem projeto ainda
5. Taxonomias grandes
As opções de uma pergunta choice dividem um orçamento fixo de head_max_len (192 tokens no inglês, 256 no multilíngue)
Com 77 opções, sobram cerca de 3 a 4 tokens por rótulo
Tradução: seus rótulos viram sopa de letrinha e a qualidade cai junto
Classificação em 8 categorias? Beleza. Roteamento pra 200 filas de atendimento com nome comprido? Aí tu está forçando a barra
Seu problema cabe em choice, score ou noul? Tabela de triagem
Antes de instalar nada, faça essa triagem no papel
A coluna da acurácia mostra outra coisa importante: nem todas as primitivas entregam igual no benchmark typed-decisions (checkpoint com fine-tuning)
| Tipo de tarefa | Primitiva compatível | Acurácia da primitiva (typed-decisions) |
|---|---|---|
| Responder verdadeiro/falso calibrado | noul | 0,857 |
| Classificar em rótulo fechado | choice | 0,733 |
| Medir em rubrica ordinal (severidade, prioridade) | score | 0,723 |
| Redigir resposta ao cliente | não cabe | sem geração de texto |
| Resumir um ticket ou thread | não cabe | sem geração de texto |
| Extrair campos abertos (nome, valor, data em texto livre) | não cabe | não é enumerado nem ordinal |
| Decidir em etapas encadeadas dentro de uma chamada | não cabe | forward pass único, sem cadeia intermediária |
Repara no desenho da tabela: noul está quase 13 pontos acima de score
Então, se o seu problema pode ser reescrito como uma sequência de perguntas booleanas em vez de uma rubrica, talvez valha reescrever
Por workflow o benchmark também varia: faturas 0,804, incidentes de segurança 0,766, atendimento 0,764 e observabilidade de trace de agente 0,730
Sinais de que você está forçando o laya para fora do escopo
Tem quatro sintomas bem característicos. Se algum aparecer, o problema raramente é "o modelo é ruim"
Sintoma: resposta errada e MUITO confiante
Causa: o modelo sai da caixa superconfiante
Solução: refazer o ajuste de uma temperatura por par (tipo de pergunta, número de opções) em dados held-out. Isso move o ECE médio de 0,466 para 0,081 no laya e de 0,314 para 0,106 no laya-multilingual
Olha o tamanho da diferença. Calibração aqui não é detalhe cosmético, é o que faz a probabilidade significar alguma coisa
E probabilidade que significa alguma coisa é o que permite você montar um limite de confiança pra escalar a decisão quando o modelo não tem certeza
Sintoma: acurácia perto do acaso
Causa: uso zero-shot, o pecado capital
Solução: fine-tuning
O checkpoint ajustado atinge 0,766 de acurácia nas 2.000 decisões do benchmark typed-decisions, acima dos 0,727 publicados pelo TypeSafe Jev e acima do teto de auto-concordância do teacher, de 0,735
Sim, acima do teacher. É um número bonito, e é justamente o argumento de que o valor do laya mora no ajuste, não na caixa fechada
Sintoma: lista de rótulos degradando
Causa: orçamento de cabeçalho estourado, como descrito lá em cima
Solução possível no checkpoint multilíngue: elevar o orçamento em tempo de execução
agent.cfg["head_max_len"] = 512
O erro comum aqui é achar que isso resolve taxonomia infinita. Não resolve, só adia o problema. Rótulo curto e taxonomia enxuta continuam sendo a boa prática
Sintoma: latência absurda em troca de idioma
A issue #172 do repositório relata que o Router vem com max_loaded=1 por padrão, recarregando o checkpoint a cada troca de script
O número é feio: 21.000 ms contra 50 a 136 ms com max_loaded=2
E se liga: essa mesma issue relata ainda um segundo problema do Router, dessa vez de roteamento de idioma, que eu detalho logo abaixo
Se o seu tráfego mistura idiomas, isso vai te morder
Como prevenir tudo isso de uma vez
Mede antes de acreditar
Monta um conjunto próprio com decisões reais do seu fluxo, roda, compara com o baseline de classe majoritária e só depois decide se o laya entra em produção. Já vi gente pular essa etapa e descobrir na semana seguinte que um if resolvia o caso 😀
Idioma importa: o que as avaliações independentes mostram
Esse é um limite de escopo que quase ninguém comenta
O Router embutido é o ponto de entrada recomendado pelo projeto: ele detecta script e idioma e despacha pro checkpoint adequado. Ideia ótima na teoria
Na prática, tem relatos públicos que valem leitura
A issue #35 traz uma avaliação independente de roteamento de skills em romeno (escolher 1 entre 13 opções, 20 pedidos reais): o laya-multilingual acertou 10/20 (50%, cerca de 17 ms) e o laya-typed-decisions acertou 11/20 (55%, cerca de 31 ms), com reprodução do modo de falha de excesso de confiança
Já a issue #124 mediu roteamento de skills em chinês nos três checkpoints: multilingual 70%, typed-decisions 65% e inglês 60%, com respostas erradas e confiantes persistindo
E a issue #172, a mesma do max_loaded, relata que pedidos em espanhol e italiano são roteados pro modelo em inglês
São avaliações de terceiros, em cenários específicos, e nenhuma delas é o seu cenário. Mas o recado é claro: não assuma que "cobre mais de 100 idiomas" significa "funciona igual em todos eles"
Veredito: quando o laya vale e quando você deveria chamar um LLM
A regra de decisão, sem enrolação
Vale a pena quando o seu problema é decisão repetida, tipada, em volume, e você tem dados pra fazer fine-tuning
Aí a conta fecha bonito: latência de 39,5 ms por pergunta única no checkpoint inglês de 421M e 32,8 ms na variante multilíngue de 322M, medidas em uma GPU Tesla T4. Em lote de 50 perguntas, 337 ms no total no multilíngue, cerca de 6,8 ms por pergunta
E, por ser de pesos abertos sob Apache 2.0 rodando localmente, não tem cobrança por token de API
Não vale a pena quando o produto final é linguagem
Se o usuário vai LER a saída, você precisa de um gerador. Simples assim
Essa lógica de escolher a ferramenta pelo formato da saída, e não pelo hype, é a mesma que aparece na hora de decidir se um modelo mais barato entrega o mesmo numa tarefa qualquer
E existe o meio termo, claro: arquitetura híbrida, com o motor de decisão triando e o modelo generativo escrevendo só quando precisa. Faz todo sentido no papel, mas não vou te vender passo a passo de integração que eu não consegui confirmar nas fontes
Próximo passo: teste o limite antes de apostar
Bora fechar com ação concreta
- Mapeia suas decisões no papel, antes de instalar qualquer coisa. Pega os 10 pontos do seu fluxo onde algo é decidido e tenta escrever cada um como choice, score ou noul. O que não couber nas três, já está fora do escopo do laya e você economizou uma tarde
- Checa o Python. O projeto exige Python 3.10 ou superior, piso imposto pelas dependências (
huggingface_hub1.x,transformers5.x etorch2.14). O erro comum deste passo é rodar num ambiente antigo da máquina e culpar o pacote pelo erro de instalação - Instala via PyPI:
pip install laya
Os pesos são baixados do Hugging Face Hub no primeiro uso, então a primeira execução demora mais que as seguintes. Isso é normal, não é travamento
- Mede em um conjunto próprio, e já assume que sem fine-tuning o resultado vai ser fraco. Compara sempre contra o baseline de classe majoritária, senão o número isolado não diz nada
- Lê o repositório antes de decidir. O código vive em github.com/NandhaKishorM/laya, construído por Nandakishor M, da Convai Innovations, e é lá que as issues que citei acima estão abertas pra qualquer um acompanhar
No fim, saber quando não usar o laya é mais valioso que saber usar
Ferramenta especializada é assim mesmo: brilha num recorte estreito e quebra feio fora dele
Até o próximo post! 😀
Perguntas frequentes
Dá pra usar o laya sem fazer fine-tuning antes, direto do jeito que ele vem?
Não é recomendado. Sem ajuste, os checkpoints base ficam perto do acaso no benchmark typed-decisions (0,362 e 0,352), abaixo até do baseline de classe majoritária, que fica em 0,461. O próprio README do projeto avisa que o laya é uma base rápida pra especializar, não um motor de decisão zero-shot.
Consigo usar o laya pra puxar o nome do fornecedor de uma nota fiscal em texto livre?
Não, porque essa é uma extração aberta, e o laya só trabalha com três primitivas fechadas: choice, score e noul. Se a resposta não é uma opção enumerada nem uma rubrica ordinal, não tem como transformar isso numa pergunta do laya. O que dá pra fazer é classificar o tipo de documento (fatura, boleto, contrato), que aí sim vira choice.
Quantas opções cabem numa pergunta choice antes da qualidade cair?
As opções dividem um orçamento fixo de head_max_len, que é 192 tokens no checkpoint em inglês e 256 no multilíngue. Com 77 opções, sobram só uns 3 a 4 tokens por rótulo, o que degrada bastante a resposta. Classificação em 8 categorias funciona bem, roteamento pra centenas de filas com nome comprido já é forçar a barra.
O laya funciona bem pra decidir em idiomas fora do inglês e do que já vem treinado?
Tem limite conhecido aí. A issue #172 relata dois problemas no mesmo Router: o recarregamento de checkpoint a cada troca de script e pedidos em espanhol e italiano caindo no modelo em inglês. Já as avaliações independentes das issues #35 e #124, citadas no post, mediram 50% e 55% de acerto em romeno e 70%, 65% e 60% em chinês nos três checkpoints, com respostas erradas e confiantes persistindo.
Dá pra aumentar o limite de tokens do head_max_len se minha lista de opções for grande?
Sim, no checkpoint multilíngue dá pra elevar esse orçamento em tempo de execução com agent.cfg["head_max_len"] = 512. Isso ajuda quando os rótulos estão espremidos demais, mas não resolve o problema de fundo se a taxonomia for gigante mesmo assim.
O laya cobra por token de API como os modelos fechados?
Não. É pesos abertos sob Apache 2.0, publicado pela Convai Innovations no Hugging Face, e roda local depois de baixado. Sem cobrança por token, o custo que sobra é o de infraestrutura pra rodar o modelo.
Formações
Formação Vibe Coding
Do Prompt ao Produto: Crie Software Real com IA
- 474 aulas
- 20 projetos
- 39h 27min
Blog | Mais populares

Como fazer triagem de tickets de suporte com o laya: urgência, frustração e departamento
Triagem de tickets com laya: urgência, frustração e departamento em um forward pass, sem JSON. Veja instalação, código e a ressalva do zero-shot.

Choice, score e noul: quais são os tipos de pergunta do Laya e quando usar cada um?
Entenda os tipos de pergunta do Laya: choice, score e noul. Como cada um funciona, a acurácia de cada primitiva e quando usar em cada situação.

Como usar o laya para detectar phishing, spam e risco de churn em texto, email e ticket?
Veja como o laya detecta phishing, spam e risco de churn em texto, email e ticket com scores calibrados, rodando local via pip install.
