A glass wall covered in sticky notes in backlight — defining acceptance criteria

Critérios de aceitação de uma funcionalidade de IA

Quando se especifica uma funcionalidade com uma componente de IA, o critério de aceitação deixa de ser «dado X o sistema devolve Y». O critério de aceitação passa a ser uma eval: um conjunto de dados etiquetado, uma função de pontuação e uma pontuação-alvo que o sistema tem de atingir antes do lançamento e novamente após cada troca de modelo ou alteração de prompt. A regra simples: se não conseguir escrever a eval, a funcionalidade ainda não está especificada. Este artigo decompõe as quatro componentes de um critério de aceitação probabilístico e explica como escrevê-las na prática.

O que se parte exatamente numa especificação tradicional

Uma especificação clássica assenta num pressuposto: a mesma entrada produz sempre a mesma saída. Toda a estrutura de testes, definições e condições de saída decorre daí. No momento em que uma componente do sistema é um modelo de linguagem, esse pressuposto desmorona-se, e com ele desmorona-se todo o instrumental construído por cima.

A expressão mais tangível disto é o teste de aceitação. «O utilizador clica em enviar e recebe um resumo do ticket» não é um requisito testável, porque não existe uma única resposta correta. Dois resumos diferentes podem ser ambos excelentes, e um terceiro que parece semelhante pode estar completamente errado. O que é preciso é definir um intervalo de comportamento aceitável em vez de um resultado único.

O teste que poupa meses de desenvolvimento: antes de escrever uma linha de código, tente escrever a eval. Se não conseguir definir o que conta como boa resposta e como medi-la, o requisito ainda está vago. As funcionalidades que encalham em piloto falham quase sempre nesta fase, não na implementação.

As quatro componentes de um critério de aceitação de IA

ComponenteO que defineExemplo
Descrição do comportamentoO que o sistema deve fazer, formulado de modo a admitir variabilidadeUm resumo do ticket que contenha o problema, a ação tomada e o estado
Limiar de avaliaçãoUma pontuação mínima num conjunto de teste reservado, nunca usado no desenvolvimento90% dos resumos incluem os três elementos
Restrição de segurançaO que constitui uma saída inaceitável, independentemente da pontuaçãoNenhum resumo contém alguma vez o número de telefone de um cliente
Ponto de retoma humanaO que acontece nos casos que o modelo não consegue resolverUma pontuação de confiança baixa encaminha o ticket para uma fila humana

A diferença entre a segunda e a terceira componente é fundamental. O limiar é estatístico e tolera falhas isoladas. A restrição é binária e não tolera nenhuma. Sem essa separação, fica com uma funcionalidade que passa com 92% de sucesso enquanto uma fuga de dados se esconde nos 8% restantes.

Como construir uma eval sem equipa de investigação

Uma eval não é um projeto. No caso típico são três pequenos ativos mantidos ao longo do tempo:

Um conjunto de dados. Entre 50 e 150 casos reais do sistema existente, incluindo os incómodos. Importa que sejam recolhidos no terreno em vez de inventados, porque os casos inventados são sempre demasiado convenientes. Associe a cada um a resposta que um especialista do domínio daria.

Uma função de pontuação. Não tem de ser sofisticada. Em muitos casos basta verificar a presença de elementos obrigatórios, a conformidade com uma estrutura definida ou a correspondência de palavras-chave. Onde é necessário juízo, pode usar um modelo como juiz, desde que amostre manualmente parte das pontuações para confirmar que o próprio juiz não está a derivar.

Um limiar e uma linha de base. Meça uma vez antes de mudar seja o que for. Sem uma linha de base não consegue saber se uma alteração ao prompt melhorou ou estragou as coisas, e a maioria das equipas descobre isto tarde demais.

Quando executá-la: uma eval não é uma verificação única antes do lançamento. É repetida a cada troca de modelo, a cada alteração de prompt e a cada mudança numa fonte de dados que alimenta o sistema. É precisamente isso que distingue uma eval de um caso de teste, e a razão pela qual deve ser ligada ao processo de build desde o primeiro dia.

Seis secções a acrescentar ao documento de especificação

