¿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 crear una biblioteca de prompts

Después de esta lección: Puedo guardar prompts en archivos con una versión y una prueba.

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

Guarda prompts en archivos con versión y prueba

Una biblioteca de prompts es una carpeta de prompts guardados como archivos, cada uno con una versión y una prueba. Un prompt que vive en un mensaje de chat se pierde, se copia mal y lo edita quien lo encuentra.

En un archivo se puede revisar, probar y deshacer, como el código.

Al final de esta lección

Nota

Puedo guardar prompts en archivos con una versión y una prueba.

Palabras clave

PalabraQué significaEjemplo
Bibliotecauna carpeta de prompts guardados como archivos
Variableun hueco con nombre que rellena el código{nombre}
Versiónun número que dice qué edición es
Registro de cambiosuna lista de lo que cambió y por qué
Reglauna frase que un prompt debe tener siempre
Auditoríauna revisión de todos los prompts a la vez

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

¿Qué contiene un archivo de prompt?

Cada prompt es un archivo, como respuesta-reembolso.txt. Los huecos son variables entre llaves, como {nombre}, para que el código las rellene. Junto al archivo va un número de versión, y una línea del registro de cambios dice qué cambió.

Al lado va una prueba. La prueba guarda las reglas que el prompt debe contener siempre.

Qué te dice un número de versión

CambioSubeDe 1.2.3 a
Corregir una errataparche1.2.4
Añadir un límite o un ejemplomenor1.3.0
Cambiar las variables, y los llamadores deben cambiarmayor2.0.0

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 revisor de la biblioteca, parte 1

Comando
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { ask } = require(\"./model\");' 'const OLD = \"Rol: Eres ayudante de una empresa de autobuses.\nTarea: Responde a {nombre} sobre un reembolso.\nLímites: Menos de 25 palabras. Nunca prometas una fecha.\";' 'const RULES = [\"menos de 25 palabras\", \"nunca prometas una fecha\"];' > lib6.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 revisor de la biblioteca, parte 2

Comando
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function variables(text) {' '  const names = [];' '  for (const f of text.match(/\{[a-z_]+\}/g) || []) {' '    if (names.includes(f.slice(1, -1)) === false) names.push(f.slice(1, -1));' '  }' '  return names;' '}' 'function fill(text, values) {' '  const gone = variables(text).filter(function (n) { return (n in values) === false; });' '  if (gone.length > 0) return { ok: false, missing: gone };' '  let out = text;' '  for (const n of Object.keys(values)) out = out.split(\"{\" + n + \"}\").join(values[n]);' '  return { ok: true, text: out };' '}' >> lib6.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 revisor de la biblioteca, parte 3

Comando
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function lost(oldText, newText) {' '  const o = oldText.toLowerCase();' '  const n = newText.toLowerCase();' '  return RULES.filter(function (r) { return o.includes(r) && n.includes(r) === false; });' '}' 'async function main() {' '  console.log(\"variables: \" + variables(OLD).join(\", \"));' '  const bad = fill(OLD, {});' '  console.log(\"rellenar sin valores: ok \" + bad.ok + \", falta \" + bad.missing.join(\", \"));' '  const edit = OLD.replace(\"Nunca prometas una fecha.\", \"\");' '  console.log(\"la edición pierde: \" + lost(OLD, edit).join(\", \"));' '  const filled = fill(OLD, { nombre: \"Mina\" });' '  const reply = await ask([{ role: \"user\", content: filled.text }], \"Hola, Mina: estamos revisando tu reembolso.\", 50);' '  console.log(\"modelo: \" + reply.text);' '}' 'main();' >> lib6.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 rechaza una mala edición

Comando
docker exec -w /home/node/project agent node lib6.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

Lista la variable y muestra que rellenar sin valores se rechaza y nombra la que falta. Después edita el prompt para quitar un límite y lista la regla que pierde la edición. Esa edición se rechazaría.

La última línea es una respuesta corta al prompt relleno. Sin modelo, antes imprime una Muestra grabada.

Un error frecuente

Advertencia

Mucha gente cree que un cambio pequeño en un prompt compartido es seguro. Una edición corta puede quitar un límite en el que confiaba otro código. Pasa siempre la prueba de reglas antes de guardar, por pequeña que sea la edición.

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.