¿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

Revisar un plan de cambio antes de lanzarlo

Después de esta lección: Puedo revisar un plan de cambio antes de lanzarlo.

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

Cómo revisar un plan de cambio

Un plan de cambio es un documento corto que dice qué va a cambiar, por qué es seguro y cómo deshacerlo. Una revisión de cambio comprueba el plan antes de que salga nada.

Importa porque un mal cambio de IA puede llegar a todos los usuarios en minutos. Una lista de comprobación escrita de antemano da una respuesta clara: adelante, necesita más o parar.

Al final de esta lección

Nota

Puedo revisar un plan de cambio antes de lanzarlo.

Palabras clave

PalabraQué significa
Plan de cambioun documento corto que dice qué cambia y cómo deshacerlo
Evidenciaresultados que muestran que el cambio no es peor
Desplieguecómo llega el cambio a los usuarios, por etapas
Vuelta atráslos pasos que deshacen el cambio
Aprobadorla persona que dice que sí

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

Un plan necesita cinco partes

Las cinco partes son el cambio, la evidencia, el despliegue, la vuelta atrás y el aprobador. Un plan al que le falta una parte no está listo, y quien revisa dice cuál.

Comprueba primero las partes que faltan. No sirve de nada mirar los números de una parte que no existe.

Cada parte tiene un límite escrito

Escribe los límites antes de leer ningún plan. La evidencia necesita al menos 100 casos y ninguna bajada de la tasa de aprobados. El despliegue empieza con un 10 por ciento o menos, con un mínimo de 50 peticiones.

La vuelta atrás está probada y lleva 15 minutos o menos. El aprobador no es el autor.

Las reglas de seguridad son las de la vuelta atrás, la del aprobador y la regresión de la evidencia. Si falla una, se para. Si fallan solo las demás, el plan necesita más.

Ejemplo resuelto: dos planes frente a los límites

ReglaTexto v7Cambio de modelo
Al menos 100 casos240, pasa60, falla
Ninguna bajada de la tasa de aprobadosDe 71 a 74, pasaDe 80 a 76, falla
Empezar con un 10 por ciento o menos5, pasa50, falla
Mínimo de 50 peticiones50, pasa0, falla
Vuelta atrás probada y de 15 minutos o menosSí, 10No, 30. Falla dos veces
El aprobador no es el autorPablo, pasaLo escribió Marta, falla
DecisiónAdelanteParar

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

Un error frecuente

Advertencia

Mucha gente cree que un plan con buenos números está listo. Los números no muestran que la vuelta atrás funcione. Una vuelta atrás que nunca se probó puede fallar cuando hace falta. Por eso la revisión pregunta si se probó y cuánto tardó.

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 el script de revisión, parte 1

Comando
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { ask } = require(\"./model\");' 'const plans = {' '  \"texto v7\": { change: \"texto nuevo de reembolsos\", evidence: { cases: 240, before: 71, after: 74 },' '    rollout: { start: 5, min_requests: 50 }, way_back: { minutes: 10, tested: true }, approver: \"Pablo\", author: \"Marta\" },' '  \"cambio de modelo\": { change: \"modelo nuevo\", evidence: { cases: 60, before: 80, after: 76 },' '    rollout: { start: 50, min_requests: 0 }, way_back: { minutes: 30, tested: false }, approver: \"Marta\", author: \"Marta\" },' '  \"tono amable\": { change: \"tono más cercano\", evidence: { cases: 150, before: 70, after: 70 },' '    rollout: { start: 10, min_requests: 50 }, approver: \"Pablo\", author: \"Marta\" },' '};' > review.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 script de revisión, parte 2

Comando
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function problems(p) {' '  const out = [\"change\", \"evidence\", \"rollout\", \"way_back\", \"approver\"].filter(function (k) { return p[k] === undefined; })' '    .map(function (k) { return \"falta \" + k; });' '  if (p.evidence && p.evidence.cases < 100) out.push(\"evidencia escasa\");' '  if (p.evidence && p.evidence.after < p.evidence.before) out.push(\"la evidencia muestra una regresión\");' '  if (p.rollout && p.rollout.start > 10) out.push(\"el despliegue empieza demasiado grande\");' '  if (p.rollout && p.rollout.min_requests < 50) out.push(\"el despliegue no tiene mínimo\");' '  if (p.way_back && p.way_back.tested === false) out.push(\"vuelta atrás sin probar\");' '  if (p.way_back && p.way_back.minutes > 15) out.push(\"vuelta atrás demasiado lenta\");' '  if (p.approver === p.author) out.push(\"el aprobador lo escribió\");' '  return out;' '}' >> review.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 script de revisión, parte 3

Comando
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const STOP = [\"la evidencia muestra una regresión\", \"falta way_back\", \"vuelta atrás sin probar\", \"vuelta atrás demasiado lenta\", \"el aprobador lo escribió\"];' 'function decide(p) {' '  const found = problems(p);' '  if (found.length === 0) return \"adelante\";' '  return found.some(function (f) { return STOP.indexOf(f) >= 0; }) ? \"parar\" : \"necesita más\";' '}' 'async function main() {' '  Object.keys(plans).forEach(function (name) {' '    console.log(name + \": \" + decide(plans[name]) + \" \" + JSON.stringify(problems(plans[name])));' '  });' '  const q = \"En una frase corta, ¿por qué quien aprueba un cambio no debe ser su autor?\";' '  const sample = \"Una segunda mirada ve lo que el autor no ve en su propio trabajo.\";' '  const reply = await ask([{ role: \"user\", content: q }], sample, 60);' '  console.log(\"el modelo dijo: \" + reply.text);' '}' 'main();' >> review.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 revisión del cambio

Comando
docker exec -w /home/node/project agent node review.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 Run

LíneaQué muestra
texto v7: adelante []Ningún problema
cambio de modelo: parar [...]Siete problemas, y algunos son reglas de seguridad
tono amable: parar ["falta way_back"]No hay vuelta atrás
el modelo dijo: ...Una frase del laboratorio. Una muestra grabada si ningún modelo responde

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.