Saltar para o conteúdo
29/30Capítulo 29 de 30

Avaliação de LLM: dos benchmarks públicos ao seu golden set

O mesmo agent, a mesma tarefa, dez execuções. Sete sucessos parecem 70 %, até calcular pass^10: exatamente zero.

Nesta página

Eis uma demonstração. O agent do Capítulo 23 — o mesmo ciclo, duas das suas quatro ferramentas — é apontado para um diretório com cinco ficheiros de logs e configuração e recebe uma pergunta.

TEXT
Q: What is the last line of errors.log about?
   turn 1  -> read_file({"path": "errors.log"})
   turn 2  -> "The last line of errors.log is:

               ERROR worker 7 timed out after 30000 ms."

Correto, e não é prova de absolutamente nada — porque essa transcrição é uma das dez que executei, e escolhi-a depois de ver as dez.

Execute a tarefa idêntica dez vezes, sem mudar nada exceto a seed de amostragem, e o agent acerta sete vezes. Setenta por cento, que é o número que iria para o slide. Agora faça a pergunta que um cliente realmente quer ver respondida — vai funcionar sempre? — e a resposta é um número completamente diferente:

TEXT
t20  7/10 successes = 70 %   (95 % Wilson interval: 39.7 % to 89.2 %)
     pass^1  70.00 %      pass^5   8.33 %
     pass^2  46.67 %      pass^7   0.83 %
     pass^3  29.17 %      pass^8   0.00 %
     pass^4  16.67 %      pass^10  0.00 %

O agent nunca resolveu esta tarefa dez vezes seguidas e, com base nesta evidência, não se espera que o faça. Esse número — pass^10 — é o honesto, quase nunca é publicado, e no fim deste capítulo saberá como calculá-lo, quanto custa calculá-lo e porque é que o intervalo ao lado dos 70 % importa mais do que os 70 %.

Mostrar detalhes

O que este capítulo precisa dos anteriores.

  • Capítulo 4 para a estatística: o intervalo de Wilson numa proporção, a razão pela qual dezassete certos em vinte não distingue nada, e a baseline estúpida como primeiro requisito.
  • Capítulo 15 para o bench: o harness de cinquenta linhas, o teste exato dos sinais emparelhado sobre os casos em que dois sistemas discordam, e a regra de que um prompt é medido, não debatido.
  • Capítulo 23 para aquilo que está a ser medido: o ciclo, as cinco saídas, a contabilidade de custos, e a observação final de que um harness torna um agent governável, mas não correto.

Dois painéis aqui. TypeScript para a sua própria avaliação, porque pertence à sua integração contínua, ao lado do seu código. Python para o segundo painel, porque os benchmarks públicos vivem aí e uma das medições abaixo precisa dos logits.

Quase todos os argumentos sobre avaliação são duas pessoas a medir coisas diferentes. Há três projetos e não partilham instrumento.

o que está a avaliara perguntao instrumentoquem o detém
o modeloeste modelo é melhor do que aquele, em geral?benchmarks públicos, leaderboardsa comunidade
a sua aplicaçãoo meu prompt, a minha recuperação, o meu schema funcionam nos meus inputs?o seu golden setvocê
o seu agento ciclo inteiro, com ferramentas e efeitos laterais, atinge o objetivo de forma fiável?sucesso da tarefa mais pass^kvocê

A confusão é cara numa direção. Uma leaderboard diz-lhe que um modelo é forte em raciocínio de nível pós-graduado; não lhe consegue dizer se vai encaminhar os seus tickets de suporte. E uma avaliação de aplicação que pontua uma resposta por input não consegue ver um agent de todo, porque um agent tem uma distribuição de trajetórias e uma resposta é uma única amostra dela. O Capítulo 22 deu nome a essa terceira linha e deixou-a vazia: a medida de desempenho, a parte da especificação de um agent que as equipas escrevem por último ou nunca escrevem.

A ordem também importa, e o fornecedor que lhe vende o modelo di-lo. O guia de agents da OpenAI reduz a seleção de modelo a três passos, por esta ordem: «Configure evals para estabelecer uma baseline de desempenho», «Concentre-se em atingir o seu objetivo de precisão com os melhores modelos disponíveis», «Otimize custo e latência substituindo modelos maiores por modelos mais pequenos sempre que possível».1 A avaliação vem primeiro, porque os passos dois e três não significam nada sem um número.

Um golden set é uma lista de inputs, cada um com a resposta escrita, e um avaliador que decide se um output corresponde. É aborrecido, é pequeno, e é o único artefacto neste capítulo que é seu. O que é construído aqui tem vinte tarefas sobre um diretório de cinco ficheiros — não os três do Capítulo 23, portanto as respostas não são as mesmas — e o avaliador é escrito antes de o agent correr:

golden.tsTS
export type Task = {
  id: string;
  prompt: string;
  answer: string;          // the fact, in words, for a human and for a judge
  must: RegExp[];          // ALL must match the final answer
  mustNot?: RegExp[];      // NONE may match
};

