¿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

Llevar un registro de decisiones de IA

Después de esta lección: Puedo anotar las decisiones detrás de una función para que otros las sigan.

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

Registro de decisiones de una función de IA

Un registro de decisiones es una lista corta de las elecciones detrás de una función, cada una con sus opciones, su elección y su prueba. Importa porque dentro de seis meses nadie recordará por qué el equipo mantuvo el modelo pequeño.

El equipo de la biblioteca ha tomado cinco decisiones en cuatro semanas. Un script comprueba ahora que cada una apunta a un registro que existe.

Al final de esta lección

Nota

Puedo anotar las decisiones detrás de una función para que otros las sigan.

Palabras clave

PalabraQué significaEjemplo
Registro de decisionesuna lista fechada de elecciones y sus razones
Opciónuno de los caminos que podías tomar
Elecciónla opción que tomaste
Pruebaun registro que muestra por qué elegisteeval:v4
Revisarvolver a mirar cuando cambian las pruebas

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

Opciones, elección y prueba

Una entrada dice qué se decidió, qué opciones había, cuál se tomó y qué mostró que era acertada. Lleva fecha e identificador.

Las opciones son lo más importante. Una decisión con una sola opción no fue una decisión. El lector necesita ver a qué renunciaste.

Ejemplo: la decisión D4

CampoValor
DecisiónLimitar los intentos a 2
OpcionesTope de 2, o mantener 5
ElecciónTope de 2
Pruebaevent:cause_found y log:11

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

Una prueba es un enlace comprobable

Escribe la prueba como un identificador: eval:v4 para una serie, log:11 para una hora, event:cause_found para un evento. Un script puede entonces comprobar que cada una existe.

También puede detectar una entrada sin prueba, una elección que no está entre las opciones y un id usado dos veces.

Añade una entrada, nunca reescribas una

Las decisiones cambian cuando cambian las pruebas. No edites la entrada antigua. Añade una nueva que diga a cuál sustituye.

El registro muestra entonces lo que creías y cuándo, que es lo que necesita un lector.

Un error frecuente

Advertencia

Mucha gente cree que un registro de decisiones es papeleo que se escribe después. Escrito después, se convierte en una historia que encaja con el resultado. Escribe cada entrada el mismo día, con las pruebas de ese día.

Escribe el registro de decisiones, parte 1

Comando
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const fs = require(\"fs\");' 'const DECISIONS = [' '  { id: \"D1\", date: \"2026-03-02\", decision: \"Poner la hoja de datos en el prompt\", options: [\"en el prompt\", \"buscar primero\"], choice: \"en el prompt\", evidence: [\"eval:v1\"] },' '  { id: \"D2\", date: \"2026-03-09\", decision: \"Prohibir cifras que no estén en la hoja\", options: [\"añadir una regla\", \"no hacer nada\"], choice: \"añadir la regla\", evidence: [\"eval:v2\"] },' '  { id: \"D3\", date: \"2026-03-16\", decision: \"Mantener el modelo pequeño\", options: [\"modelo pequeño\", \"modelo mayor\"], choice: \"modelo pequeño\", evidence: [\"eval:v5\", \"cost:v5\"] },' > decisions.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 el registro de decisiones, parte 2

Comando
docker exec -w /home/node/project agent sh -c "printf '%s\n' '  { id: \"D4\", date: \"2026-03-24\", decision: \"Limitar los intentos a 2\", options: [\"tope de 2\", \"mantener 5\"], choice: \"tope de 2\", evidence: [\"event:cause_found\", \"log:11\"] },' '  { id: \"D5\", date: \"2026-03-25\", decision: \"Aceptar respuestas largas sobre impresión\", options: [\"aceptar\", \"acortar\"], choice: \"aceptar\", evidence: [] },' '];' 'fs.writeFileSync(\"decisions.json\", JSON.stringify(DECISIONS, null, 1));' >> decisions.js"

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

Crea decisions.json

Comando
docker exec -w /home/node/project agent node decisions.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 el comprobador del registro, parte 1

Comando
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const fs = require(\"fs\");' 'function known() {' '  const ids = [];' '  [\"v1\", \"v2\", \"v3\", \"v4\", \"v5\"].forEach(function (v) { ids.push(\"eval:\" + v); });' '  [\"08\", \"09\", \"10\", \"11\", \"12\", \"13\", \"14\"].forEach(function (h) { ids.push(\"log:\" + h); });' '  [\"sheet_published\", \"alert_fired\", \"cause_found\", \"attempts_capped\", \"cost_normal\"].forEach(function (c) { ids.push(\"event:\" + c); });' '  return ids;' '}' > check-log.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 el comprobador del registro, parte 2

Comando
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function run() {' '  const entries = JSON.parse(fs.readFileSync(\"decisions.json\", \"utf8\"));' '  const ids = known();' '  const seen = [];' '  let bad = 0;' '  for (const e of entries) {' '    const problems = [];' '    if (e.evidence.length === 0) problems.push(\"no_evidence\");' '    else if (e.evidence.some(function (id) { return ids.includes(id) === false; })) problems.push(\"unknown_evidence\");' '    if (e.options.includes(e.choice) === false) problems.push(\"bad_choice\");' '    if (seen.includes(e.id)) problems.push(\"duplicate_id\");' '    seen.push(e.id);' '    if (problems.length > 0) { bad = bad + 1; console.log(e.id, problems.join(\" \")); }' '  }' '  console.log(entries.length + \" decisiones, \" + bad + \" con problemas\");' '}' 'module.exports = { run };' 'if (require.main === module) run();' >> check-log.js"

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

Comprueba el registro

Comando
docker exec -w /home/node/project agent node check-log.js

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 imprime el comprobador

LíneaQué dice
D2bad_choice
D3unknown_evidence
D5no_evidence
Última línea5 decisiones, 3 con problemas

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

Escribe la corrección

Comando
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const fs = require(\"fs\");' 'const entries = JSON.parse(fs.readFileSync(\"decisions.json\", \"utf8\"));' 'entries[1].choice = \"añadir una regla\";   // la elección es una de las opciones' 'entries[2].evidence = [\"eval:v5\"];        // cost:v5 no es un registro' 'entries[4].evidence = [\"eval:v4\"];        // v4 aún tiene la respuesta larga, c9' 'fs.writeFileSync(\"decisions.json\", JSON.stringify(entries, null, 1));' 'require(\"./check-log\").run();' > fix-log.js"

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

Arregla el registro y comprueba de nuevo

Comando
docker exec -w /home/node/project agent node fix-log.js

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

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.