Los patrones son formas de prompt reutilizables
Un patrón de prompt es una forma de prompt que usas a propósito porque arregla un problema conocido. Personaje, plantilla, crítica y reescritura, y reglas primero son cuatro de ellos.
Ponerles nombre permite a un equipo hablar de los prompts y probarlos. «Este usa reglas primero» es una frase sobre la que se puede actuar.
Al final de esta lección
Nota
Puedo usar a propósito un pequeño conjunto de patrones de prompts.
Palabras clave
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| Patrón | una forma de prompt con un uso conocido | |
| Personaje | un papel que se pide al modelo | |
| Plantilla | un prompt con huecos que rellenar | |
| Marcador | un hueco de una plantilla | {{nombre}} |
| Crítica | una lista de lo que está mal | |
| Regla | una norma que la respuesta debe cumplir |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
¿Qué hace cada uno de los cuatro patrones?
Un personaje fija un papel y una voz. Una plantilla tiene huecos que rellena el código, y así todos los prompts tienen la misma forma. Crítica y reescritura pide primero los fallos y luego la corrección. Reglas primero pone las normas antes de la tarea para que no se olviden.
Los patrones se combinan. Una plantilla puede empezar con reglas.
Cuatro patrones y lo que arregla cada uno
| Patrón | Señal en el prompt | Qué arregla |
|---|---|---|
| Personaje | Empieza por «Eres» o «Actúa como» | Una voz que se desvía |
| Plantilla | Huecos como {{nombre}} | Prompts todos distintos |
| Crítica y reescritura | Pide las dos cosas | Un borrador que se deja tal cual |
| Reglas primero | Empieza por «Reglas:» o «Límites:» | Normas perdidas al final |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
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 el buscador de patrones, parte 1
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { ask } = require(\"./model\");' 'const prompts = [' ' \"Eres un tutor de matemáticas paciente. Explica las fracciones.\",' ' \"Reglas: menos de 20 palabras. Sin jerga.\nTarea: explica las mareas.\",' ' \"Escribe una nota a {{nombre}} sobre {{tema}}.\",' ' \"Critica este párrafo y después reescribe el texto.\",' ' \"Explica las mareas.\",' '];' > pat4.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 buscador de patrones, parte 2
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function patternOf(p) {' ' const low = p.toLowerCase();' ' if (low.includes(\"critica\") && low.includes(\"reescribe\")) return \"crítica y reescritura\";' ' if (p.startsWith(\"Reglas:\") || p.startsWith(\"Límites:\") || p.startsWith(\"Restricciones:\")) return \"reglas primero\";' ' if (p.includes(\"{{\") && p.includes(\"}}\")) return \"plantilla\";' ' if (p.startsWith(\"Eres \") || p.startsWith(\"Actúa como \")) return \"personaje\";' ' return \"simple\";' '}' 'function fill(t, values) {' ' let out = t;' ' for (const key of Object.keys(values)) out = out.split(\"{{\" + key + \"}}\").join(values[key]);' ' return out;' '}' >> pat4.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 buscador de patrones, parte 3
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function main() {' ' prompts.forEach(function (p, i) { console.log((i + 1) + \": \" + patternOf(p)); });' ' const filled = fill(prompts[2], { nombre: \"Mina\", tema: \"la excursión del instituto\" });' ' console.log(\"relleno: \" + filled);' ' const reply = await ask([{ role: \"user\", content: filled }], \"Hola, Mina: la excursión del instituto sale a las nueve.\", 50);' ' console.log(\"modelo: \" + reply.text);' '}' 'main();' >> pat4.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 nombra los patrones
docker exec -w /home/node/project agent node pat4.jsSe 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
Cinco líneas nombran el patrón de cada prompt: personaje, reglas primero, plantilla, crítica y reescritura, simple. Las comprobaciones siguen un orden fijo, así que un prompt con dos señales recibe el primer patrón que encaja.
Después rellena la plantilla y la envía. La última línea es una respuesta corta. Sin modelo, antes imprime una Muestra grabada.
Un error frecuente
Advertencia
Mucha gente cree que un personaje hace al modelo más preciso. Un papel fija la voz y el nivel de detalle. No añade datos que el modelo no tiene. Usa un personaje para el tono, y límites y ejemplos para acertar.