¿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

Transparencia de la IA y registros

Después de esta lección: Puedo avisar de que hay una IA, etiquetar lo que crea y guardar los registros que necesita una revisión.

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

¿Era una persona o un programa?

La transparencia de la IA consiste en avisar a la gente cuando trata con un sistema de IA y mostrar lo que ha creado. Importa porque confiamos de otra forma en una respuesta si sabemos que la escribió un programa.

La otra mitad es guardar registros. Cuando algo sale mal, una revisión necesita saber qué se preguntó, qué modelo respondió y quién lo aprobó.

Al final de esta lección

Nota

Puedo avisar de que hay una IA, etiquetar lo que crea y guardar los registros que necesita una revisión.

Palabras clave

PalabraQué significaEjemplo
Avisodecir a alguien que trata con una IA
Etiquetauna marca visible que dice que lo hizo la IA
Registrouna nota guardada de una respuesta de la IA
Versión del modeloel modelo exacto que respondióv3
Conservacióncuánto tiempo se guarda un registro
Ficha del sistemauna página corta que describe una función de IA

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

Avisa de que responde una IA

Dilo antes de que la persona confíe en la respuesta, en un sitio donde lo vea. Ponlo al empezar un chat, junto a una respuesta o en las primeras palabras de una llamada.

Añade en una línea qué puede hacer y qué no, y cómo hablar con una persona. Fijar expectativas a fondo se enseña en Cómo fijar expectativas de una función de IA.

Etiqueta lo que hizo la IA

Un texto, una imagen o un resumen hecho por un modelo lleva una etiqueta corta que el lector puede ver. La etiqueta dice quién lo hizo, no si está bien.

Cuando un archivo sale de tu producto, pon también una nota en sus propiedades. Así la etiqueta sigue ahí aunque alguien copie el archivo.

Ejemplo resuelto: dónde decirlo

LugarQué ve la persona
Al empezar un chatEstás hablando con un asistente de IA. Una persona puede atenderte.
Debajo de una imagenHecho con IA
Al pie de un borrador de correoRedactado con IA, revisado por Lucía Romero
Primeras palabras de una llamadaTe atiende un asistente automático.

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

Qué debe guardar un registro

Un registro guarda qué se preguntó, qué versión del modelo respondió y qué persona aprobó una acción. Sin la versión, nadie puede saber qué modelo se equivocó.

Guarda un registro solo mientras una revisión lo necesite, y deja fuera los datos personales que no hagan falta. Registrar sin riesgos se enseña en Registrar con seguridad en una aplicación de IA, y los datos personales en Privacidad y protección de datos.

Un error frecuente

Advertencia

Mucha gente cree que más registros siempre dan más seguridad, así que lo guarda todo para siempre. Un registro lleno de datos personales, guardado durante años, es un riesgo en sí mismo. Guarda solo los campos que necesita una revisión, y solo el tiempo que los necesita.

Una ficha corta describe la función

Una ficha del sistema, o ficha del modelo, es una página corta sobre una función o un modelo de IA. Da su propósito, sus límites, cómo se evaluó, quién es su responsable y cómo contactar con esa persona.

Escríbela para alguien que nunca ha visto la función. Un campo en blanco es un hueco, igual que un hueco en una revisión.

Las normas lo piden cada vez más

Las normas de la UE y del Reino Unido piden cada vez más a quien crea IA que avise, etiquete y guarde registros. Qué pide cada norma, y desde cuándo, cambia según el lugar y con el tiempo.

Esto es información general, no asesoramiento jurídico: consulta el texto oficial vigente o pregunta a alguien cualificado. Hacer estas cosas no basta por sí solo para que un producto cumpla ninguna norma.

Ejemplo resuelto: una ficha corta

CampoAyudante de pedidos
PropósitoResponde preguntas sobre pedidos
LímitesNo puede cambiar pagos ni direcciones
Evaluaciones40 casos grabados, 37 aprobados
ResponsableMarta Gil
Contacto[email protected]

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

Escribe el ayudante del modelo, parte 1

Comando
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const base = process.env.AI_URL || \"http://ai:4000\";' '// Los tokens de una respuesta, o null si no trae ninguno.' 'function count(data, name) {' '  return data.usage && typeof data.usage[name] === \"number\" ? data.usage[name] : null;' '}' > model.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 ayudante del modelo, parte 2

