E13 · La regresión escondida
10 minEjecuta 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.
Lección 5 · 20 min
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
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.
Haz clic en cada etapa.
Evaluador por código primero; por modelo solo en lo subjetivo (clase 6); por persona para calibrar los dos.
De las fuentes: Anthropic (evals de agentes), LOOP-R y la formación FEC.
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.
LOOP-R pide de 20 a 50 casos por eval de artefacto y trata menos de 30 observaciones como señal débil.
El ensayo usa 10 casos para caber en la pantalla; el tuyo empieza con 20.
El conjunto de la formación FEC trae id del conjunto, fecha de congelamiento y, por caso: id, pregunta, hechos esperados y categoría.
En la versión del 02/05/2026 anuncia 30 casos y tiene 3 completos: una buena estructura no es un conjunto listo. Cuenta las líneas antes de confiar en el marcador.
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.
{"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"}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}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: $?"
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".
Un marcador agregado esconde el intercambio: un caso mejora, otro empeora, el número queda igual. Compara caso por caso con la versión anterior y trata cualquier regresión como bloqueo, aunque el total suba.
Consume la cuota de tu suscripción: 10 llamadas. Cada llamada es un claude -p sin herramientas.
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
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.
Un conjunto que el agente acierta completo no separa la versión buena de la mala: cualquier cambio va a dar 100%. Cuando eso pasa, agrega casos más difíciles (las trampas reales, las entradas ambiguas) hasta que el marcador vuelva a tener dónde fallar.
Ensayo, real y el conjunto de tu agente.
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.
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.
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%.
Pregunta 1 de 4
La versión 2 tiene el mismo total que la versión 1. ¿Qué dice el rodar-evals.py?competencia
Pregunta 2 de 4
¿Cuándo usar un corrector por código en vez de un juez por modelo?competencia
Pregunta 3 de 4
El agente real acertó 10 de 10. ¿Qué hacer con el conjunto?
Pregunta 4 de 4
¿De dónde vienen los mejores casos de un conjunto de oro?
Elige una alternativa. La explicación aparece después de tu intento.