La revisión que frena un mal lanzamiento
Una revisión de gobernanza es una comprobación escrita y corta de una función de IA antes de lanzarla. Importa porque las preguntas que nadie hizo son las que causan el incidente, y un registro escrito muestra después quién decidió qué.
Esta lección reúne el módulo en cinco elementos que puedes comprobar con un programa.
Al final de esta lección
Nota
Puedo revisar una función de IA antes de lanzarla y escribir el resultado.
Palabras clave
| Palabra | Qué significa |
|---|---|
| Revisión | una comprobación escrita antes del lanzamiento |
| Visto bueno | el responsable acepta que se lance |
| Hueco | un elemento que la revisión deja fuera |
| Vuelta atrás | los pasos que apagan la función |
| Registro | el resultado guardado de la revisión |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Cinco elementos forman una revisión
Comprueba cinco cosas. ¿Hay un responsable con nombre? ¿Están escritos los riesgos? ¿Hay bastantes casos de evaluación? ¿Hay vuelta atrás? ¿Se guarda el resultado?
Cada elemento viene de este módulo. El responsable viene del nivel de riesgo. Los riesgos vienen de la supervisión y de los comentarios. Las evaluaciones vienen del cambio de modelo, y la vuelta atrás del riesgo de proveedor.
Ejemplo resuelto: dos revisiones, mínimo 5 casos
| Función | Responsable | Riesgos | Evaluaciones | Vuelta atrás | Registro | Resultado |
|---|---|---|---|---|---|---|
| Robot de reembolsos | sí | 2 | 0 | sí | sí | Faltan evaluaciones |
| Filtro de currículos | sí | 1 | 12 | no | no | Faltan vuelta atrás y registro |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Escribe el resultado
El resultado se guarda con la fecha, los nombres y lo que se encontró. Si la revisión halla un hueco, la función espera. Si la pasa, el responsable da su visto bueno.
Repite la revisión tras un cambio: un modelo nuevo, un uso nuevo o un proveedor nuevo. Una revisión es el registro de un día, no un permiso para siempre.
Un error frecuente
Advertencia
Mucha gente cree que una revisión se hace una vez, al lanzar. La función cambia, y también el modelo, los usuarios y las normas. Repite la revisión cuando cambie cualquiera de ellos y guarda cada resultado.
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 la comprobación de revisión, parte 1
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { ask } = require(\"./model\");' '' 'const MIN_EVALS = 5; // con menos casos no basta para confiar' '// Dos revisiones inventadas. Una revisión está lista cuando está cada elemento.' 'const reviews = [' ' { name: \"Robot de reembolsos\", owner: \"Tomás Vega\", risks: [\"reembolso erróneo\", \"cliente enfadado\"], evals: 0, rollback: \"Apagar el interruptor\", record: true },' ' { name: \"Filtro de currículos\", owner: \"Lucía Romero\", risks: [\"rechazo injusto\"], evals: 12, rollback: \"\", record: false },' '];' > 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 la comprobación de revisión, parte 2
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function missing(r) {' ' const gaps = [];' ' if (r.owner.trim() === \"\") gaps.push(\"responsable\");' ' if (r.risks.length === 0) gaps.push(\"riesgos\");' ' if (r.evals < MIN_EVALS) gaps.push(\"evaluaciones\");' ' if (r.rollback.trim() === \"\") gaps.push(\"vuelta atrás\");' ' if (r.record === false) gaps.push(\"registro\");' ' return gaps;' '}' >> 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 la comprobación de revisión, parte 3
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function main() {' ' reviews.forEach(function (r) {' ' const gaps = missing(r);' ' console.log(r.name + \": \" + (gaps.length === 0 ? \"lista\" : \"NO LISTA, falta \" + gaps.join(\", \")));' ' });' ' const q = \"Escribe una frase que debe contener un plan de vuelta atrás para una función de chat con clientes.\";' ' const r = await ask([{ role: \"user\", content: q }], \"Dice quién apaga la función, cómo y cuánto tarda.\", 60);' ' console.log(\"Una frase posible: \" + r.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 comprobación de revisión
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.
Una salida posible
| Línea | Qué muestra |
|---|---|
| Robot de reembolsos: NO LISTA, falta evaluaciones | Todavía no hay casos de evaluación |
| Filtro de currículos: NO LISTA, falta vuelta atrás, registro | Sin camino de vuelta y nada guardado |
| Una frase 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.