Comando
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function ask(messages, sample, max) {' '  try {' '    const res = await fetch(base + \"/v1/chat/completions\", {' '      method: \"POST\",' '      headers: { \"content-type\": \"application/json\", authorization: \"Bearer lab\" },' '      body: JSON.stringify({ model: \"lab\", messages: messages, max_tokens: max || 100 }),' '      signal: AbortSignal.timeout(30000),' '    });' '    if (res.ok === false) throw new Error(\"estado \" + res.status);' '    const d = await res.json();' '    return { text: d.choices[0].message.content, inTokens: count(d, \"prompt_tokens\"), outTokens: count(d, \"completion_tokens\"), recorded: false };' '  } catch (error) {' '    console.log(\"Muestra grabada: ningún modelo respondió (\" + error.message + \").\");' '    return { text: sample, inTokens: null, outTokens: null, recorded: true };' '  }' '}' 'module.exports = { ask };' >> model.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 comprobación de registros, parte 1

Comando
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { ask } = require(\"./model\");' '' 'const KEEP_DAYS = 90; // un registro más antiguo se borra' '// Registros inventados de un asistente de atención al cliente. La edad es un número de días, no un reloj.' 'const records = [' '  { id: 1, asked: \"¿Dónde está mi pedido?\", version: \"v3\", action: false, approvedBy: \"\", age: 12, personal: false },' '  { id: 2, asked: \"Reembolsa el pedido 88\", version: \"v3\", action: true, approvedBy: \"\", age: 30, personal: false },' '  { id: 3, asked: \"Cambia mi dirección\", version: \"\", action: true, approvedBy: \"Tomás Vega\", age: 120, personal: false },' '  { id: 4, asked: \"¿Por qué me cobraron dos veces?\", version: \"v2\", action: false, approvedBy: \"\", age: 5, personal: true },' '];' > records.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 comprobación de registros, parte 2

Comando
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function problems(r) {' '  const found = [];' '  if (r.asked.trim() === \"\") found.push(\"sin pregunta\");' '  if (r.version.trim() === \"\") found.push(\"sin versión del modelo\");' '  if (r.action && r.approvedBy.trim() === \"\") found.push(\"sin aprobador\");' '  if (r.age > KEEP_DAYS) found.push(\"fuera de plazo\");' '  if (r.personal) found.push(\"datos personales innecesarios\");' '  return found;' '}' >> records.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 comprobación de registros, parte 3

Comando
docker exec -w /home/node/project agent sh -c "printf '%s\n' '// Una ficha corta de la función. Cada campo debe tener texto.' 'const card = { purpose: \"Responder sobre pedidos\", limits: \"No puede cambiar pagos\", evaluations: \"\", owner: \"Marta Gil\", contact: \"[email protected]\" };' 'const labels = { purpose: \"propósito\", limits: \"límites\", evaluations: \"evaluaciones\", owner: \"responsable\", contact: \"contacto\" };' >> records.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 comprobación de registros, parte 4

Comando
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function main() {' '  records.forEach(function (r) {' '    const p = problems(r);' '    console.log(\"Registro \" + r.id + \": \" + (p.length === 0 ? \"correcto\" : p.join(\", \")));' '  });' '  const empty = Object.keys(card).filter(function (k) { return card[k].trim() === \"\"; });' '  console.log(\"A la ficha le falta: \" + (empty.length === 0 ? \"nada\" : empty.map(function (k) { return labels[k]; }).join(\", \")));' '  const q = \"Escribe una frase corta que una ventana de chat muestre para avisar al usuario de que habla con un sistema de IA.\";' '  const r = await ask([{ role: \"user\", content: q }], \"Estás hablando con un asistente de IA. Puede equivocarse, y una persona puede atenderte.\", 60);' '  console.log(\"Un aviso posible: \" + r.text);' '}' 'main();' >> records.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 comprobación de registros

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

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

Una salida posible

LíneaQué muestra
Registro 1: correctoNo falta nada
Registro 2: sin aprobadorUn reembolso sin ninguna persona nombrada
Registro 3: sin versión del modelo, fuera de plazoNadie sabe qué modelo respondió, y es demasiado antiguo
Registro 4: datos personales innecesariosGuarda más de lo que necesita una revisión
A la ficha le falta: evaluacionesLa ficha no dice nada de las pruebas
Un aviso posible: ...Tu propia llamada. Cambia en cada ejecución, o dice Muestra grabada

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

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.