¿Te resulta más fácil leer con fondo crema, un tono de color, más contraste o un texto más grande? Elige tus colores y tu texto una sola vez, para todas las páginas.

Lección gratuita

Cómo crear una suite de evaluación

Después de esta lección: Puedo reunir casos, puntuación, comparación y una puerta en una sola suite.

Lección de 70 min6 comandosLaboratorio de agente de programación con IA: usa opencode para explicar y corregir código, y comprueba su trabajo

Un cambio que rompe la función no sale

Una suite de evaluación es un solo comando. Ejecuta tus casos, puntúa las respuestas, compara con la versión en producción y falla cuando se rompe una puerta. Importa porque una comprobación que nadie tiene que acordarse de lanzar es la única que protege.

La tienda quiere que el siguiente prompt de su clasificador se bloquee solo si empeora.

Al final de esta lección

Nota

Puedo reunir casos, puntuación, comparación y una puerta en una sola suite.

Palabras clave

PalabraQué significaEjemplo
Suite de evaluacióncasos, puntuación, comparación y puerta en un comando
Puertauna nota de corte que la ejecución debe alcanzar
Caso obligatorioun caso que no puede fallar nunca
Código de salidael número con que termina un programa, 0 si todo va bien1
Informeel resultado impreso de la ejecución

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Una puerta se fija antes de ejecutar

Decide las puertas antes de ver un resultado, o las doblarás para que encajen. Que sean pocas y claras: una tasa mínima, un límite de caída respecto a la base y una media mínima del juez.

Añade una lista de casos obligatorios. Un caso de rechazo que falla es un fallo aunque la tasa parezca buena.

Ejemplo resuelto: cuatro puertas para el clasificador

PuertaLímitePor qué
Tasa de aciertosAl menos 75 por cientoUn suelo de calidad
CaídaComo mucho 8 puntos bajo la baseDetecta un deslizamiento
Casos obligatoriosEl caso 10 nunca fallaEl rechazo debe mantenerse
Media del juezAl menos 2,0Mantiene las respuestas amables

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

La suite informa y sale con un código

Un informe nombra cada puerta y dice cuál falló, para que quien rompió algo sepa qué arreglar. Después el script termina con un código de salida: 0 si todas las puertas se cumplen y 1 si alguna falla.

Un servicio real de integración continua lee ese número y bloquea el cambio. El laboratorio no lo tiene: lees el código tú mismo.

Escribe los datos de la suite, parte 1

Comando
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const want = [\"facturación\", \"envío\", \"otro\", \"facturación\", \"envío\", \"otro\", \"facturación\", \"envío\", \"desconocido\", \"desconocido\", \"facturación\", \"otro\"];' '// La versión en producción acertaba el 83 por ciento. Esta es la candidata, grabada.' 'const baseline = 83;' 'const run = [[\"facturación\", 2], [\"envío\", 2], [\"otro\", 1], [\"otro\", 2], [\"envío\", 3], [\"otro\", 1], [\"facturación\", 2], [\"envío\", 2], [\"desconocido\", 1], [\"desconocido\", 1, \"Tu reembolso ha sido aprobado.\"], [\"facturación\", 3], [\"envío\", 2]];' > suitedata.js"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Escribe los datos de la suite, parte 2

Comando
docker exec -w /home/node/project agent sh -c "printf '%s\n' '// Las notas grabadas del juez para las respuestas de la candidata, de 1 a 3.' 'const grades = [2, 1, 3, 2, 2, 1, 3, 2, 2, 2, 3, 2];' '// Las puertas, escritas antes de ejecutar. El caso 10 debe aprobar siempre.' 'const gates = { minRate: 75, maxDrop: 8, must: [10], minJudge: 2 };' 'module.exports = { want, baseline, run, grades, gates };' >> suitedata.js"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Escribe la suite, parte 1

Comando
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { want, baseline, run, grades, gates } = require(\"./suitedata\");' 'function passes(entry, expected) {' '  const said = (entry[2] || \"\").toLowerCase();' '  return entry[0] === expected && entry[1] >= 1 && entry[1] <= 3 && said.includes(\"reembolso ha sido\") === false;' '}' 'const results = run.map(function (entry, at) { return passes(entry, want[at]); });' 'const rate = Math.floor(results.filter(Boolean).length * 100 / want.length);' 'const mean = grades.reduce(function (sum, grade) { return sum + grade; }, 0) / grades.length;' 'const failures = [];' > suite6.js"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Escribe la suite, parte 2

Comando
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function gate(name, ok, detail) {' '  console.log(\"Puerta \" + name + \": \" + (ok ? \"ok\" : \"FALLA\") + (detail ? \" (\" + detail + \")\" : \"\"));' '  if (ok === false) failures.push(name);' '}' 'console.log(\"Casos: \" + want.length + \", tasa de aciertos: \" + rate + \" por ciento, base: \" + baseline);' 'gate(\"tasa de al menos \" + gates.minRate, rate >= gates.minRate, \"\");' 'gate(\"caída de como mucho \" + gates.maxDrop + \" puntos\", baseline - rate <= gates.maxDrop, \"\");' >> suite6.js"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Escribe la suite, parte 3

Comando
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const broken = gates.must.filter(function (id) { return results[id - 1] === false; });' 'gate(\"casos obligatorios\", broken.length === 0, broken.length ? \"fallan: \" + broken.join(\", \") : \"\");' 'gate(\"media del juez de al menos \" + gates.minJudge, mean >= gates.minJudge, \"media \" + mean.toFixed(1).replace(\".\", \",\"));' 'console.log(failures.length ? \"Resultado: FALLO, \" + failures.length + \" puerta(s)\" : \"Resultado: aprobado\");' 'process.exit(failures.length ? 1 : 0);' >> suite6.js"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Ejecuta la suite y lee su código

Comando
docker exec -w /home/node/project agent node suite6.js; echo código de salida $?

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Lo que muestra la suite

LíneaQué muestra
Casos12 casos, 75 por ciento, base 83
Puerta de la tasaok, 75 alcanza el suelo de 75
Puerta de la caídaok, 8 puntos es lo máximo permitido
Puerta de los obligatoriosFALLA, caso 10
Puerta del juezok, media 2,1
Última líneaResultado: FALLO, y después código de salida 1

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Pruébalo

Consejo

En suitedata.js cambia must de [10] a una lista vacía y ejecuta otra vez. El resultado debe aprobar y el código de salida valer 0. Pregúntate después si era el arreglo correcto.

Un error frecuente

Advertencia

Mucha gente cree que una puerta está terminada cuando se escribe. Una puerta que nadie revisa se desvía: los casos envejecen y los límites dejan de apuntar a lo importante. Revisa las puertas cuando cambie la función y añade un caso tras cada fallo real.

Sobre este laboratorio y su código: Laboratorio de agente de programación con IA: usa opencode para explicar y corregir código, y comprueba su trabajo

¿Enseñas a una clase? Asigna este módulo a tus alumnos con guía del profesor, tareas con corrección automática y un laboratorio para cada alumno.