export const GOLDEN: Task[] = [
  { id: "t04", prompt: "Which file is the largest?", answer: "access.log",
    must: [/access\.log/i], mustNot: [/errors\.log/i, /notes\.txt/i] },       
  { id: "t12", prompt: "Which HTTP status codes appear in access.log? List all of them.",
    answer: "200, 429 and 500", must: [/200/, /429/, /500/] },                
  // ...eighteen more
];

Duas propriedades suportam o peso. A lista mustNot existe porque um modelo que nomeia três ficheiros, incluindo o correto, não respondeu. E answer é escrito em prosa e também em padrões, porque um humano e um juiz precisarão ambos dele mais tarde — e escrever o mesmo facto duas vezes em duas notações é a forma de descobrir que não concordava consigo próprio sobre qual era a tarefa.

Agora a tabela que decide. Quatro sistemas candidatos, as mesmas vinte tarefas, accuracy com o seu intervalo, e as duas colunas que uma tabela só de accuracies esconde sempre:

sistemacorretasaccuracy, Wilson 95 %custo por tarefa resolvidalatência média
A — sem ferramentas, greedy2/2010.0 % [2.8, 30.1]$0.004649663 ms
B — ferramentas, prompt conciso5/2025.0 % [11.2, 46.9]$0.0055761,362 ms
C — ferramentas, prompt guiado2/2010.0 % [2.8, 30.1]$0.013071930 ms
D — C, melhor de 3 a T = 0.71/205.0 % [0.9, 23.6]$0.0735322,628 ms

Leia os intervalos antes do vencedor. As execuções do braço B vão de 11 % a 47 %; as do braço A, de 3 % a 30 %. Sobrepõem-se em grande parte da sua extensão, que é a conclusão do Capítulo 4 a chegar exatamente onde foi prometida: vinte casos não conseguem ordenar quatro sistemas. O Capítulo 15 afiou isto fazendo antes a pergunta emparelhada — nos casos em que dois braços discordam, quão desequilibrada é a divisão? — porque a dificuldade partilhada do conjunto se cancela. Eis todos os pares:

TEXT
A vs B  +0 / -3   p = 0.2500       B vs C  +4 / -1   p = 0.3750
A vs C  +2 / -2   p = 1.0000       B vs D  +4 / -0   p = 0.1250
A vs D  +2 / -1   p = 1.0000       C vs D  +1 / -0   p = 1.0000

Nenhuma das seis comparações fica estabelecida. O melhor braço vence o braço sem ferramentas por quinze pontos, e isso assenta em três casos discordantes. Vinte casos mostram um mecanismo e não conseguem escolher um fornecedor; dizer o contrário numa reunião é como se compra um mau modelo.

Há uma coisa que esta tabela estabelece, e é a coluna que ninguém inclui. O braço D custa treze vezes o braço B por tarefa resolvida, porque amostrar três trajetórias e escolher a resposta modal triplica a fatura, quer triplique a accuracy quer não. Tabelas de accuracy que omitem custo tornam essa troca invisível.

Agora a conclusão que muda a forma como lê todos os benchmarks que alguma vez verá. Pegue nas mesmas duzentas transcrições — vinte tarefas, dez execuções, nem um token regenerado — e pontue-as de três formas:

avaliadorcorretasaccuracy, Wilson 95 %
correspondência exata contra a resposta escrita0/2000.0 % [0.0, 1.9]
a resposta escrita aparece como substring26/20013.0 % [9.0, 18.4]
a rubrica de keywords acima52/20026.0 % [20.4, 32.5]

Zero, treze, vinte e seis. O sistema não mudou. O avaliador mudou. A correspondência exata devolve zero não porque o agent é inútil, mas porque nenhuma resposta em texto livre é byte a byte idêntica a uma referência: mede formatação e relata-a como capacidade.

Isso não é uma curiosidade, é um mecanismo, e tem nome. Uma métrica de corte duro pontua uma tarefa como tudo-ou-nada sobre vários subfactos, por isso compõe-se. A tarefa t12 pede três códigos de estado de uma vez. Nas dez execuções:

TEXT
per-code presence   200: 9/10    429: 6/10    500: 8/10    (mean 0.77 per fact)
all three at once   5/10

Cada facto está certo cerca de três quartos das vezes; exigir os três de uma vez reduz a pontuação para metade, e 0.773=0.4570.77^3 = 0.457 fica suficientemente perto dos 0.50 medidos para mostrar de onde veio a queda. Generalize:

accuracy por facto ppk=1k=1k=2k=2k=3k=3k=5k=5k=10k=10
0.6060.0 %36.0 %21.6 %7.8 %0.6 %
0.8080.0 %64.0 %51.2 %32.8 %10.7 %
0.9090.0 %81.0 %72.9 %59.0 %34.9 %
0.9595.0 %90.3 %85.7 %77.4 %59.9 %

