SISTEMA DE AVALIAÇÃO — Benchmark Cego Multidomínio Multilíngue (v1.0)
Este documento descreve a arquitetura do sistema que executa o REGULAMENTO.md.
A implementação de referência está em harness/ e roda hoje, sem dependências externas
(Python 3.10+, apenas biblioteca padrão), em modo mock (determinístico, sem chaves de API)
ou modo ao vivo (chaves por variável de ambiente).
1. Visão geral
┌──────────────────────────── CEGO DUPLO ────────────────────────────┐
│ │
banco/ (700) ──►│ 1 CÁRREGAMENTO 2 APLICAÇÃO 3 ANONIMIZAÇÃO 4 JULGAMENTO │
jsonl │ + canários (15 IAs) (SISTEMA-XX) (3 juízes) │
│ │
└────────────────────────────────────────────────────────────────────┘
│
┌───────────────────────────┼───────────────────────────┐
▼ ▼ ▼
5 AGREGAÇÃO 6 ESTATÍSTICA 7 RELATÓRIO
notas 0–100 IC 95% bootstrap leaderboard.md
por domínio/idioma matriz Bradley-Terry resultados.csv
2. Módulos
| Módulo | Arquivo | Responsabilidade |
|---|---|---|
| Configuração | harness/config.json | elenco, endpoints, chaves (por env), juízes, sementes, limites |
| Banco | harness/bank.py | carregamento, validação de schema, deduplicação, split calibração/prova, injeção de canário, hash do banco |
| Provedores | harness/providers.py | cliente HTTP mínimo para API de chat, retry com backoff, medição de latência e tokens, captura de recusa |
| Mock | harness/mock.py | provedor determinístico que simula capacidade por IA (perfil de qualidade fixo), usado para ensaio do pipeline |
| Anonimizador | harness/blind.py | remove autoidentificação, marcas de produto e metadados; atribui SISTEMA-XX; embaralha com semente |
| Juízes | harness/judge.py | prompt de rubrica ancorada (pt/en/zh), extração de nota por critério, cálculo de divergência, acionamento do adjudicador |
| Estatística | harness/stats.py | médias, desvio, IC bootstrap 95%, matriz de confronto, Elo/Bradley-Terry, sobreposição de n-gramas |
| Relatório | harness/report.py | leaderboard.md, resultados.csv, itens.csv, auditoria.csv, resumo.json |
| Orquestrador | harness/run.py | pipeline completo, --mock, --limit, --seed, --out, logs e retomada |
| Testes | tests/ | validação do banco, estatística e anonimização |
3. Cegueira dupla
**Cegueira do avaliado (art. 18).** O prompt de aplicação é neutro: não menciona benchmark, concorrentes, domínio do banco nem total de itens. A instrução de sistema é idêntica para todos.
**Cegueira do juiz (art. 19).** O anonimizador aplica, em ordem:
- remoção de expressões de autoidentificação (
como o GPT-5,I am Claude,我是 Kimi, etc.); - remoção de nomes de produto e de provedor do elenco;
- remoção de metadados (temperatura, tokens, provedor);
- atribuição de rótulo opaco
SISTEMA-01..15, sorteado por semente e não correlacionado com a ordem do elenco; - apresentação em ordem aleatória reproduzível.
O mapa `SISTEMA-XX → participante` só é materializado no relatório final, depois de todas as notas consolidadas.
4. Instrumentos de medição
4.1 Itens objetivos (mcq, calc)
Correção determinística: `mcq` compara a alternativa declarada; `calc` compara o valor numérico com tolerância declarada no item. Zero depende de formato: a resposta é normalizada (minúsculas, remoção de pontuação, extração do primeiro número com unidade) antes da comparação.
4.2 Itens abertos e rubrica ancorada
Cada item aberto traz `rubric` com 3 a 5 critérios. O prompt do juiz exige:
- pontuar cada critério de 0 a 5;
- citar o trecho da resposta que sustenta a nota;
- não pontuar por extensão, estilo ou fluência;
- não reescrever a resposta do avaliado.
A nota do item é a média aritmética dos critérios, limitada a 0–5, convertida para a escala de pontos do item (máx. 5).
4.3 Júri de três e adjudicação
Três juízes independente (perfis distintos: `strict`, `balanced`, `lenient`) pontuam sem se ver. Divergência máxima > 1,5 ⇒ `adjudicator` repontua com acesso à rubrica e às três notas, mas sem acesso à identidade (que continua oculta). A nota do adjudicador substitui a média.
4.4 Auditoria humana
10% dos itens abertos são amostrados com semente e pontuados por humano. O desvio humano–média é calculado por item; itens com desvio > 1,0 são anulados na rodada.
5. Estatística
- Nota normalizada por recorte = pontos ÷ possíveis × 100.
- IC 95% por bootstrap com 1.000 reamostragens sobre os itens (semente fixa).
- Empate técnico: diferença menor que a média das meias-amplitudes dos dois intervalos.
- Matriz de confronto: para cada par de participantes, contagem de itens em que
- Elo derivado da força BT (escala 1.500 ± 400), publicado apenas como leitura de robustez.
- Paridade multilíngue: para cada participante, razão entre a nota em zh e em en;
- Anticontaminação: taxa de reprodução de canário e sobreposição de n-gramas (n=8)
um superou o outro; convertida em força pelo modelo de Bradley-Terry com 200 iterações.
desvio > 15 pontos é sinalizado como "assimetria de idioma".
entre enunciado e resposta.
6. Reprodutibilidade
Toda rodada grava `resultados/
7. Execução hoje
cd /home/matheus/benchmark-cego
make validate # valida o banco de 700 itens
make demo # rodada completa em modo mock (sem chaves) → resultados/demo/
make live # rodada ao vivo (requer chaves em .env)
make test # testes unitários
`make demo` produz, em minutos, um leaderboard completo com 15 sistemas simulados, evidenciando que o pipeline — cegueira, júri, adjudicação, estatística e relatório — está operacional antes de qualquer gasto com API.
8. Escalada prevista (roadmap)
| Fase | Entrega | Status |
|---|---|---|
| 0 | Banco 700 itens + regulamento + harness mock | entregue nesta versão |
| 1 | Rodada de calibração com 3 juízes e 2 revisores humanos | próximo passo |
| 2 | Rodada ao vivo com os 15 participantes, 2 execuções por item | requer chaves |
| 3 | Painel contínuo (a cada trimestre) com detecção de deriva | previsto |
| 4 | Abertura pública do banco após 90 dias (art. 42) | previsto |
9. Riscos conhecidos e mitigações
| Risco | Mitigação |
|---|---|
| Contaminação do banco | canários + sigilo + variantes + n-gramas |
| Viés do juiz a favor do próprio fornecedor | juiz não pode julgar a si ou ao grupo (art. 7º); 3 juízes de fornecedores distintos |
| Juiz premia respostas longas | rubrica ancorada por critério + auditoria humana |
| Assimetria de idioma | paridade verificada na calibração; itens formulados no idioma de aplicação |
| Mudança de versão no meio da rodada | congelamento de model + repetição integral (art. 9º) |
| Custo | modo mock para ensaio; --limit e --only-domain para rodadas parciais |