Verificación y Evals|INEMA.CLUB-PRO

Lección 6 · 22 min

Juez por modelo con rúbrica calibrada

No todo se convierte en test: "¿el mensaje explica el porqué?" pide lectura. Un modelo puede juzgar eso, siempre que la rúbrica sea sí/no, el juicio se repita y el juez haya sido comparado con etiquetas tuyas antes de valer. En esta clase calibras un juez falso (que falla), después uno real, y ves cómo la calibración encuentra una rúbrica ambigua.

Comenzar la clase
Balanza de precisión de laboratorio con pesas de calibración al lado, sobre una mesa oscura.

En esta clase vas a

  1. 1Rúbrica sí/no, criterio invariable y lo que queda fuera de ella
  2. 2Tres repeticiones, orden mezclado, vale la mayoría
  3. 3Concordancia y kappa: por qué 80% puede no bastar
  4. 4Un juez sin respuesta no es un juez que reprobó

Objetivo: escribir una rúbrica sí/no, ejecutar un juez con repeticiones y usarlo solo después de calibrado contra etiquetas humanas.

01El juez solo vale después de calibrado

Haz clic en cada etapa.

Haz clic en cada bloque del diagrama para ver qué hace.

Sesgos conocidos del juez por modelo: prefiere la respuesta más larga, la posición de una de las opciones en una comparación y el estilo del propio modelo.

02La rúbrica del ensayo

Mensajes de commit escritos por un agente. 10 mensajes en kit/juiz/artefatos.jsonl, con las etiquetas de una persona en humano.csv.

kit/juiz/rubrica.md (traducción para leer; el archivo del kit está en portugués)
# Rúbrica — mensaje de commit escrito por el agente

Criterios sim/nao. Nunca nota de 1 a 10. (invariável) = un "nao" reprueba el mensaje, independientemente del resto.
Lo que se puede comprobar por código (tamaño de la 1ª línea, formato) NO entra aquí: va a un test.

R1 | ¿El mensaje dice POR QUÉ se hizo el cambio, no solo qué cambió? | qualidade
R2 | ¿Todo CAMBIO que cita el mensaje está en el diff (no inventa archivo, test ni efecto)? El motivo puede venir de fuera del diff. | invariável
R3 | ¿Quien no vio el diff entiende qué cambió solo por el mensaje? | qualidade
Terminal · ensayo con el juez falso
J=~/projetos/loop-r-eng-verificacao-v72/kit/juiz
python3 $J/juiz.py --rep 3 --saida /tmp/juiz-falso.csv
python3 $J/calibrar.py $J/humano.csv /tmp/juiz-falso.csv; echo "saída: $?"
Ejemplo del repositorio
a01  R1=sim R2=sim R3=sim
a02  R1=nao R2=sim R3=nao
a03  R1=sim R2=sim R3=sim
(… a04 a a10 …)
→ /tmp/juiz-falso.csv
10 artefatos rotulados pelos dois
R1  concordância 80%  kappa 0.55  REESCREVA ou troque o juiz  (discorda em a03 a09)
R2  concordância 70%  kappa 0.00  REESCREVA ou troque o juiz  (discorda em a03 a05 a09)
R3  concordância 100%  kappa 1.00  ok
JUIZ DESCALIBRADO em R1, R2: não use para aprovar
saída: 1

El juez falso dice "sí" en R2 para todo: nunca revisa el diff. La calibración lo detectó. Fíjate en R1: 80% de concordancia parece aprobar, pero el kappa (0,55) muestra que buena parte es azar.

03El juez real y lo que encontró la calibración

Consume la cuota de tu suscripción: 30 llamadas (10 mensajes × 3). El 19/10/2026 esto se ejecutó dos veces; la primera mostró un defecto de la rúbrica, no del juez.

Terminal · juez real (continúa del bloque anterior)
JUIZ_CMD='claude -p --tools ""' python3 $J/juiz.py --rep 3 --saida /tmp/juiz-real.csv
python3 $J/calibrar.py $J/humano.csv /tmp/juiz-real.csv; echo "saída: $?"
Ejemplo del repositorio
a01  R1=sim R2=sim R3=sim
a02  R1=nao R2=sim R3=nao
a03  R1=nao R2=nao R3=sim  instável: R1 2×1, R3 2×1  REPROVA (R2 invariável)
a04  R1=sim R2=sim R3=sim
a05  R1=sim R2=sim R3=sim
(… a06 a a08 …)
a09  R1=nao R2=nao R3=sim  instável: R1 2×1  REPROVA (R2 invariável)
a10  R1=sim R2=sim R3=sim
→ /tmp/juiz-real.csv
10 artefatos rotulados pelos dois
R1  concordância 100%  kappa 1.00  ok
R2  concordância 90%  kappa 0.74  ok  (discorda em a05)
R3  concordância 100%  kappa 1.00  ok
JUIZ CALIBRADO
saída: 0

Claude Code 2.1.303, modelo predeterminado de la suscripción, 3 min 12 s. La divergencia que quedó: a05 dice que aumentar la sesión "melhora a segurança"; la persona lo marcó como efecto inventado, el juez lo aceptó.

04Práctica

Juez falso, juez real y la rúbrica de tu caso.

E16 · Calibrar el juez falso

10 min

Ejecuta el ensayo con el juez falso.

Listo cuando: la última línea antes del código es JUIZ DESCALIBRADO em R1, R2: não use para aprovar y saída: 1.

E17 · Calibrar el juez real

15 min

Ejecuta el bloque real con claude -p o codex exec en solo lectura.

Listo cuando: calibrar.py imprime una línea para cada uno de R1, R2 y R3 y termina en JUIZ CALIBRADO (código 0) o JUIZ DESCALIBRADO (código 1). Si se descalibró, di qué criterio reescribirías.

E18 · Rúbrica y etiquetas de tu caso

45 min

Elige un artefacto subjetivo de tu agente (resumen, respuesta, mensaje). Escribe 3 criterios sí/no, uno invariable, y etiqueta tú mismo 10 artefactos en humano.csv. Ejecuta el juez real y calibra.

Listo cuando: python3 $J/calibrar.py humano.csv /tmp/juiz.csv → primera línea 10 artefatos rotulados pelos dois; cada criterio con ok o reescrito hasta quedar ok.

05Test de la clase

Pregunta 1 de 4

¿Por qué la rúbrica es sí/no y no una nota de 1 a 10?competencia

06En tres frases

Rúbrica binariaPreguntas de sí o no, invariables eliminatorias; lo que se puede comprobar con código va a un test.
Repetir y calibrarTres repeticiones con orden aleatorio y, antes de usar, concordancia de 80% y kappa de 0,6 contra etiquetas tuyas.
La calibración encuentra una rúbrica malaLa divergencia puede ser del criterio, no del juez; y un juez sin respuesta es un error, no una reprobación.

Para ir más allá

Lección anteriorSiguiente lección