Pare de Comprar Benchmarks: Construa uma Bancada Honesta de Avaliação de LLMs

Por Diogo Hudson Dias
Engineering lead reviewing a dashboard with latency histograms and cost charts while a teammate runs an evaluation on a laptop in a modern office.

Mais um dia, mais um ranking declarando um novo modelo número um. Um post afirma que o GLM supera o Claude na empresa deles. Outro dev mostra o currículo oscilando de 90 para 74 para 88 quando passa por um ATS open source. Isso não é contradição; é um lembrete: sem uma bancada de avaliação fiel ao seu workload, você está comprando marketing. Como CTO, você precisa de um benchmark que responda a uma única pergunta: qual modelo vence para o seu mix exato de tarefas, latências e custos?

O que os rankings de fornecedores não capturam (e por que você paga por isso)

Rankings públicos otimizam para espetáculo, não para seus SLOs. Eles raramente capturam:

  • Desalinhamento de distribuição: Seus prompts não são trivias de 3 frases. Você roda contextos de 300–2000 tokens, tool-calls mistos e retornos JSON estritos. Os rankings fazem média sobre tarefas que não se parecem com as suas.
  • Segurança e taxas de recusa: O modelo mais rápido não vale nada se recusa 7% dos seus prompts de suporte ao cliente ou omite silenciosamente campos obrigatórios.
  • Latência de cauda sob carga: p95 e p99 explodem primeiro. Seus clientes sentem a cauda, não a média.
  • Fragilidade do avaliador: O “juiz” vira o veredito com pequenas mudanças de prompt (vide as anedotas de pontuação de ATS com efeito chicote). Se seu scorer não é robusto, seu ranking também não é.
  • Realidades operacionais: Rate limits, picos transitórios 429/5xx, jitter de roteamento de API e bugs de SDK (lembra do bug recente em uma biblioteca HTTP popular) distorcem resultados a menos que você construa proteções.

Pare de alugar as suposições dos outros. Construa um benchmark pequeno, honesto e repetível que reflita o seu mundo.

As cinco coisas que você deve medir (nesta ordem)

  1. Taxa de sucesso por tarefa (qualidade): correspondência exata para saídas estruturadas; validação programática para código ou extração; julgamento pareado calibrado para respostas abertas.
  2. Latência p95 no RPS alvo: sob sua concorrência e região. Aquecimentos mentem; meça o estado estacionário.
  3. Custo por item resolvido: tokens de entrada + tokens de saída + retries, dividido por conclusões bem-sucedidas. Este é o número que finanças lembra.
  4. Taxa de falha/recusa: quebras de esquema JSON, perdas de tool-call, recusas de política e erros de rede/API.
  5. Variância/deriva: deltas de reexecução e deriva semanal. Não coroe um campeão que é ótimo só às terças.

Seu benchmark mínimo viável de LLM (MVB)

1) Faça a curadoria de um dataset que reflita a produção

  • Tamanho: 1.000–2.000 itens é suficiente para separar concorrentes sem te falir.
  • Mix: Espelhe seus 3–5 principais casos de uso. Exemplo: 40% classificação/extração (JSON), 40% agente/tool-calls, 20% raciocínio de fôlego. Inclua faixas de comprimento: curto (≤128 tokens), médio (129–512), longo (513–2048+).
  • Idiomas/regiões: Se você atende as Américas, inclua inglês, espanhol e português brasileiro. Mesmo modelos de ponta podem cair 5–15% em tarefas não-inglesas.
  • Evite contaminação: Nada de benchmarks públicos nos quais os modelos provavelmente treinaram. Use tickets internos, variantes sintéticas porém validadas, ou dados recortados no tempo capturados após o cutoff conhecido do modelo.

2) Construa um scorer confiável

  • Tarefas estruturadas: Valide JSON com esquema estrito; use regex para IDs; rode testes de código para codegen. Sem humano no loop necessário.
  • Tarefas abertas: Use pairwise ELO com três modelos juiz independentes e desempates. Nunca deixe um candidato se julgar. Congele o prompt de julgamento e registre seu hash. Reexecute 10% dos itens toda semana para detectar deriva do juiz.
  • Calibração humana: Amostre 100 itens e peça que dois especialistas do domínio avaliem às cegas. Calcule o acordo interanotador (kappa de Cohen). Seu juiz deve concordar ≥0,6 com humanos ou você está avaliando ruído.

3) Instrumente para latência e carga

  • Varreduras de concorrência: Teste em 1, 4, 16 e 64 requisições concorrentes. Fixe instâncias de cliente por modelo para evitar interferência entre modelos.
  • Aqueça, mas não trapaceie: Envie um burst de 30–60 s de warm-up e depois registre por pelo menos 10 minutos em RPS estável. Clientes não vivem na sua janela de warm-up.
  • Meça cauda e estabilidade: Registre p50/p95/p99, % de timeout e contagem de retries. A cauda conta de onde vêm os pagers.

