¿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

Cómo probar un prompt

Después de esta lección: Puedo decir si un prompt cambiado es mejor.

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

Prueba un prompt con casos fijos

Probar un prompt es pasar un conjunto fijo de casos y aplicar una regla a cada respuesta. La regla es simple: una palabra debe aparecer, otra no, y la respuesta debe ser corta.

Sin prueba, un prompt cambiado que arregla el caso que tienes delante puede romper en silencio otros dos que no mirabas.

Al final de esta lección

Nota

Puedo decir si un prompt cambiado es mejor.

Palabras clave

PalabraQué significa
Casouna entrada con la que pruebas
Reglauna comprobación simple sobre una respuesta
Referenciael prompt con el que comparas
Regresiónun caso que pasaba y ahora falla
Pasauna respuesta que cumple su regla
Grabadauna respuesta guardada para repetir la prueba

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

¿Qué son un caso y una regla?

Un caso es una entrada, como una viajera que pide un reembolso. Una regla es una comprobación que el código hace sobre la respuesta. «Contiene la palabra reembolso» es una regla. «Suena amable» no lo es, porque el código no puede comprobarlo.

Guarda un conjunto pequeño y fijo de casos. Pasa cada prompt por el mismo conjunto, para que lo único que cambie sea el prompt.

Prompt A y prompt B en tres casos

CasoPrompt APrompt B
reembolsopasafalla (dice lo siento)
retrasofallapasa
graciaspasafalla (menciona el retraso)
Total2 de 31 de 3

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

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 probador de prompts, parte 1

Comando
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { ask } = require(\"./model\");' 'const cases = [' '  { name: \"reembolso\", must: [\"reembolso\"], not: [\"lo siento\"], max: 25 },' '  { name: \"retraso\", must: [\"retraso\"], not: [], max: 25 },' '  { name: \"gracias\", must: [\"gracias\"], not: [\"retraso\"], max: 25 },' '];' 'const A = [\"Te devolveremos el reembolso en cinco días.\", \"El autobús llega tarde, pedimos disculpas.\", \"Gracias por tu mensaje.\"];' 'const B = [\"Lo siento, te devolveremos el reembolso en cinco días.\", \"Hay un retraso de diez minutos.\", \"Gracias. Lo siento por el retraso.\"];' > test5.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 probador de prompts, parte 2

Comando
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function passes(reply, c) {' '  const low = reply.toLowerCase();' '  const long = reply.split(\" \").length > c.max;' '  const has = c.must.every(function (m) { return low.includes(m); });' '  const bad = c.not.some(function (n) { return low.includes(n); });' '  return has && bad === false && long === false;' '}' 'function run(replies) {' '  return replies.map(function (r, i) { return passes(r, cases[i]); });' '}' >> test5.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 probador de prompts, parte 3

Comando
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function main() {' '  const ra = run(A);' '  const rb = run(B);' '  const names = function (flags, other) {' '    return cases.filter(function (c, i) { return flags[i] && other[i] === false; }).map(function (c) { return c.name; });' '  };' '  console.log(\"A pasa \" + ra.filter(Boolean).length + \" de 3, B pasa \" + rb.filter(Boolean).length + \" de 3\");' '  console.log(\"mejora: \" + names(rb, ra).join(\", \") + \" | empeora: \" + names(ra, rb).join(\", \"));' '  const ask1 = \"Responde a una viajera que pide un reembolso, en menos de 25 palabras.\";' '  const reply = await ask([{ role: \"user\", content: ask1 }], A[0], 50);' '  console.log(\"la respuesta real cumple la regla del reembolso: \" + (passes(reply.text, cases[0]) ? \"sí\" : \"no\"));' '}' 'main();' >> test5.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 y compara dos prompts

Comando
docker exec -w /home/node/project agent node test5.js

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Qué imprime el Run

La primera línea dice que A pasa 2 de 3 y B pasa 1 de 3. La segunda dice que B mejora el caso del retraso y empeora reembolso y gracias. Así que te quedas con A.

Esas dos líneas usan respuestas grabadas, y todos los estudiantes ven lo mismo. La última línea comprueba una respuesta real y puede salir sí o no. Muestra que una respuesta real puede incumplir una regla. Sin modelo, antes imprime una Muestra grabada.

Un error frecuente

Advertencia

Mucha gente cree que un prompt es mejor si arregló el caso que le molestaba. Un caso es una sola muestra. Pasa todo el conjunto y cuenta lo que mejoró y lo que empeoró antes de decidir.

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.