¿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

Revisión semanal del nivel de servicio

Después de esta lección: Puedo revisar una función frente a un nivel de servicio durante una semana.

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

Qué es una revisión del nivel de servicio

Un nivel de servicio es un objetivo que una función debe cumplir, como «el 95 por ciento de las peticiones salen bien». Una revisión semanal compara lo ocurrido con los objetivos y decide qué hacer.

Los módulos anteriores te dan costes, trazas y un diseño. Esta lección va más allá: una semana medida, un presupuesto de errores y un paso del manual para cada alarma.

Al final de esta lección

Nota

Puedo revisar una función frente a un nivel de servicio durante una semana.

Palabras clave

PalabraQué significaEjemplo
Objetivoel nivel que una función debe alcanzar95 por ciento
Incumplimientoun objetivo que no se cumplió
Presupuesto de erroreslos errores que un objetivo permite en un periodo
Manual de actuaciónuna lista que dice qué hacer ante cada alarma
Alarmauna señal de que un objetivo no se cumple
Congelardejar de hacer cambios durante un tiempo

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

Tres objetivos para la semana

Aquí la función tiene tres objetivos. Al menos el 95 por ciento de las peticiones debe salir bien. Al menos el 90 por ciento debe ser rápido. El coste de la semana debe quedar bajo un tope de 1800000 unidades.

Los porcentajes se redondean hacia abajo. Cumplir un objetivo justo está bien. Solo quedarse corto es un incumplimiento.

Ejemplo resuelto: una semana grabada

DíaPeticionesErroresLentasCoste
Lun200614300000
Mar210815320000
Mié220920340000
Jue2053040310000
Vie215718330000
Sáb9025140000
Dom8014120000
Semana1220631161860000

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

Un error frecuente

Advertencia

Mucha gente cree que una media que parece buena significa que la semana fue buena. Un mal día puede esconderse dentro de una buena semana. Revisa cada día además del total, y di qué día fue el primero que salió mal.

El presupuesto de errores

Un objetivo del 95 por ciento permite que falle el 5 por ciento de las peticiones. Ese margen es el presupuesto de errores. Para 1220 peticiones son 61 errores, en números enteros.

La semana tuvo 63 errores, así que el presupuesto que queda es 61 menos 63, es decir, -2. El presupuesto está gastado, así que el equipo congela los cambios hasta recuperarlo.

Ejemplo resuelto: el presupuesto

PasoCuentaResultado
Porcentaje de éxito(1220 menos 63) por 100 entre 122094
Errores permitidos1220 por 5 entre 10061
Errores usadosDe la semana63
Presupuesto que queda61 menos 63-2

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

Un paso para cada alarma

Un manual de actuación es una lista corta: ante esta alarma, haz esto. Se escribe antes del mal día, para que quien esté de guardia no tenga que inventar un plan.

Si un incumplimiento no tiene paso en el manual, escálalo al responsable. Después, añade un paso para él.

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 la revisión, parte 1

Comando
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { ask } = require(\"./model\");' 'const days = [' '  [200, 6, 14, 300000], [210, 8, 15, 320000], [220, 9, 20, 340000],' '  [205, 30, 40, 310000], [215, 7, 18, 330000], [90, 2, 5, 140000], [80, 1, 4, 120000],' '];' 'const targets = { success: 95, fast: 90, cap: 1800000 };' > 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 la revisión, parte 2

Comando
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function totals() {' '  const t = { n: 0, bad: 0, slow: 0, cost: 0 };' '  for (const d of days) { t.n += d[0]; t.bad += d[1]; t.slow += d[2]; t.cost += d[3]; }' '  return t;' '}' 'function pct(part, whole) { return Math.floor((whole - part) * 100 / whole); }' >> 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 la revisión, parte 3

Comando
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function main() {' '  const t = totals();' '  const ok = pct(t.bad, t.n);' '  const fast = pct(t.slow, t.n);' '  const allowed = Math.floor(t.n * (100 - targets.success) / 100);' '  console.log(\"éxito \" + ok + \" por ciento, objetivo \" + targets.success);' '  console.log(\"rapidez \" + fast + \" por ciento, objetivo \" + targets.fast);' '  console.log(\"coste \" + t.cost + \", tope \" + targets.cap);' '  console.log(\"presupuesto de errores: permitidos \" + allowed + \", usados \" + t.bad + \", quedan \" + (allowed - t.bad));' '  const reply = await ask([{ role: \"user\", content: \"En una frase corta, ¿para qué sirve un manual de actuación?\" }], \"Dice a quien está de guardia exactamente qué hacer ante cada alarma.\", 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

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
éxito 94 por ciento, objetivo 95Un incumplimiento, un punto por debajo
rapidez 90 por ciento, objetivo 90Cumplido justo, así que no hay incumplimiento
coste 1860000, tope 1800000Un incumplimiento, por encima del tope
presupuesto de errores: permitidos 61, usados 63, quedan -2El presupuesto está gastado
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.