Verificación y Evals|INEMA.CLUB-PRO

Lección 5 · 20 min

Conjunto de oro: evals de tu agente

Cambiaste el prompt, cambiaste el modelo, instalaste una skill: ¿el agente quedó mejor o solo distinto? Un conjunto de oro es una lista congelada de casos reales con la respuesta correcta, verificada por código, que ejecutas en cada cambio. En esta lección armas uno, comparas dos versiones y ves una regresión escondida detrás del mismo total.

Comenzar la clase
Cajón de acero abierto con tarjetas de muestra y piezas de referencia en compartimentos.

En esta clase vas a

  1. 1El formato del caso: id, categoría, entrada, esperado, origen
  2. 2Los tres tipos de corrector: código, modelo y persona
  3. 3Marcador por categoría y regresión caso a caso
  4. 4Cuando el conjunto quedó demasiado fácil

Objetivo: armar un conjunto de oro con casos reales, nota por código y comparación con la versión anterior que detecta regresión.

01Del error real al veredicto de regresión

Haz clic en cada etapa.

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

Evaluador por código primero; por modelo solo en lo subjetivo (clase 6); por persona para calibrar los dos.

02Reglas de un conjunto de oro

De las fuentes: Anthropic (evals de agentes), LOOP-R y la formación FEC.

1. Tres evaluadores

Por código (tests, análisis estático, revisar las llamadas a herramientas), por modelo (rúbrica, comparación por pares, varios jueces) y por persona.

El evaluador por modelo necesita calibrarse con etiquetas humanas antes de valer.

03El conjunto y el agente del ensayo

Un agente de triaje de issues: devuelve el tipo (bug, pedido, duda) y si es urgente. Los 10 casos son ejemplos escritos para el curso.

kit/evals/casos.jsonl (3 de 10 líneas; traducción para leer; el archivo del kit está en portugués)
{"id": "t01", "categoria": "bug", "entrada": "Después del deploy de ayer, el login devuelve error 500 para todos los usuarios.", "espera": {"tipo": "bug", "urgente": true}, "origem": "ejemplo del curso"}
{"id": "t06", "categoria": "pedido", "entrada": "¿Pueden agregar exportación a PDF?", "espera": {"tipo": "pedido", "urgente": false}, "origem": "ejemplo del curso"}
{"id": "t07", "categoria": "armadilha", "entrada": "El sistema no funciona como yo esperaba: ¿dónde está la opción de modo oscuro?", "espera": {"tipo": "duvida", "urgente": false}, "origem": "ejemplo del curso: parece bug, es duda"}
kit/evals/prompt-triagem.md (traducción para leer; el archivo del kit está en portugués)
Tú haces el triaje de issues de un sistema web. Lee la issue al final y clasifícala.

tipo: "bug" (algo roto), "pedido" (funcionalidad nueva) o "duvida" (pregunta de uso).
urgente: true solo si hay sistema caído, pérdida de dinero o de datos, o falla de seguridad.

Responde solo con una línea de JSON, sin nada más:
{"tipo": "bug", "urgente": false}
Terminal · ensayo: versión 1 contra versión 2
E=~/projetos/loop-r-eng-verificacao-v72/kit/evals; mkdir -p /tmp/ensaio-evals
A="python3 $E/agente-triagem-falso.py"
TRIAGEM_VERSAO=1 python3 $E/rodar-evals.py --agente "$A" --saida /tmp/ensaio-evals/v1.tsv; echo "saída: $?"
TRIAGEM_VERSAO=2 python3 $E/rodar-evals.py --agente "$A" --saida /tmp/ensaio-evals/v2.tsv \
  --base /tmp/ensaio-evals/v1.tsv; echo "saída: $?"
Ejemplo del repositorio
armadilha  0/1
bug        5/5
duvida     2/2
pedido     2/2
total      9/10 (90%)  → /tmp/ensaio-evals/v1.tsv
saída: 0
armadilha  1/1
bug        5/5
duvida     2/2
pedido     1/2
total      9/10 (90%)  → /tmp/ensaio-evals/v2.tsv
MELHOROU  t07
REGRESSÃO t06 (passava em v1.tsv)
1 regressão(ões): não promova
saída: 1

Las dos versiones hacen 9/10. La versión 2 arregló la trampa (t07) y rompió un pedido (t06, que termina en "?" y pasó a ser duda). Solo el total diría "empate".

04El mismo conjunto con el agente real

Consume la cuota de tu suscripción: 10 llamadas. Cada llamada es un claude -p sin herramientas.

Terminal · real (continúa del bloque anterior)
python3 $E/rodar-evals.py --agente 'claude -p --tools ""' --saida /tmp/ensaio-evals/real.tsv \
  --base /tmp/ensaio-evals/v1.tsv; echo "saída: $?"
# ou: --agente 'codex exec -s read-only --skip-git-repo-check -'
wc -l < /tmp/ensaio-evals/real.tsv
Ejemplo del repositorio
armadilha  1/1
bug        5/5
duvida     2/2
pedido     2/2
total      10/10 (100%)  → /tmp/ensaio-evals/real.tsv
MELHOROU  t07
sem regressão
saída: 0
11

Claude Code 2.1.303, modelo estándar de la suscripción, 1 min 19 s para los 10 casos. El marcador del modelo puede cambiar en tu máquina; el archivo con 11 líneas (encabezado + 10), no.

05Práctica

Ensayo, real y el conjunto de tu agente.

E13 · La regresión escondida

10 min

Ejecuta el ensayo de las dos versiones.

Listo cuando: v1 imprime total 9/10 (90%) y saída: 0; v2 imprime REGRESSÃO t06 (passava em v1.tsv) y saída: 1.

E14 · El mismo conjunto con el modelo

10 min

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

Listo cuando: el comando termina con una línea total y wc -l < /tmp/ensaio-evals/real.tsv → 11.

E15 · El conjunto de oro de tu agente

40 min

Elige un agente o un prompt tuyo con salida verificable. Escribe 20 casos en el formato del casos.jsonl, empezando por las fallas que ya has visto, y un prompt que pida JSON. Ejecuta la versión actual como base.

Listo cuando: wc -l < [tus casos].jsonl → 20 o más, y python3 $E/rodar-evals.py --agente "[tu agente]" --casos [tus casos].jsonl --prompt [tu prompt] --saida base.tsv imprime la línea total con menos de 100%.

06Test de la clase

Pregunta 1 de 4

La versión 2 tiene el mismo total que la versión 1. ¿Qué dice el rodar-evals.py?competencia

07En tres frases

Casos reales, congeladosUna línea de JSON por caso, con esperado y origen; cambiar un caso es una versión nueva de la regla.
El código corrigePide JSON y verifica campo por campo; juez por modelo solo para lo subjetivo.
La regresión bloqueaCompara caso por caso con la versión anterior; un total igual puede esconder un intercambio.

Para ir más allá

Lección anteriorSiguiente lección