¿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

Presupuestos, reglas de parada y qué no delegar

Después de esta lección: Puedo fijar un presupuesto y una regla de parada para un agente de código y decidir si vale la pena darle una tarea.

Lección de 70 min7 comandosLaboratorio de agente de programación con IA: usa opencode para explicar y corregir código, y comprueba su trabajo

Límites y coste de los agentes de código

Un agente de código trabaja por pasos, y cada paso cuesta tiempo y dinero. Sin presupuesto ni regla de parada, un agente puede dar vueltas una hora con una tarea que tú harías en diez minutos.

Cada cambio que hace sigue necesitando tu revisión, y eso también cuesta tu tiempo. Unos números sencillos muestran cuándo merece la pena dar una tarea a un agente.

Al final de esta lección

Nota

Puedo fijar un presupuesto y una regla de parada para un agente de código y decidir si vale la pena darle una tarea.

Palabras clave

PalabraQué significaEjemplo
Pasouna acción de un agente: leer, editar o ejecutar
Presupuestoel máximo de pasos o de dinero de una ejecución
Regla de paradauna condición que termina antes una ejecución
Pacienciapasos permitidos sin progreso3
Minutos netosminutos ahorrados tras escribir y revisar

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

Un presupuesto y una regla de parada

Da a cada ejecución un presupuesto: como mucho 10 pasos y como mucho 40 céntimos. Dale también paciencia: si el número de tests que pasan no ha subido en 3 pasos, para.

Comprueba después de cada paso, en un orden fijo: terminado, fuera de presupuesto, sin progreso, sin pasos. La primera condición que se cumple termina la ejecución.

Ejemplo resuelto: la ejecución atascada, paso a paso

PasoCosteGastadoPasan de 6Pasos desde la última subida
14420
25930
361531
452032
562633, así que para: sin progreso

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

Tiempo ahorrado frente a tiempo gastado

Un agente no te ahorra todos los minutos que la tarea lleva a mano. Sigues gastando minutos en escribir la tarea y revisar el cambio. Los minutos netos son los minutos a mano menos esas dos cosas.

Conserva una tarea cuando el neto es 0 o menos. Consérvala también si es de riesgo alto, como una comprobación de pagos o borrar datos, digan lo que digan los minutos.

Ejemplo resuelto: cuatro tareas

TareaA manoEspecificación más revisiónNetoDecisión
Renombrar una función en 12 archivos401525Delegar
Añadir una página de documentación301515Delegar
Corregir una errata de una línea25-3Conservar
Cambiar la comprobación de pagos604020Conservar: riesgo alto

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

Un error frecuente

Advertencia

Mucha gente cree que el tiempo de un agente es gratis porque trabaja mientras uno hace otra cosa. Tu propio tiempo se va en la tarea, la revisión y los arreglos. Cuenta esos minutos antes de delegar, y conserva el trabajo de riesgo alto diga lo que diga la cuenta.

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

Comando
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { ask } = require(\"./model\");' 'const LIMIT = { steps: 10, cents: 40, patience: 3 };' 'const runs = {' '  \"constante\": { total: 6, cost: [3, 4, 3, 5, 4, 3], passing: [1, 2, 3, 4, 5, 6] },' '  \"atascado\": { total: 6, cost: [4, 5, 6, 5, 6, 7, 6, 5], passing: [2, 3, 3, 3, 3, 3, 3, 3] },' '  \"caro\": { total: 8, cost: [9, 12, 10, 11, 9], passing: [1, 2, 3, 4, 5] },' '};' > budget.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 presupuesto, parte 2

Comando
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function stop(r) {' '  let spent = 0;' '  let best = 0;' '  let rose = 0;' '  for (let i = 0; i < r.cost.length; i += 1) {' '    const step = i + 1;' '    spent += r.cost[i];' '    if (r.passing[i] > best) { best = r.passing[i]; rose = step; }' '    if (best === r.total) return \"terminado en el paso \" + step + \", \" + spent + \" céntimos\";' '    if (spent > LIMIT.cents) return \"fuera de presupuesto en el paso \" + step + \", \" + spent + \" céntimos\";' '    if (step - rose >= LIMIT.patience) return \"sin progreso en el paso \" + step + \", \" + spent + \" céntimos\";' '    if (step >= LIMIT.steps) return \"sin pasos en el paso \" + step + \", \" + spent + \" céntimos\";' '  }' '  return \"fin del registro, \" + spent + \" céntimos\";' '}' >> budget.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 presupuesto, parte 3

Comando
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const tasks = [' '  { name: \"renombrar una función en 12 archivos\", byHand: 40, spec: 5, review: 10, risk: \"bajo\" },' '  { name: \"añadir una página de documentación\", byHand: 30, spec: 5, review: 10, risk: \"bajo\" },' '  { name: \"corregir una errata de una línea\", byHand: 2, spec: 3, review: 2, risk: \"bajo\" },' '  { name: \"cambiar la comprobación de pagos\", byHand: 60, spec: 10, review: 30, risk: \"alto\" },' '];' 'function decide(t) {' '  if (t.risk === \"alto\") return \"conservar: riesgo alto\";' '  const net = t.byHand - t.spec - t.review;' '  return net > 0 ? \"delegar, ahorra \" + net + \" minutos\" : \"conservar: no ahorra nada\";' '}' >> budget.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 presupuesto, parte 4

Comando
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function main() {' '  Object.keys(runs).forEach(function (name) { console.log(name + \": \" + stop(runs[name])); });' '  tasks.forEach(function (t) { console.log(t.name + \": \" + decide(t)); });' '  const q = \"En una frase corta: ¿por qué un agente de código debe parar cuando no avanza?\";' '  const sample = \"Una ejecución que no se acerca solo gasta más dinero y te deja más cosas que revisar.\";' '  const reply = await ask([{ role: \"user\", content: q }], sample, 60);' '  console.log(\"el modelo dijo: \" + reply.text);' '}' 'main();' >> budget.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 el script de presupuesto

Comando
docker exec -w /home/node/project agent node budget.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íneaLo que muestra
constante: terminado en el paso 6, 22 céntimosPasan todos los tests dentro del presupuesto
atascado: sin progreso en el paso 5, 26 céntimosTres pasos sin subir
caro: fuera de presupuesto en el paso 4, 42 céntimosSuperó los 40 céntimos
renombrar una función en 12 archivos: delegar, ahorra 25 minutosVale la pena dársela a un agente
añadir una página de documentación: delegar, ahorra 15 minutosTambién vale la pena, aunque ahorra menos
corregir una errata de una línea: conservar: no ahorra nadaMás rápido a mano
cambiar la comprobación de pagos: conservar: riesgo altoSe conserva digan lo que digan los minutos
el modelo dijo: ...Una frase del laboratorio. Una línea de 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.