# 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: 1. remoção de expressões de autoidentificação (`como o GPT-5`, `I am Claude`, `我是 Kimi`, etc.); 2. remoção de nomes de produto e de provedor do elenco; 3. remoção de metadados (temperatura, tokens, provedor); 4. atribuição de rótulo opaco `SISTEMA-01..15`, sorteado por semente e **não** correlacionado com a ordem do elenco; 5. 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 um superou o outro; convertida em força pelo modelo de Bradley-Terry com 200 iterações. - **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; desvio > 15 pontos é sinalizado como "assimetria de idioma". - **Anticontaminação:** taxa de reprodução de canário e sobreposição de n-gramas (n=8) entre enunciado e resposta. ## 6. Reprodutibilidade Toda rodada grava `resultados//resumo.json` com: `seed`, `sha256` de cada arquivo do banco, versão do harness, identificadores exatos de modelo, temperatura, `max_tokens`, timeout, mapa de juízes e timestamps por etapa. Reexecutar com a mesma semente e o mesmo banco reproduz a ordenação dos itens e os rótulos opacos; notas de júri podem variar e são reportadas com intervalo. ## 7. Execução hoje ```bash 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 |