¿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

Deriva del modelo y reentrenamiento

Después de esta lección: Puedo darme cuenta de que un modelo ajustado se ha quedado viejo.

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

Un modelo ajustado puede quedarse viejo

La deriva es que un modelo empeore con el tiempo sin que nadie lo cambie. El mundo sigue. Llegan productos nuevos, palabras nuevas y tipos de mensaje nuevos, y el modelo se ajustó con los del año pasado.

Si nadie vigila la nota, la primera señal es un cliente enfadado.

Al final de esta lección

Nota

Puedo darme cuenta de que un modelo ajustado se ha quedado viejo.

Palabras clave

PalabraQué significa
Derivaun modelo que empeora porque el mundo cambia
Seguimientomirar una nota una y otra vez
Disparadoruna señal que dice actúa ahora
Calendariouna fecha fija para actuar, pase lo que pase
Reentrenamientoajustar otra vez con ejemplos más nuevos

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

Vigila una nota cada semana

Guarda un conjunto pequeño de casos nuevos y puntúa el modelo con ellos cada semana. Anota los números. Las primeras semanas tras una versión te dan una base.

Una mala semana puede ser casualidad. Exige dos semanas seguidas por debajo de tu línea de alerta antes de decir que la nota ha bajado.

Ejemplo resuelto: notas semanales

SemanasNotasQué muestra
1 a 388, 90, 89Base 89 (la media, redondeada hacia abajo)
4 a 688, 87, 86Un pequeño bajón, por encima de la línea de alerta de 84
7 y 880, 79Dos semanas por debajo de 84: la nota ha bajado
9 a 1278, 79, 77, 76Se mantiene baja

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

Busca la causa en las entradas

Cuando la nota baja, lee las entradas nuevas. ¿Traen palabras, productos o temas que los datos de entrenamiento nunca tuvieron? Haz la lista de las palabras nuevas.

Eso te dice qué ejemplos añadir. Una lista larga de palabras nuevas es una señal clara de que las entradas han cambiado.

Un disparador o un calendario

Un calendario reentrena en una fecha fija, por ejemplo cada cuarta semana. Es sencillo, pero puede reentrenar cuando nada cambió, o tarde cuando algo cambió.

Un disparador reentrena cuando la nota baja. Actúa con pruebas. Muchos equipos usan primero el disparador y dejan el calendario como red de seguridad.

Un error frecuente

Advertencia

Mucha gente cree que un modelo ajustado sigue bien una vez que pasa sus pruebas. Las pruebas solo describen el día en que se hicieron. Sigue puntuando casos nuevos, y reentrena y compara de nuevo cuando la nota baje.

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 deriva, parte 1

Comando
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { ask } = require(\"./model\");' '// Notas semanales grabadas de un clasificador de mensajes, en porcentaje. La semana 1 es la primera.' 'const scores = [88, 90, 89, 88, 87, 86, 80, 79, 78, 79, 77, 76];' 'const THRESHOLD = 5;' > adapt6.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 deriva, parte 2

Comando
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function baseline(list) {' '  return Math.floor((list[0] + list[1] + list[2]) / 3);' '}' 'function findDrop(list, drop) {' '  const cut = baseline(list) - drop;' '  for (let i = 3; i < list.length - 1; i++) {' '    if (list[i] < cut && list[i + 1] < cut) return i + 1;' '  }' '  return 0;' '}' >> adapt6.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 deriva, parte 3

Comando
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function newWords(oldTexts, newTexts) {' '  const seen = oldTexts.join(\" \").toLowerCase().split(\" \");' '  const out = [];' '  for (const w of newTexts.join(\" \").toLowerCase().split(\" \")) {' '    if (seen.includes(w) === false && out.includes(w) === false) out.push(w);' '  }' '  return out;' '}' >> adapt6.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 deriva, parte 4

Comando
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function main() {' '  console.log(\"base \" + baseline(scores) + \" %, alerta por debajo de \" + (baseline(scores) - THRESHOLD) + \" %\");' '  console.log(\"la nota bajó en la semana \" + findDrop(scores, THRESHOLD));' '  console.log(\"palabras nuevas: \" + newWords([\"dónde está mi paquete\"], [\"dónde está mi patinete\", \"código taquilla\"]).join(\" \"));' '  const q = \"En una frase, ¿por qué un modelo puede empeorar aunque nadie lo haya cambiado?\";' '  const sample = \"El mundo y las entradas cambian, así que un modelo ajustado con entradas viejas encaja peor con las nuevas.\";' '  const reply = await ask([{ role: \"user\", content: q }], sample, 40);' '  console.log(\"el modelo dijo: \" + reply.text);' '}' 'main();' >> adapt6.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 deriva

Comando
docker exec -w /home/node/project agent node adapt6.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 imprimió la comprobación

Las doce notas están grabadas y escritas en el script. La comprobación calcula la base, halla la semana en que bajó la nota y lista las palabras nuevas de unos mensajes inventados.

La última línea es una llamada corta al modelo, o una Muestra grabada.

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.