SecçãoO que leva
Especificação do comportamento do modeloO que o modelo deve fazer, em que tom, e o que está fora de âmbito
Limiares de aceitaçãoAs métricas e as pontuações mínimas, incluindo os dados em que são medidas
Catálogo de modos de falhaA lista de formas como a funcionalidade pode falhar e o que acontece em cada uma
Restrições comportamentaisLinhas vermelhas binárias: o que nunca pode aparecer na saída
Plano de avaliaçãoO conjunto de dados, o método de pontuação e a frequência de execução
Dados e privacidadeQue dados entram no prompt e em que nível de classificação

A última secção liga-se diretamente à vossa política de classificação de dados. Se ainda não a definiram, o modelo de classificação em quatro níveis é o ponto de partida, porque sem ele a especificação vai definir uma capacidade que não estão autorizados a operar.

O catálogo de modos de falha: a secção que mais vale a pena escrever

Num sistema determinístico um modo de falha é um erro. Num sistema com uma componente de IA um modo de falha é normalmente uma resposta que parece perfeitamente correta e não está. O catálogo tem por isso de enumerar as falhas pelo que o utilizador experiencia, não pelo que o sistema reporta.

Quatro são especialmente comuns: uma resposta errada mas confiante, que obriga a citar fontes para ser verificável; uma recusa em responder a uma pergunta legítima, que obriga a uma via alternativa; uma resposta parcial que omite uma condição relevante; e a deriva ao longo do tempo, em que a fonte de dados muda e a saída degrada-se sem que ninguém tenha tocado numa linha de código. A última é a principal razão para uma eval ter de correr periodicamente e não apenas antes do lançamento.

O que isto faz aos prazos e ao orçamento

O impacto prático é uma deslocação do esforço. Numa especificação clássica a maior parte do tempo vai para a definição de ecrãs e fluxos. Numa funcionalidade de IA uma fatia significativa desloca-se para a recolha e etiquetagem de casos de teste, e isso é trabalho de especialista do domínio e não de programador. Orçamentem-no explicitamente, senão é espremido e chegam ao lançamento sem forma de saber se o sistema funciona.

Segunda deslocação: a funcionalidade nunca «acaba». Carrega um custo de manutenção contínuo, o de executar a eval e manter o conjunto de teste. Quando calculam a viabilidade, esse custo pertence ao modelo unitário desde o início em vez de aparecer no segundo trimestre.

E se a funcionalidade responde a partir dos vossos próprios documentos, a especificação tem de cobrir também a camada de recuperação, porque é aí que se decide a maior parte da precisão real. O detalhe completo está no guia da base de conhecimento empresarial. Acompanhamos todo o processo, da especificação ao lançamento, dentro das nossas áreas de especialização.

Perguntas frequentes

O que é uma eval e em que difere de um teste de aceitação normal?

Uma eval é um conjunto de dados etiquetado com uma função de pontuação e um limiar mínimo. Um teste de aceitação normal verifica uma única saída e devolve passa ou falha, enquanto uma eval mede uma distribuição de qualidade em dezenas de casos e é repetida a cada mudança de modelo, prompt ou fonte de dados.

Quantos casos de teste são precisos para começar?

Entre 50 e 150 casos reais do sistema existente chegam para a maioria das funcionalidades. O que importa é que sejam recolhidos no terreno em vez de inventados, e que incluam os casos difíceis e não apenas os convenientes.

Como se escrevem critérios de aceitação para uma saída sem uma única resposta correta?

Definam quatro componentes: uma descrição do comportamento que admita variabilidade, um limiar de avaliação num conjunto de teste reservado, uma restrição de segurança binária que não tolera exceções, e um encaminhamento para uma pessoa nos casos que o modelo não consegue resolver.

Porquê separar o limiar de avaliação da restrição de segurança?

Porque o limiar é estatístico e tolera uma percentagem de falhas, enquanto a restrição é binária. Sem essa separação uma funcionalidade pode passar com pontuação alta enquanto uma violação grave, como a exposição de dados pessoais, se esconde na percentagem de falha.

Pode usar-se um modelo como juiz para pontuar a saída?

Sim, e é um método comum onde é necessário juízo. A condição é amostrar manualmente parte das pontuações e compará-las com o juízo humano, para confirmar que o próprio juiz não está a derivar ao longo do tempo.

אולי תאהבו גם

Completo

Deixe os seus dados e entraremos em contacto em breve

Transformação

Deixe os seus dados e entraremos em contacto em breve

Junte-se a nós

Deixe os seus dados e entraremos em contacto em breve

Focado

Deixe os seus dados e entraremos em contacto em breve