¿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

Registros de auditoría y retención de datos

Después de esta lección: Puedo escribir registros de auditoría sin contenido privado y borrarlos cuando acaba su tiempo de retención.

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

Quién pidió eso al asistente

Un registro de auditoría dice quién hizo qué y cuándo, sin guardar el texto privado. Importa porque, cuando algo falla, hay que reconstruir lo ocurrido sin haber copiado los mensajes de todos.

El martes una herramienta rechaza una petición rara. El viernes alguien pregunta por qué. Un registro con un identificador, el nombre de la herramienta, un resultado y una hora lo responde. Una copia del chat también, y sería un riesgo.

Al final de esta lección

Nota

Puedo escribir registros de auditoría sin contenido privado y borrarlos cuando acaba su tiempo de retención.

Palabras clave

PalabraQué significaEjemplo
Registro de auditoríauna nota de quién hizo qué, cuándo y con qué resultado
Retencióncuánto tiempo se guarda un registro
Purgaborrar los registros que han pasado su tiempo
Reloj simuladouna hora que fija tu código, para que una prueba controle el tiempo
Identificadorun código que representa a una persona sin nombrarlau-17

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

Anota quién, qué y cuándo

Escribe un registro pequeño por cada cosa que hizo la función. Limítate a una lista fija de campos. Todo lo demás, como un prompt o una respuesta, se descarta antes de guardar.

Usa un identificador para la persona, no un nombre. Añade registros y no los edites nunca, para que el registro siga siendo fiable.

Ejemplo: un registro de auditoría

CampoEjemploPor qué está
atuna horaCuándo ocurrió
id1Un número para cada registro, que pone el script
useru-17Quién pidió, sin nombre
actionread_noteQué hizo la función
outcomepermitidaQué decidieron las comprobaciones
tokens120Lo que costó, en una cuenta
(no se guarda)el texto del promptPuede contener datos personales

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

Guarda los registros mientras sirvan

Cada registro tiene una razón, y esa razón termina. Elige un tiempo de retención por tipo: corto para el texto del chat, más largo para los registros de auditoría. Luego borra lo más antiguo.

Las obligaciones legales varían según el país y el sector: comprueba las que te afecten antes de elegir un número.

Escribir el script de auditoría, parte 1

Comando
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const DAY = 24 * 60 * 60 * 1000;' 'let now = Date.UTC(2026, 0, 1);' 'const allowed = [\"user\", \"action\", \"outcome\", \"tokens\"];' 'const log = [];' '' '// Un registro de auditoría guarda quién, qué y cuándo. Nunca el texto.' 'function record(fields) {' '  const clean = { at: now, id: log.length + 1 };' '  for (const key of allowed) {' '    if (key in fields) clean[key] = fields[key];' '  }' '  log.push(clean);' '  return clean;' '}' > audit.js"

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

Escribir el script de auditoría, parte 2

Comando
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'record({ user: \"u-17\", action: \"read_note\", outcome: \"permitida\", tokens: 120, prompt: \"Hola, soy Lucía\" });' 'now = now + 20 * DAY;' 'record({ user: \"u-18\", action: \"run_shell\", outcome: \"rechazada\", tokens: 0 });' 'now = now + 20 * DAY;' 'record({ user: \"u-17\", action: \"add_numbers\", outcome: \"permitida\", tokens: 60 });' 'console.log(\"Campos guardados: \" + Object.keys(log[0]).join(\", \"));' 'console.log(\"Prompt guardado: \" + (\"prompt\" in log[0]));' >> audit.js"

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

Escribir el script de auditoría, parte 3

Comando
docker exec -w /home/node/project agent sh -c "printf '%s\n' '// Retención: guardar un registro 30 días y luego borrarlo.' 'const KEEP = 30 * DAY;' 'function purge(list, at) {' '  return list.filter(function (item) { return at - item.at <= KEEP; });' '}' 'const left = purge(log, now);' 'console.log(\"Antes: \" + log.length + \", después: \" + left.length);' 'console.log(\"Identificadores que quedan: \" + left.map(function (item) { return item.id; }).join(\", \"));' >> audit.js"

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

Ejecutar el script de auditoría

Comando
docker exec -w /home/node/project agent node audit.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 muestra el script

LíneaQué indica
Campos guardados: at, id, user, action, outcome, tokensEl campo prompt se descartó
Prompt guardado: falseNada privado llegó al registro
Antes: 3, después: 2El primer registro tiene 40 días y el límite es 30
Identificadores que quedan: 2, 3Los dos registros recientes sobreviven

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

Una lista hace de almacén real

El script guarda su registro en un array y mueve a mano un reloj simulado. Un sistema real usa una base de datos, con copias de seguridad y control de acceso, y una tarea programada que purga.

Las copias de seguridad también cuentan. Un registro borrado de la base sigue en la copia del mes pasado, salvo que la copia caduque también.

Un error frecuente

Advertencia

Mucha gente cree que registrar más siempre es más seguro. Un registro que guarda cada prompt es en sí un almacén de datos personales, y hay que protegerlo y borrarlo como tal. Registra los campos que necesitarás para responder a una pregunta, y no más.

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.