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
| Palabra | Qué significa |
|---|---|
| Plan de cambio | un documento corto que dice qué cambia y cómo deshacerlo |
| Evidencia | resultados que muestran que el cambio no es peor |
| Despliegue | cómo llega el cambio a los usuarios, por etapas |
| Vuelta atrás | los pasos que deshacen el cambio |
| Aprobador | la 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
| Regla | Texto v7 | Cambio de modelo |
|---|---|---|
| Al menos 100 casos | 240, pasa | 60, falla |
| Ninguna bajada de la tasa de aprobados | De 71 a 74, pasa | De 80 a 76, falla |
| Empezar con un 10 por ciento o menos | 5, pasa | 50, falla |
| Mínimo de 50 peticiones | 50, pasa | 0, falla |
| Vuelta atrás probada y de 15 minutos o menos | Sí, 10 | No, 30. Falla dos veces |
| El aprobador no es el autor | Pablo, pasa | Lo escribió Marta, falla |
| Decisión | Adelante | Parar |
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
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
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
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
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
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
docker exec -w /home/node/project agent node review.jsSe 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ínea | Qué 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.