Leia a linha 0.90 contra a linha 0.95 em k=10k = 10: uma melhoria de cinco pontos por facto torna-se vinte e cinco pontos na conjunção. Nada de descontínuo aconteceu ao modelo. Uma curva suave lida através de uma métrica tudo-ou-nada parece um salto — que é precisamente o argumento que Schaeffer, Miranda e Koyejo fizeram sobre capacidades emergentes, e que o Capítulo 10 adiou para aqui.2 A auditoria deles concluiu que, no máximo, 5 das 39 métricas preferidas do BIG-Bench exibem emergência, com duas métricas descontínuas a responderem por mais de 92 % dos casos alegados.

Portanto, a disciplina, numa linha: um salto num gráfico é evidência sobre a métrica até prova em contrário. Antes de acreditar que uma capacidade apareceu, trace as mesmas execuções com uma métrica que dê crédito parcial e veja se o precipício sobrevive.

Há uma versão de segunda ordem disto que Kalai e colegas argumentam estar a causar dano a montante: benchmarks pontuados como certo-ou-errado recompensam adivinhar em vez de dizer «não sei», por isso um modelo otimizado contra eles aprende a adivinhar. A correção proposta não é outro benchmark de alucinações, mas «modificar a pontuação de benchmarks existentes que estão desalinhados mas dominam leaderboards».3 O seu golden set tem a mesma alavanca, e é uma linha: decida se uma abstenção conta como falha ou como a sua própria categoria. A maioria das pessoas nunca decide, por isso conta silenciosamente como falha, e o sistema que enviam para produção adivinha.

Tudo até aqui pontuou uma tentativa por tarefa. Um agent não é uma tentativa. O Capítulo 17 estabeleceu que não tem determinismo nem sequer a temperature zero, por isso o mesmo input produz uma distribuição de trajetórias e um benchmark que executa cada tarefa uma vez relata uma amostra dela.

A contribuição do τ-bench é a métrica para isso. O artigo define-a claramente: «propomos uma nova métrica – pass^k (pass hat k), definida como a probabilidade de todos os k ensaios i.i.d. de tarefa serem bem-sucedidos, média sobre as tarefas».4 Execute cada tarefa nn vezes, conte os cc sucessos, e os estimadores não enviesados são:

passk=Etask ⁣[(ck)(nk)]pass@k=1Etask ⁣[(nck)(nk)]\text{pass}^k = \mathbb{E}_{\text{task}}\!\left[\frac{\binom{c}{k}}{\binom{n}{k}}\right] \qquad \text{pass@}k = 1 - \mathbb{E}_{\text{task}}\!\left[\frac{\binom{n-c}{k}}{\binom{n}{k}}\right]

O segundo é o conhecido pass@k da geração de código: a probabilidade de pelo menos uma de kk tentativas ter sucesso. Coloque-os lado a lado sobre as mesmas contagens medidas e movem-se em direções opostas:

kkpass@k — pelo menos umapass^k — todas
126.0 %26.0 %
237.0 %15.0 %
343.5 %10.5 %
551.2 %6.7 %
857.7 %5.1 %
1060.0 %5.0 %

Mesmas execuções, mesmo avaliador, mesmas vinte tarefas. Uma coluna diz que o sistema melhora com mais tentativas e a outra diz que piora, e ambas estão corretas, porque respondem a perguntas diferentes. pass@k é a métrica certa quando um humano filtra o output — geração de código, rascunhos, brainstorming — e as tentativas extra são baratas. pass^k é a métrica certa quando o agent age sem filtro, que é o que «agent» significa. Publicar a primeira onde se aplica a segunda é o exagero mais comum neste campo, e o próprio título do τ-bench é a versão honesta: gpt-4o a cerca de 61 % pass^1 em retalho cai para cerca de 25 % em pass^8.4

Agora o golpe nos meus próprios números. pass^10 nas minhas vinte tarefas é 5.0 %: exatamente uma tarefa em vinte resolvida em todas as dez execuções. Essa tarefa é t19, «O deploy 42 teve sucesso?», e eis duas das dez respostas que a rubrica pontuou como corretas:

TEXT
run 2  "To check if 'deploy.log' succeeded in deploying 42, I will list the file
        names in the working directory using the list_files function..."
run 8  "Yes, deploy 42 has successfully deployed. Deploying was successful for 41
        as well."

A primeira nunca responde. A segunda acrescenta uma afirmação falsa — o deploy 41 foi revertido. Ambas corresponderam a /succe|yes/. A única tarefa que mantém pass^10 acima de zero é um artefacto do avaliador, por isso o valor verdadeiro é zero, e nenhum agregado mo teria mostrado. Amostrar as transcrições por trás da sua tarefa com melhor pontuação é onde os avaliadores vão morrer.

E mais um número, aquele que dá nome a esta secção. Dez avaliações idênticas — mesmo sistema, mesmas vinte tarefas, mesmo código, nada mudou exceto as seeds:

TEXT
per-run correct: 5 2 5 5 8 5 8 5 4 5   ->  10 % .. 40 %,  mean 26.0 %,  sd 8.8 points