4) Torne reprodutível

  • Ambiente hermético: Containerize a bancada. Trave dependências. Se você está em Python, fixe com uv; se em Node, use um instalador reprodutível. Não embarque “latest”.
  • Requisições idempotentes: Faça hash(model, prompt template, inputs, temperature, tools) para criar uma chave de cache. Cacheie respostas brutas com headers. Em reexecuções, detecte hits de cache mas ainda meça a latência novamente com um ramo “no-op” para poder reproduzir qualidade a baixo custo e latência honestamente.
  • Observabilidade: Emita traces do OpenTelemetry com atributos para modelo, template, contagem de tokens, tentativas de retry e classe de erro. Guarde traces por pelo menos 30 dias.
  • Endurecimento HTTP: Use backoff exponencial, jitter e circuit breakers. Implemente uma dead-letter queue para itens patológicos, assim um prompt ruim não trava a execução. E sim — bugs em clientes HTTP populares acontecem; fixe versões e monitore regressões.

5) Controle o não-determinismo

  • Configurações de amostragem: Fixe temperature, top_p e presence penalties. Se a API suportar seed, defina; se não, use n=3 amostras e tire maioria para classificação ou best-of pelo juiz para geração.
  • Disciplina de template: Congele templates de prompt e esquemas de tools. Registre seus SHA-256 nos resultados. Um ajuste de duas palavras pode mover sua taxa de vitória em 3–7% — registre.

Plano de execução: como comparar 4–6 modelos em uma semana

  1. Dia 1–2: Finalize dataset e scorer; congele templates e esquemas. Faça um dry run com um modelo barato de baseline para validar métricas e custo.
  2. Dia 3: Calibração de concorrência. Para cada modelo, faça sweep de concorrência para achar o maior RPS que mantém p95 dentro do seu SLO (ex.: 700 ms para classificação, 2–6 s para long-form). Registre o joelho da curva onde aparecem timeouts.
  3. Dia 4–5: Avaliação completa. 1.500 itens × 4 modelos × 3 amostras = 18.000 chamadas. Intercale modelos em um cronograma de quadrado latino para evitar efeitos de horário. Use chaves de API e regiões separadas por modelo quando possível.
  4. Dia 6: Análise e ablações. Reexecute os dois melhores modelos em 300 casos de borda e com um segundo modelo juiz para confirmar a estabilidade do ranking.

Matemática de custos que não vai surpreender finanças

Não chute; orce com uma fórmula simples:

  • Tokens totais = itens × amostras × (média de tokens de prompt + média de tokens de completion)
  • Custo bruto = (tokens de entrada × input $/M) + (tokens de saída × output $/M)
  • Custo efetivo por item resolvido = custo bruto ÷ itens bem-sucedidos

Exemplo: 1.500 itens, 3 amostras, prompts de 800 tokens, outputs de 300 tokens ⇒ 1.500 × 3 × (800 + 300) = 4,95M tokens. A $2/M de input e $8/M de output (ilustrativo), divisão 800:300 ≈ 72%:28% ⇒ custo ≈ (3,56M × $2) + (1,39M × $8) ≈ $7,1K + $11,1K ≈ $18,2K para um modelo. Se doer, reduza amostras para n=2 e itens para 1.000 no primeiro passe e depois amplie para finalistas.

O ponto não é o número absoluto; é disciplina. Conheça seus tokens, conheça sua exposição e nunca rode às cegas.

Lendo resultados: como escolher vencedores que você consegue colocar em produção

Segmente por tarefa, não por achismo

  • Tarefas de JSON estrito: Prefira modelos com a menor taxa de quebra de esquema mesmo que sejam 10–15% mais lentos. JSON quebrado gera cascata de retries e travas de agentes.
  • Agentes com muitas tools: Meça acurácia de tool-call e contagem de etapas na cadeia. Um modelo que dá em média 1,2 etapas a menos muitas vezes vence um concorrente mais rápido em tokens.
  • Raciocínio/contexto longo: Classifique por taxa de vitória do juiz em latência fixa e por custo por resposta aprovada. Se um modelo menor entrega 92% de qualidade a 40% do custo, ele é a escolha de produção hoje, com caminho de upgrade depois.

Cortes de linha com os quais você consegue conviver

  • SLOs de latência: p95 ≤ 700 ms para classificação, ≤ 2,5 s para extração/interações de tool, ≤ 6 s para long-form. Ajuste ao seu UX.
  • Estabilidade: Deriva semanal na taxa de vitória ≤ 3% e deltas de quebra de esquema ≤ 1%. Se o p95 de um fornecedor deriva 15% semana a semana, faça dual-source ou descarte.
  • Teto de custo: Defina um máximo $ por 1.000 itens por tipo de tarefa. Resolva ao contrário para orçamentos de tokens por chamada para que o produto não entre em pânico depois.

