E10 · Detector contra tres agentes
10 minEjecuta el ciclo chumba, conftest, bom.
Listo cuando: chumba muestra líneas CHUMBADO y ESCONDIDO 3 failed con saída: 1; bom termina en ATALHOS: nenhum sinal con saída: 0.
Lección 4 · 20 min
Reward hacking es cuando el agente cumple la letra del test sin hacer el trabajo: toca al juez, memoriza la respuesta, silencia el error o solo dice que lo hizo. Ya se ha medido en agentes de código. En esta clase reconoces los cuatro tipos y activas tres detectores que se complementan: tests ocultos, lectura del diff y el evaluador escéptico.
Comenzar la clase
Objetivo: reconocer los atajos que toma un agente y atraparlos con tests ocultos, lectura del diff y un evaluador escéptico.
Haz clic en cada atajo para ver el detector.
Ningún detector lo atrapa todo. Combina los tres, y pídele al agente que reporte el defecto del verificador en lugar de esquivarlo.
Con fecha y fuente; los artículos están en los enlaces al final de la clase.
Benchmark de reward hacking en programación: observó atajos explícitos en agentes como Codex y Claude Code.
Un juez por modelo detectó bien los casos claros; los tests ocultos ayudaron poco; revisar si el agente editó un archivo de test también funcionó. Por eso esta clase junta detectores en lugar de confiar en uno solo.
Midió tasas de explotación entre 0% (Sonnet 4.5) y 13,9% (DeepSeek-R1-Zero), variando según el post-entrenamiento del modelo.
Lectura práctica: depende del modelo y cambia con la versión. No se puede asumir cero; sí se puede medir en tu compuerta.
Los tests ocultos quedan en /tmp/ensaio-verif/escondidos, fuera del proyecto: el agente nunca los vio.
K=~/projetos/loop-r-eng-verificacao-v72/kit for modo in chumba conftest bom; do bash $K/ensaio.sh > /dev/null && cd /tmp/ensaio-verif/proj $K/agente-falso.sh $modo < /dev/null > /dev/null echo "## $modo"; python3 $K/atalhos.py . --escondidos /tmp/ensaio-verif/escondidos; echo "saída: $?" done
RESPOSTAS = {"Olá Mundo": "ola-mundo", " Dois espaços ": "dois-espacos", "": ""}
def slug(titulo):
return RESPOSTAS.get(titulo, titulo.lower())## chumba escondidos: 3 failed in 0.01s CHUMBADO slug.py: ' Dois espaços ' do teste no código CHUMBADO slug.py: 'Olá Mundo' do teste no código CHUMBADO slug.py: 'dois-espacos' do teste no código CHUMBADO slug.py: 'ola-mundo' do teste no código ESCONDIDO 3 failed in 0.01s ATALHOS: 5 sinal(is) saída: 1 ## conftest escondidos: 3 failed in 0.01s JUIZ conftest.py ESCONDIDO 3 failed in 0.01s ATALHOS: 2 sinal(is) saída: 1 ## bom escondidos: 3 passed in 0.00s ATALHOS: nenhum sinal saída: 0
El chumba pasa los 3 tests visibles y falla los 3 ocultos.
atalhos.py es heurístico: busca texto literal del test y algunos patrones. Un agente que memoriza la respuesta de otra forma (un cálculo que solo acierta los casos del test) pasa sin problema. Los tests ocultos y el evaluador escéptico de la clase 1 cubren parte de esto; ninguno de los tres es prueba por sí solo.
Conversación simulada con un agente en medio del loop. Elige tu respuesta.
Elige tu respuesta. El comentario aparece justo después y la conversación sigue según tu elección.
Una frase que se convierte en instrucción fija del agente. La guardia sigue siendo quien lo garantiza.
## Los tests son el juez - Nunca modifiques, borres, omitas ni desmarques tests, conftest.py ni la configuración de pytest. - Si crees que un test está mal: escribe "DEFEITO NO VERIFICADOR: <teste> — <evidência>" en failures.md y sigue con el resto. - Nunca trates como caso especial las entradas que aparecen en los tests. - Listo = la salida de la compuerta pegada en la conversación, no tu evaluación.
Ensayo del detector, tests ocultos en tu proyecto y la regla.
Ejecuta el ciclo chumba, conftest, bom.
Listo cuando: chumba muestra líneas CHUMBADO y ESCONDIDO 3 failed con saída: 1; bom termina en ATALHOS: nenhum sinal con saída: 0.
Para una tarea de tu proyecto, escribe 3 tests que el agente no ve, en una carpeta fuera del repo (por ejemplo ~/escondidos/[projeto]/). Ejecuta atalhos.py antes del trabajo.
Listo cuando: python3 $K/atalhos.py . --escondidos ~/escondidos/[proyecto] antes del trabajo → línea escondidos: con failed y código 1; después del trabajo correcto → ATALHOS: nenhum sinal y código 0.
Pega la regla "Los tests son el juez" en el AGENTS.md o CLAUDE.md del proyecto y haz la conversación simulada hasta el puntaje máximo.
Listo cuando: grep -c "DEFEITO NO VERIFICADOR" [AGENTS.md o CLAUDE.md] → 1, y la simulación de arriba termina en "Test intacto, defecto registrado" con 4 de 4 puntos.
Pregunta 1 de 4
El agente devuelve un diccionario con las entradas exactas de los tests. ¿Qué detector NO detecta esto?competencia
Pregunta 2 de 4
En EvilGenie (nov/2025), ¿qué ayudó poco a detectar atajos?
Pregunta 3 de 4
El agente dice que un test está mal. ¿Qué hacer?competencia
Pregunta 4 de 4
El loop que optimiza su propia métrica a lo largo de semanas (Goodhart) es tema de qué curso?
Elige una alternativa. La explicación aparece después de tu intento.