Sim-não, escolha e nível chegam para uma linguagem?
Noul, Choice e Score são uma linguagem para código. Este texto usa um relatório de despesas para mostrar como as três perguntas se separam, e quando a linguagem não chega.
Coautor: folkbench.com (Folkbench é uma plataforma de avaliação e seleção que se pode rever, para APIs de IA, serviços de modelos e sites relacionados. Apoia-se em informação publicada sobre o serviço, preços, disponibilidade, latência e janelas de evidência para ajudar os utilizadores a comparar e a escolher um caminho.)
Dez textos nesta série:
- JEV - Uma articulação não precisa de um cérebro
- JEV - Porque é que um Jev que não conversa serve um Agent
- JEV - Até onde chega, afinal, «não pode alucinar»
- JEV - Sim-não, escolha e nível chegam para uma linguagem?
- JEV - Um laboratório conseguiria construir isto. Porque é que ainda pode não o fazer.
- JEV - As duas demos que eu fiz
- JEV - As pessoas recuam do meio do ciclo para a margem
- JEV - Passada essa linha, eu já não distingo quem é mais inteligente
- JEV - Algumas perguntas não lhe pertencem
- JEV - Um modelo reduzido ao essencial, uma suite e um que não fala
Se esta linguagem chega depende do que você quer que ela diga. Três perguntas fechadas compram velocidade, e compram composabilidade. O custo é que tudo o que precisa de ser desdobrado, ela não o sabe dizer. Esta é uma linguagem para código. Não é para uma pessoa ler.
A documentação e o sítio da avaliação dividem-na da mesma maneira: Noul, Choice e Score. Não há um quarto tipo na página.
Os três tipos na documentação
Noul só pergunta sim ou não. Devolve uma probabilidade. Na documentação esse número vai de 0 a 1. Perto de 1, é um sim com confiança. Perto de 0, é um não com confiança. Se para perto de 0.5, isso só quer dizer que os dois lados são igualmente possíveis. Não quer dizer «um grau médio». A documentação nomeia esta armadilha: pergunte se alguém é forte em Python, e 0.5 não é um nível médio. Se você quer mesmo medir o nível, mude para Score e escreva o aspeto de cada nível. Noul também não junta uma confiança à parte. A probabilidade é o sinal.
Choice escolhe um item de um conjunto que já foi fixado. O que é devolvido é o item escolhido, mais a distribuição inteira e uma confiança. A confiança olha para se a distribuição é aguda. Se a probabilidade está espalhada, a confiança é baixa, e o código sabe que esta pergunta está instável. O teto de cardinalidade desta pergunta no Jev é 255. Acima disso, o Jev toma duas etapas. Duas etapas quer dizer pontuar primeiro de forma independente, e depois fazer uma escolha explícita. Às vezes é um pouco mais lento. A lentidão é o passo extra, não a mesma pergunta estreita a ficar de repente cara.
Score é níveis numa escala. No uso, é uma escala ordenada de 2 a 10 níveis. A documentação diz pelo menos dois níveis, e a interface aceita no máximo dez. Um nível tem de ser escrito como uma situação que se possa fazer corresponder. Escreva só «um pouco alto» ou «está bem», e o modelo não tem nada a que corresponder. A pontuação pode cair entre dois níveis. Esse número é a soma da posição de cada nível multiplicada pela sua probabilidade. Um decimal entre dois níveis é normal. Não é um cálculo partido. Devolve a pontuação, e ao mesmo tempo a distribuição sobre os níveis e uma confiança. A mesma pontuação pode ser tudo carregado no nível do meio, ou uma divisão entre as duas pontas. Olhe só para a pontuação, e você vai tratar essas situações como a mesma coisa. Leia a distribuição e a confiança em conjunto.
Nenhuma das três respostas pode sair das células que você deu de antemão. Perguntas sobre o mesmo material são independentes umas das outras. Acrescente uma ou tire uma, e as outras perguntas não mudam. Se um juízo depende de várias coisas em conjunto, pergunte-as à parte e deixe os pesos no código. Mais tarde, quando você ajusta a política, muda estes números. Você não reescreve um prompt inteiro.
Um relatório de despesas, desmontado
A página oficial da avaliação usa um relatório de despesas como brinquedo. À esquerda está um parágrafo que uma pessoa escreveu, o género de política que uma equipa poria por escrito. Cada relatório tem de trazer um recibo. Se o recibo não se consegue ler, peça ao empregado outro. Depois veja se a despesa é uma refeição, uma viagem, ou equipamento. Se uma refeição passa de $75 e a descrição não bate com o recibo, um gestor tem de assinar. Os outros relatórios tratam-se como aprovados.
À direita, o mesmo parágrafo está dividido num fluxo. Cada frase de política é uma pergunta, ou uma regra de código. Se o recibo se consegue ler é um sim-não. Se não se consegue, o código pede um novo, e esse passo não volta a perguntar ao modelo. A categoria usa uma escolha única, e as opções são refeição, viagem ou equipamento. Se o montante passa de $75, o código compara por si. Só a meia frase sobre a descrição não bater com o recibo precisa que se volte a perguntar ao modelo. Juntamente com o montante, isso decide se um gestor assina. Os relatórios que não precisam da assinatura de um gestor, o código trata-os como aprovados. O modelo não escreve aqui um comentário.
A direção na página da avaliação é uma frase: a estrutura é sempre melhor do que um prompt grande. Na média dos quatro fluxos de exemplo, cada modelo no workflow tem exatidão mais alta do que a política inteira como um só prompt, e a despesa e o tempo são mais baixos. O lado do prompt entrega a política inteira e deixa o modelo percorrer a lógica dentro de uma resposta. O lado do workflow dá ao código tudo o que se pode escrever como regra, e deixa só os juízos estreitos como perguntas.
O fluxo real mais estável normalmente não é uma pergunta grande. São muitas perguntas estreitas, independentes umas das outras. O comportamento depende da probabilidade, não só de um rótulo discreto. A categoria pode parecer assente enquanto as outras opções ainda guardam uma parte da probabilidade. O código pode dar mais um passo no limiar que você escreveu, sem deitar fora a distribuição. Fora do fluxo, continua a ser um ramo. A camada do meio é engenharia de domínio. Que pergunta fica por usar desta vez, e que número conta como passar a linha, tem de ser escrito para este negócio, e corrido da mesma maneira todas as vezes. Quando as respostas às perguntas estreitas estão no código, os pesos e os limiares fixam-se nesta camada.
Depois de se abandonar a geração de strings
O Jev abandona a geração de strings e recebe em troca amostragem em paralelo. As perguntas de um pedido calculam-se em conjunto. Todas as saídas saem de uma vez. Não token a token. Um modelo de chat tem de crescer um token atrás do outro, cada um a olhar para o anterior. Aqui não há um passo letra a letra. Acrescente umas poucas perguntas estreitas comuns, e o tempo quase não sobe com elas. O custo extra é sobretudo os tokens da própria pergunta.
O preço oficial não é o preço da interface de chat. A entrada é $0.042 por milhão de tokens. A saída é GRÁTIS. Sem uma longa sequência de palavras geradas e cobradas ao token, a saída não se cobra. A latência cai em 70–500 milissegundos. Esse intervalo é para uma cadeia de chamadas, não para a espera dentro de uma caixa de chat.
O valor devolvido vai direto ao código. A probabilidade do Noul pode entrar num if. O encaminhamento usa o rótulo do Choice. Um limiar de pontuação usa a posição do Score. Sem analisar primeiro. Se um modelo de chat devolve um pedaço de Markdown, você tem de partir primeiro as palavras, e uma frase a mais pode entortar o formato de modo que o resto não se consiga ligar. As três perguntas não devolvem esse texto, porque o Jev não o gera.
Explicar porque este relatório foi rejeitado não cabe nas três perguntas, e também não cabem um pedido de desculpa e uma negociação. Uma razão escrita para uma pessoa ler também não está no valor devolvido. Isso vai para um modelo que sabe falar. O Jev para no juízo.
Quando não chega, os casos são concretos. Se as opções são nomes num mundo aberto, nomes de empresas e nomes de produtos continuam a aparecer, e o conjunto não se pode fixar de antemão. 255 é um teto de cardinalidade, não uma lista infinita. Quando uma razão tem de citar uma frase da fonte, não há tal frase para entregar. Quando um utilizador espera uma frase humana, a interface quer palavras legíveis. Forçar o Jev nesse momento é tratar uma articulação como uma boca.
Quando a política se pode fechar em sim-não, escolha única e níveis, o que se segue é um ramo, e o juízo volta a montar-se no mesmo código. Se o que você quer é velocidade, e este género de composabilidade, chega. O que precisa de ser desdobrado, não o sabe dizer. Velocidade e composabilidade são o que essa troca compra.
Fontes
- https://typesafe.ai/blog/introducing-system-one-models-and-jev
- https://evals.typesafe.ai/
- https://docs.typesafe.ai/primitives