Armadilhas que invalidam 60% dos benchmarks internos

  • Julgar com o modelo candidato: ele se bajula. Isole sempre o juiz; rotacione trimestralmente.
  • Execuções one-shot: não determinismo + variância transitória de API vai reorganizar seu ranking. Reproduza 20% dos itens e reporte intervalos de confiança.
  • Ilusões de warm-up: medir só logo após aquecimentos de cache produz p95s de fantasia. Sustente carga por minutos, não segundos.
  • Turbulência de template: se o produto edita o prompt no meio da execução, você está mesurando o template, não o modelo.
  • Queima oculta pré-token: runtimes de agente e setups estilo MCP podem gastar dezenas de milhares de tokens antes do primeiro token do usuário. Instrumente preâmbulos e system prompts explicitamente, ou você vai subcontar 10–30%.

Governança: logs, privacidade e reprodutibilidade

  • Logs em nível de evidência: Guarde digests de payload de request/response, contagem de tokens e decisões do juiz por 90 dias. Você vai precisar deles quando o produto perguntar por que você trocou de modelo — ou quando o jurídico perguntar o que a IA de fato fez.
  • Higiene de PII: Se você usar dados de produção, higienize ou sintetize. Evite vazar segredos de clientes para APIs de terceiros. Já publicamos em outros lugares sobre padrões de IA efêmera; aplique aqui também.
  • Artefato de release: Trate o vencedor como um pacote versionado: nome do modelo, região de API, hash do template de prompt, versão do esquema de tools e configurações de amostragem. Esta é sua unidade de rollback.

Uma cadeia de ferramentas pragmática

  • Bancada: Python + uv ou Go para determinismo. Evite notebooks inchados.
  • Dados/métricas: Parquet para resultados, DuckDB ou SQLite para análise. Mantenha consultável em um laptop.
  • Julgamento: Use um único prompt de juiz armazenado no Git. Opcionalmente adicione um segundo juiz para finalistas.
  • Orquestração: Uma fila de trabalho simples (Celery, Sidekiq ou um worker Go leve) supera pipelines superengenheirados. Adicione um tópico de dead-letter.
  • Observabilidade: OpenTelemetry spans com atributos: model, template_hash, tokens_in, tokens_out, retries, status, latency_ms.

Quando (e como) destilar ou fazer fine-tune depois do benchmark

Depois que sua bancada mostrar um vencedor estável para uma tarefa, considere um caminho de redução de custo:

  • Otimização só de prompt: geralmente rende 5–15% em qualidade e 10–20% menos tokens se você apertar instruções, exemplos e dicas de esquema. Rebenchmark para confirmar.
  • Fine-tune de modelos pequenos: Se seus dados são proprietários e estreitos, um modelo de 7–14B parâmetros ajustado em alguns milhares de itens rotulados pode igualar 80–90% de um modelo de fronteira a uma fração do custo e da latência. Sua bancada dirá se está bom o suficiente.
  • Destilação de conhecimento: Use seu melhor modelo como professor para rotular dados para um aluno menor. Fique de olho em limites legais e de política; faça benchmark do aluno na mesma bancada para você não embarcar regressões.

Por que isso importa para times nearshore e híbridos

Se você opera pods distribuídos (onshore + nearshore), seu benchmark vira a língua franca. Ele codifica decisões em código e números, não em threads do Slack. Um pod baseado no Brazil pode rodar a mesma bancada durante a noite, reportar deltas pela manhã, e vocês concordam em promover ou fazer rollback com evidências. Espere 6–8 horas de sobreposição diária para discussão, e execuções assíncronas em escala enquanto você dorme.

Como é o “bom” na prática

  • Revisão semanal de 30 minutos: Topline da última execução: taxa de vitória por tarefa, p95 por tier de RPS, custo por item resolvido, deriva desde a semana passada, regressões notáveis.
  • Critérios de promoção: Um modelo se forma quando supera o atual de produção em ≥5% na taxa de sucesso, atende SLOs de p95 e reduz custo por item resolvido em ≥10% — por duas execuções consecutivas.
  • Disciplina de rollback: Se a deriva excede 3% ou o p95 estoura o SLO por 2 horas, faça failback automático para o vencedor anterior. O versionamento do seu artefato torna isso trivial.

A verdade impopular

O modelo “melhor” no gráfico de outra pessoa pode ser seu terceiro lugar. Tudo bem. Seus clientes não usam benchmarks; eles usam seu produto. Construa a bancada uma vez, e você vai parar de discutir por vibe, parar de pagar caro por tokens que não precisa e começar a lançar upgrades com confiança.

Pontos-chave

  • Rankings públicos raramente refletem seus prompts, latências ou custos — construa um benchmark fiel ao workload.
  • Meça cinco coisas: taxa de sucesso, p95 no RPS alvo, custo por item resolvido, taxa de falha/recusa e deriva.
  • Use esquemas estritos para tarefas estruturadas e ELO multi-juiz pareado para abertas; calibre com humanos.
  • Faça varreduras de concorrência, cargas em estado estacionário e reproduza 20% dos itens para controlar não-determinismo.
  • Versione tudo: modelo, região, hash do prompt, esquema de tools e configurações de amostragem — esta é sua unidade de rollback.
  • Use a bancada para justificar operações de prompt, fine-tunes de modelos pequenos ou destilação quando superarem modelos de fronteira em custo por item resolvido.

Ready to scale your engineering team?

Tell us about your project and we'll get back to you within 24 hours.

Start a conversation