Uma amplitude de trinta pontos num sistema que não mudou. Se correr a sua suite uma vez antes de uma release e uma vez depois, uma «melhoria» de oito pontos está dentro dessa dispersão e vai lançá-la acreditando que a causou. É por isso que o intervalo agregado acima — 26.0 % [20.4, 32.5] — é demasiado estreito para ser citado sozinho: trata duzentos ensaios correlacionados como duzentos ensaios independentes. O resumo honesto de uma avaliação de agent é uma média e uma dispersão entre repetições, e quase ninguém publica a segunda.

Rubricas não escalam para respostas abertas, por isso o movimento padrão é fazer um modelo avaliar o output. Funciona suficientemente bem à escala frontier para ser o padrão, e tem três modos de falha com nome: enviesamento de posição, enviesamento de verbosidade e enviesamento de auto-valorização.5

Meça-o antes de confiar nele. As mesmas sessenta respostas — três das dez execuções — foram etiquetadas de três formas. A etiqueta humana é minha: li as sessenta com os cinco ficheiros abertos e apliquei uma regra escrita, passa se e só se a resposta declara o facto pedido pela pergunta e não contém nada contradito pelos ficheiros.

avaliadordiz passconcorda com o humanofalso passfalso fail
rubrica de keywords17/6050/60 = 83.3 % [72.0, 90.7]82
o modelo como juiz60/6011/60 = 18.3 % [10.6, 29.9]490

O juiz disse PASS sessenta vezes em sessenta. Teria relatado este agent a 100 % de accuracy num conjunto onde o humano o pontua a 18 %. Um juiz sem poder discriminativo não é um instrumento ruidoso; é uma função constante, e uma função constante dá ao seu melhor sistema e ao seu pior sistema a mesma pontuação.

Prompting não o salvou. Quatro variantes, os mesmos sessenta itens:

prompt do juizdiz passconcordância com o humano
«Responda PASS ou FAIL.»60/6018.3 %
«Responda FAIL ou PASS.» — etiquetas trocadas56/6025.0 %
mais uma lista explícita do que conta como falha55/6026.7 %
mais um exemplo trabalhado FAIL e um exemplo PASS56/6025.0 %

Trocar a ordem das duas etiquetas na instrução moveu quatro veredictos. É um efeito mensurável e é o tipo errado de efeito: o juiz está a responder à forma do prompt em vez de responder à resposta à sua frente.

A demonstração limpa é par a par. Vinte perguntas, cada uma com uma candidata claramente correta e uma claramente errada, apresentadas nas duas ordens:

TEXT
picked the FIRST option              40/40 = 100.0 %
order-consistent (same winner both ways)   0/20 = 0.0 %   [Wilson 0.0, 16.1]
picked the CORRECT answer            20/40 = 50.0 %

Escolheu a posição A quarenta vezes em quarenta. Os 50 % na correção não são competência parcial — são aritmética, porque a resposta correta fica na posição A em exatamente metade dos ensaios. A consistência aqui é definida como o MT-Bench a define, «a percentagem de casos em que um juiz dá resultados consistentes ao trocar a ordem de dois assistentes», o que permite uma comparação direta: o GPT-4 pontua 65.0 % nessa medida, e few-shot prompting elevou-a para 77.5 %.5 O meu pontua zero.

A mitigação padrão também vem desse artigo: «chamar um juiz duas vezes trocando a ordem de duas respostas e só declarar uma vitória quando uma resposta é preferida nas duas ordens».5 Aplique-a aqui e o juiz produz zero veredictos utilizáveis em vinte pares — que é o resultado correto, e infinitamente melhor do que vinte veredictos confiantes.

Uma nota metodológica que vale mais do que o resultado. Também executei um teste de verbosidade: a mesma resposta correta, uma cópia acrescentada de uma frase de 36 palavras que não adiciona nada. O juiz preferiu a versão mais longa em exatamente 50 % dos ensaios — o que parece ausência de enviesamento de verbosidade e não é nada disso, porque um juiz que escolhe sempre a posição A pontua 50 % em qualquer emparelhamento equilibrado. Não consegue medir um segundo enviesamento até o primeiro estar controlado. Trocar posições não é um refinamento a acrescentar depois; é o que torna todas as outras medições interpretáveis.

Para que serve um juiz. Respostas abertas sem forma analisável: tom, cobertura, se uma citação sustenta a frase, se uma recusa foi apropriada. Barato, rápido e aproximadamente tão bom como o seu modelo base.

O que um juiz não é. Uma verdade de base. É um sistema com accuracy, um perfil de enviesamentos e um custo, e precisa do seu próprio golden set de etiquetas humanas — incluindo falhas conhecidas — antes de qualquer número que produza significar alguma coisa.

A ressalva honesta: este juiz é um modelo de meio bilião de parâmetros, e ninguém deve avaliar com um. A questão não é que os juízes sejam maus. É que os números acima custaram oito minutos a produzir, e sem eles o veredicto deste juiz numa decisão de lançamento teria sido 100 %.

Este é o terceiro e último painel Python declarado do curso, e a razão está no sítio de onde vêm os números públicos. lm-evaluation-harness cobre «mais de 60 benchmarks académicos padrão para LLMs, com centenas de subtarefas e variantes implementadas» e é «o backend da popular Open LLM Leaderboard da Hugging Face»; HELM, SWE-bench e τ-bench são pacotes Python com pontos de entrada Python.6 Executar o seu modelo contra um valor publicado significa executar o código deles, e no dia em que quiser comparar com um número que alguém citou, este é o ecossistema em que está:

terminalBASH
lm_eval --model hf \
    --model_args pretrained=EleutherAI/gpt-j-6B \
    --tasks hellaswag \
    --device cuda:0 \
    --batch_size 8

A segunda razão é que uma medição neste capítulo é impossível sobre HTTP. Contaminação — o conjunto de teste ter vazado para os dados de treino — é a falha que torna um benchmark público silenciosamente sem significado, e a sonda mais afiada para isso precisa da loss do próprio modelo, que nenhuma API de chat devolve. É a cross-entropy por token do Capítulo 8, apontada a uma pergunta sobre memória:

contamination.pyPYTHON
def nll(text: str) -> float:
    """Mean negative log-likelihood per token, in nats."""
    ids = tok(text, return_tensors="pt").input_ids.to(model.device)
    with torch.no_grad():
        out = model(ids, labels=ids)
    return float(out.loss)

Dez pares de frases: cinco em todos os crawls da web desde que existe, cinco escritas para este capítulo esta manhã, cada uma emparelhada com uma versão reformulada que carrega o mesmo conteúdo.

conjuntoformulação canónicareformuladadiferença
famoso, média de 51.213.03+1.83
fresco, média de 55.025.96+0.93

O modelo fica quatro vezes mais surpreendido por uma frase escrita esta manhã do que por uma que viu um milhão de vezes, e reformular custa o dobro nas famosas — sendo o custo extra a parte que foi memorizada em vez de compreendida. A loss absoluta confunde memorização com naturalidade comum, por isso a diferença é a estatística melhor e o teste de continuação é ainda melhor. Dê-lhe as primeiras seis palavras:

TEXT
famous  "Permission is hereby granted, free of"
     -> "charge, to any person obtaining a copy of this software and associated
         documentation files (the "
famous  "All human beings are born free"
     -> "and equal in dignity and rights. The right to life, liberty, and security"
fresh   "All evaluation harnesses are born tiny"
     -> ", and the most common way to measure their size is by using a ruler."

Três das cinco strings famosas continuaram palavra por palavra a partir de seis palavras; nenhuma das cinco frescas o fez. Isto é um modelo de meio bilião de parâmetros a recitar a MIT License. Se o seu benchmark está na web pública, assuma que está nos pesos. É também o argumento de todo o capítulo: um golden set que escreveu a partir dos seus próprios dados, mantido fora de qualquer repositório que um crawler leia, é o único conjunto de teste de que pode ter a certeza que nunca foi treinado.

Ainda vale a pena lê-los, desde que leia o que cada um mede em vez do número único associado.

benchmarko que medeum número do artigo
MMLUconhecimento de escolha múltipla em 57 disciplinaso GPT-3 superou o acaso em «quase 20 pontos percentuais em média»7
HELMmuitas métricas × muitos cenários, normalizadoscobertura dos cenários centrais passou de 17.9 % para 96.0 %8
Chatbot Arenapreferência humana par a par em crowdsourcingmais de 240K votos; votos da multidão «em boa concordância» com especialistas9
SWE-benchresolver issues reais do GitHub, avaliado pelos testes do repositório2,294 problemas; o melhor modelo na altura resolveu «meros 1.96 %»10
τ-benchuso de ferramentas com um utilizador simulado e política de domíniogpt-4o ≈ 61 % pass^1, ≈ 25 % pass^8 em retalho4
WebArenatarefas de longo horizonte em websites funcionaismelhor agent GPT-4 a 14.41 % contra 78.24 % para humanos11
OSWorldtarefas reais de desktop e sistema operativo em aplicações369 tarefas; melhor modelo 12.24 %, humanos 72.36 %12
GAIAperguntas fáceis para pessoas, difíceis para assistentes466 perguntas; humanos 92 %, GPT-4 com plugins 15 %13
AgentBenchraciocínio de agent em 8 ambientes distintosuma grande diferença entre modelos comerciais e abertos14
AgentHarmse um agent executará tarefas maliciosas em vários passos110 tarefas maliciosas em 11 categorias de dano15

Fique com a tabela, não com uma linha. Os benchmarks agentic colocam todos os humanos muito acima dos modelos, que é o oposto dos benchmarks de conhecimento e o melhor resumo numa linha de onde está o campo; os seus valores envelhecem em meses, por isso cite-os com a data em que os leu; e todos medem uma tarefa que não é a sua.

Accuracy é a métrica sobre a qual se discute. Estas são as que decidem se a coisa é lançada. As quatro saem das duzentas execuções já medidas.

Custo por tarefa resolvida, não por chamada. O agent custa $0.001345 por tentativa e $0.005172 por tarefa realmente resolvida — 3.85 vezes mais, porque três quartos das tentativas não produzem nada. A latência comporta-se da mesma forma: 1,213 ms por tentativa, 4,667 ms por tarefa resolvida. Cada retry, cada nova pergunta, cada trajetória abandonada está no segundo número e é invisível no primeiro.

Um diagnóstico que vence a accuracy. Em 123 de 200 tentativas, o agent respondeu sem chamar uma única ferramenta — adivinhou em vez de procurar. Dividindo por isso:

TEXT
answered without reading anything   8/123  =  6.5 %  [3.3, 12.3]
answered after reading something   44/77   = 57.1 %  [46.0, 67.6]

Os intervalos nem chegam perto de se tocar. Isto vale mais do que os 26 % agregados, porque nomeia a coisa a corrigir — o modelo não está a falhar no raciocínio, está a falhar em procurar — e a correção está no harness, não no modelo. Uma ressalva que este capítulo deve aos seus próprios padrões: os dois grupos são tarefas diferentes, não as mesmas tarefas emparelhadas, por isso parte dessa diferença pode dever-se a ele saltar as ferramentas precisamente nas perguntas que considera difíceis. A divisão é um diagnóstico, não uma afirmação causal.

Taxa de intervenção humana é a métrica que um comprador pergunta primeiro: que fração de execuções parou numa aprovação, num guardrail ou num handoff. As interrupções tipadas do Capítulo 23 tornam-na contável, e contada por tipo de tarefa e por semana é o que separa um agent que está a aprender o trabalho de um que se está silenciosamente a tornar uma fila.

Abandono é a que nenhuma suite offline consegue ver: o utilizador que leu a resposta, fechou o separador e fez a tarefa sozinho. A avaliação offline é um portão; a avaliação em produção é uma amostra contínua de tráfego real, pontuada com o mesmo avaliador mais estas quatro.

E uma regra herdada do Capítulo 17: nunca faça assert sobre output exato. Faça assert sobre propriedades — JSON válido, schema correto, a ferramenta certa chamada, um número dentro da tolerância, uma substring obrigatória presente. A coluna de correspondência exata no topo deste capítulo é o que acontece quando essa regra é quebrada.

Avaliar um fornecedor não é só accuracy, e esta é a segunda metade da ética deste curso, com o seu próprio título em vez de um apêndice.

Meça o enviesamento, não o assuma. O que quer que acredite sobre o comportamento de um modelo em nomes, dialetos, géneros ou nacionalidades, é uma propriedade mensurável do seu pipeline, e o instrumento é o que já tem: pegue no seu golden set, varie apenas o atributo, compare emparelhado. HELM existe precisamente porque se estava a relatar apenas accuracy onde enviesamento, toxicidade, calibração e robustez também eram decidíveis.8 O model card de um fornecedor é um ponto de partida, não evidência sobre os seus inputs.

Contaminação também é uma pergunta para o fornecedor. A sonda acima é a razão para perguntar sobre o que foi medido um número publicado, e quando foram cortados os dados do modelo.

Retenção, treino e residência, lido em 7 de setembro de 2026. Estas coisas mudam, por isso registe a data ao lado da resposta. A página de políticas da Anthropic declara: «Por defeito, não usaremos os seus inputs ou outputs dos nossos produtos comerciais (por exemplo, Claude for Work, Anthropic API, Claude Gov, etc.) para treinar os nossos modelos», com a exceção de conteúdo que submeta explicitamente como feedback, que é armazenado «até 5 anos».16 A documentação de controlos de dados da OpenAI declara que «dados enviados para a OpenAI API não são usados para treinar ou melhorar modelos da OpenAI (a menos que opte explicitamente por partilhar dados connosco)», descreve uma retenção predefinida de trinta dias para logs de monitorização de abuso, e oferece Zero Data Retention, que «exclui conteúdo de clientes dos logs de monitorização de abuso», mais residência de dados configurável numa lista de regiões.17

Quatro perguntas para obter por escrito antes da primeira chamada de produção, porque cada uma tem um dono diferente: os meus dados são usados para treino; durante quanto tempo são retidos e por quem; onde são processados e armazenados; e o que acontece a tudo isso se eu usar um revendedor, uma gateway ou um agregador em vez do fornecedor diretamente. É nessa última que vivem a maioria das surpresas, e nenhum benchmark lhe dirá.

Agora tem o instrumento: um golden set que lhe pertence, um intervalo em cada número, um teste emparelhado para cada comparação, pass^k para as execuções que não mostrou a ninguém, um juiz medido, e uma sonda para saber se uma pontuação pública significa alguma coisa. A afirmação final do Capítulo 23 pode agora ser verificada em vez de afirmada — um harness torna um agent governável, não correto — e verificá-la exigiu duzentas execuções e oito minutos.

Há uma propriedade de um agent que nada disto mede, e é a que faz pessoas serem despedidas.

Todas as tarefas no golden set deste capítulo foram escritas por mim, e todos os ficheiros que o agent leu foram escritos por mim. Nada naquele diretório estava a tentar fazer fosse o que fosse. Mude uma linha num ficheiro que o agent é instruído a ler — uma linha que termina com uma instrução dirigida ao que quer que a leia a seguir — e o agent que pontuou 26 % segui-la-á com as mesmas ferramentas, as mesmas permissões e o mesmo trace limpo, e todos os números deste capítulo ficarão exatamente onde estão. Uma suite de avaliação mede com que frequência um sistema atinge o seu objetivo. Não mede com que facilidade outra pessoa consegue substituí-lo pelo dela.

O Capítulo 30 é isso: prompt injection, a tríade letal de dados privados, conteúdo não fiável e comunicação externa, e quanto custa dar permissões reais a um agent. Abre com a observação que este capítulo tem evitado — que a mesma pontuação de passagem é compatível com um agent que faz exatamente o que um atacante escreveu num ficheiro que foi instruído a ler.


Todos os números acima foram produzidos numa máquina e nenhum tocou num endpoint pago. O agent é o ciclo do Capítulo 23 com duas das suas quatro ferramentas sobre um diretório de cinco ficheiros; o modelo por trás da porta é Qwen/Qwen2.5-0.5B-Instruct, exposto através de um pequeno servidor com a mesma forma de um endpoint de chat completions exatamente como no Capítulo 23, mas em half precision numa GPU de consumo em vez da CPU desse capítulo. Os custos usam as tarifas do Capítulo 16 — $2.00 por milhão de input tokens e $12.00 por milhão de output — aplicadas a contagens de token medidas. As execuções repetidas usam temperature 0.7 com seeds fixas para que todo o conjunto se reproduza; a tabela de quatro braços é greedy. Os intervalos são Wilson a 95 %, as comparações emparelhadas são testes exatos dos sinais bilaterais sobre os pares discordantes; o intervalo de Wilson é o do Capítulo 4 e o teste exato dos sinais emparelhado é o do Capítulo 15, ambos reutilizados sem alterações. As etiquetas humanas são minhas, aplicadas a sessenta respostas sob a regra escrita citada no texto. Leia cada magnitude aqui como uma propriedade de um modelo de meio bilião de parâmetros e cada método como transferível: um modelo maior move todos os números para cima e não move nenhum dos instrumentos.

  1. OpenAI, A practical guide to building agents (PDF), página 8, lido em 7 de setembro de 2026. Fonte da ordenação em três passos citada acima e do conselho associado para «construir o protótipo do seu agent com o modelo mais capaz para cada tarefa, de modo a estabelecer uma baseline de desempenho. A partir daí, experimente trocar por modelos mais pequenos para ver se ainda atingem resultados aceitáveis.» Os Capítulos 22 e 25 citam as suas páginas de definição e orquestração.

  2. Schaeffer, R., Miranda, B. e Koyejo, S. Are Emergent Abilities of Large Language Models a Mirage? arXiv:2304.15004 (2023). O argumento de que métricas descontínuas, tudo-ou-nada, fabricam saltos aparentes a partir de melhorias subjacentes suaves, com a auditoria BIG-Bench citada no Capítulo 10. A própria cautela deles merece ser repetida: nada no artigo afirma que modelos grandes não possam exibir capacidades emergentes.

  3. Kalai, A. T., Nachum, O., Vempala, S. S. e Zhang, E. Why Language Models Hallucinate. arXiv:2509.04664 (2025). O argumento de que benchmarks pontuados como certo-ou-errado recompensam adivinhar em vez de abster, e o remédio proposto de «modificar a pontuação de benchmarks existentes que estão desalinhados mas dominam leaderboards, em vez de introduzir avaliações adicionais de alucinação». O Capítulo 19 cita-o pelo lado da recuperação; este é o lado da avaliação da mesma afirmação.

  4. Yao, S., Shinn, N., Razavi, P. e Narasimhan, K. τ-bench: A Benchmark for Tool-Agent-User Interaction in Real-World Domains. arXiv:2406.12045 (2024). A origem de pass^k, definido como citado acima, com ambos os estimadores impressos lado a lado no artigo; o destaque do resumo é que agents de function calling de ponta «têm sucesso em <50 % das tarefas, e são bastante inconsistentes (pass^8 <25 % em retalho)», e a secção 1 dá os valores de gpt-4o de ≈61 % pass^1 e ≈25 % pass^8 em τ-retail. O estimador pass@k com que contrasta vem de Chen, M. et al., Evaluating Large Language Models Trained on Code, arXiv:2107.03374 (2021). 2 3

  5. Zheng, L. et al. Judging LLM-as-a-Judge with MT-Bench and Chatbot Arena. arXiv:2306.05685 (2023). Fonte dos três enviesamentos nomeados, da definição de consistência usada acima («a percentagem de casos em que um juiz dá resultados consistentes ao trocar a ordem de dois assistentes»), da conclusão de que «apenas os outputs do GPT-4 produzem resultados consistentes em mais de 60 % dos casos», com 65.0 % a subir para 77.5 % em few-shot, e da mitigação de trocar-e-exigir-concordância citada literalmente. O resultado positivo também importa: juízes GPT-4 atingem «uma taxa de concordância superior a 80 %» com avaliações humanas, «o mesmo nível de concordância humano-humano» — que é a razão para usar um juiz de todo, e a razão para medir o seu. 2 3

  6. EleutherAI, Language Model Evaluation Harness, README do projeto lido em 7 de setembro de 2026: «mais de 60 benchmarks académicos padrão para LLMs, com centenas de subtarefas e variantes implementadas», e «o backend da popular Open LLM Leaderboard da Hugging Face». A invocação lm_eval citada acima é o exemplo do próprio README. Liang, P. et al., Holistic Evaluation of Language Models, arXiv:2211.09110 (2022), é o outro executor padrão e a melhor leitura sobre desenho de avaliação.

  7. Hendrycks, D., Burns, C., Basart, S., Zou, A., Mazeika, M., Song, D. e Steinhardt, J. Measuring Massive Multitask Language Understanding. arXiv:2009.03300 (2020). 57 tarefas; a afirmação do resumo de que o maior modelo GPT-3 «melhora sobre o acaso em quase 20 pontos percentuais em média» é um lembrete útil de quão recente é a saturação deste benchmark.

  8. Liang, P. et al. Holistic Evaluation of Language Models. arXiv:2211.09110 (2022). Sete métricas — accuracy, calibração, robustez, equidade, enviesamento, toxicidade e eficiência — em 16 cenários centrais e 30 modelos, com os valores de cobertura citados acima. A razão para o ler é o enquadramento: qual das sete relata é, por si só, uma escolha. 2

  9. Chiang, W.-L. et al. Chatbot Arena: An Open Platform for Evaluating LLMs by Human Preference. arXiv:2403.04132 (2024). Mais de 240K votos à data de escrita, preferência humana par a par em crowdsourcing, e a afirmação de que «os votos humanos em crowdsourcing estão em boa concordância com os de avaliadores especialistas».

  10. Jimenez, C. E., Yang, J., Wettig, A., Yao, S., Pei, K., Press, O. e Narasimhan, K. SWE-bench: Can Language Models Resolve Real-World GitHub Issues? arXiv:2310.06770 (2023). 2,294 problemas de 12 repositórios Python, avaliados pelos testes dos próprios repositórios, com o melhor modelo da altura a resolver «meros 1.96 %». O Capítulo 23 usa-o para o outro sentido da palavra «harness».

  11. Zhou, S. et al. WebArena: A Realistic Web Environment for Building Autonomous Agents. arXiv:2307.13854 (2023). Websites funcionais em quatro domínios, com o melhor agent GPT-4 a 14.41 % contra 78.24 % para humanos.

  12. Xie, T. et al. OSWorld: Benchmarking Multimodal Agents for Open-Ended Tasks in Real Computer Environments. arXiv:2404.07972 (2024). 369 tarefas em sistemas operativos reais; humanos acima de 72.36 %, melhor modelo 12.24 %, com GUI grounding apontado como a principal lacuna.

  13. Mialon, G., Fourrier, C., Swift, C., Wolf, T., LeCun, Y. e Scialom, T. GAIA: A Benchmark for General AI Assistants. arXiv:2311.12983 (2023). 466 perguntas, humanos a 92 % contra 15 % para GPT-4 com plugins — a declaração publicada mais limpa da diferença entre o que é fácil para uma pessoa e o que é fácil para um assistente.

  14. Liu, X. et al. AgentBench: Evaluating LLMs as Agents. arXiv:2308.03688 (2023). Oito ambientes distintos, e uma disparidade significativa entre os melhores modelos comerciais e os open-source de tamanho comparável.

  15. Andriushchenko, M. et al. AgentHarm: A Benchmark for Measuring Harmfulness of LLM Agents. arXiv:2410.09024 (2024). 110 tarefas de agent explicitamente maliciosas (440 com augmentations) em 11 categorias de dano, com a conclusão de que modelos líderes são «surpreendentemente complacentes com pedidos maliciosos de agent sem jailbreaking» e que templates universais simples de jailbreak transferem para agents mantendo as suas capacidades. É a ponte para o Capítulo 30: um benchmark de capacidade e um benchmark de dano medem o mesmo sistema e discordam sobre se está pronto.

  16. Anthropic, Os meus dados são usados para treino de modelos?, privacy.claude.com, lido em 7 de setembro de 2026. Citado literalmente acima, incluindo a exceção de feedback e a janela de armazenamento de cinco anos para feedback submetido.

  17. OpenAI, Os seus dados (documentação de controlos de dados da API), developers.openai.com, lido em 7 de setembro de 2026. Fonte da declaração predefinida de não treino, da retenção de trinta dias para monitorização de abuso, da descrição de Zero Data Retention e da lista de endpoints elegíveis, e das regiões de residência de dados.

Pronto para deixar a LIA escolher?

Construa com todos os modelos de IA num só sítio — comece grátis hoje.