Ingeniería de Prompts para Automatizaciones con IA
Los prompts que funcionan en ChatGPT no funcionan en producción. Esta guía cubre lo que ningún otro artículo en español explica: cómo escribir prompts para workflows reales con n8n y Claude.
💻 Nivel: Intermedio
🗓 Actualizado: abril 2026
Elementos de todo prompt de producción
Ahorro con prompt caching en workflows repetitivos
Más consistencia con few-shot frente a zero-shot
Competidores en español cubren n8n + prompting
📋 Índice de contenidos
02 Los 5 elementos de un prompt de producción
03 Prompts para workflows de n8n con Claude
04 Técnicas avanzadas para automatizaciones
05 Testing y validación en producción
06 Errores que rompen los workflows
07 Prompt caching: hasta 90% de ahorro
08 Preguntas frecuentes
Qué es (y qué no es) la ingeniería de prompts
La ingeniería de prompts es el proceso de diseñar instrucciones precisas para que un modelo de IA produzca outputs predecibles y reutilizables. No es encontrar la frase mágica que impresiona a ChatGPT — es diseñar un sistema de instrucciones que funcione igual la primera vez que la décima mil.
En automatizaciones, la diferencia es crítica: un prompt que «casi siempre funciona» rompe tu workflow cada pocas ejecuciones. Un prompt bien diseñado produce el mismo formato de salida el 99,9% de las veces, con datos distintos.
| Prompt para ChatGPT | Prompt para producción (n8n) |
|---|---|
| Conversacional, flexible | Estructurado, determinista |
| El formato puede variar | El formato es fijo y verificable |
| Se ajusta en tiempo real | Funciona sin supervisión humana |
| El error lo corriges tú | El error rompe el workflow silenciosamente |
| Un solo usuario | Miles de ejecuciones al día |
JSON.parse() sobre este output sin try/catch?Los 5 elementos de un prompt de producción
Todo prompt que funciona en producción tiene cinco componentes. Puedes omitir alguno en casos simples, pero cuando un workflow falla de forma inconsistente, casi siempre falta uno de estos cinco elementos.
{{$json.texto}}. El contexto nunca debe estar hardcodeado en el prompt.Plantilla — Prompt de producción completo
# ROL Eres un extractor de datos estructurados especializado en documentos comerciales. # TAREA Extrae los campos indicados del siguiente email de solicitud de presupuesto. # CONTEXTO (datos dinámicos del workflow) Email recibido: {{$json.emailBody}} # FORMATO Responde SOLO con este JSON, sin texto antes ni después: { "nombre": "", "empresa": "", "producto_solicitado": "", "cantidad": null, "fecha_entrega": "" } # RESTRICCIONES - Si un campo no aparece en el email, devuelve null (no inventes datos) - Las fechas en formato DD/MM/YYYY - Sin bloques markdown ni caracteres extra fuera del JSON
Prompts para workflows de n8n con Claude
n8n divide el prompt en dos campos en el nodo de Anthropic: System Message y Human Message. Esta separación no es cosmética — define cómo el modelo prioriza las instrucciones y es clave para la consistencia en producción.
System prompt vs. User prompt en el nodo Claude
| Campo | Qué va aquí | Cambia entre ejecuciones |
|---|---|---|
| System Message | Rol, formato de output, restricciones fijas | No — es estático |
| Human Message | Datos del workflow (email, PDF, variables) | Sí — cambia en cada ejecución |
Cómo pasar datos del workflow al prompt
Las variables de n8n se inyectan con la sintaxis {{$json.campo}} dentro del Human Message. Para datos de nodos anteriores: {{$node['NombreNodo'].json.campo}}. Nunca metas datos dinámicos en el System Message — rompería el prompt caching.
Nodo Anthropic en n8n — configuración correcta
// SYSTEM MESSAGE (estático — se cachea automáticamente) Eres un clasificador de emails de soporte. Clasifica cada email y responde SOLO con JSON: { "tipo": "consulta|queja|tecnico|cancelacion", "urgencia": "alta|media|baja", "resumen": "[máximo 15 palabras]" } Sin texto antes ni después del JSON. // HUMAN MESSAGE (dinámico — varía en cada ejecución) Email recibido: {{$json.emailBody}} De: {{$json.from}} Asunto: {{$json.subject}}
Técnicas avanzadas para automatizaciones
Tres técnicas concentran el 80% del valor en prompting para automatizaciones: few-shot para consistencia de formato, Chain of Thought para extracción compleja, y control estricto de JSON para integración con otros nodos.
Few-shot: ejemplos dentro del prompt
El few-shot consiste en incluir 2-5 ejemplos de input/output esperado dentro del prompt. En automatizaciones es la técnica con mejor retorno: reduce los errores de formato hasta un 60% en tareas de clasificación y extracción, según benchmarks de Anthropic (2024).
Few-shot — Clasificador con ejemplos
Clasifica el sentimiento de reviews de producto. Responde SOLO con: positivo | negativo | neutro Ejemplos: Input: "Llegó antes de lo esperado y funciona perfecto" Output: positivo Input: "Producto correcto pero el embalaje llegó dañado" Output: neutro Input: "No funciona, he intentado devolverlo y no responden" Output: negativo Ahora clasifica: Input: {{$json.review}} Output:
Chain of Thought para extracción compleja
El Chain of Thought (CoT) instruye al modelo a razonar paso a paso antes de dar la respuesta final. Es útil cuando el dato a extraer requiere inferencia: calcular una fecha relativa, interpretar un importe ambiguo o deducir una categoría de producto de una descripción libre.
Chain of Thought — Extracción con razonamiento
Extrae la fecha de entrega solicitada en este pedido. El email puede expresarla de forma relativa ("para el viernes", "urgente", "antes de fin de mes"). Hoy es {{$now.format('DD/MM/YYYY')}}. Razona así: 1. Identifica cómo expresa la fecha el cliente 2. Convierte la expresión relativa a fecha absoluta 3. Devuelve el resultado Responde con este formato: RAZONAMIENTO: [tu análisis en 1-2 frases] FECHA: [DD/MM/YYYY o null si no se menciona] Email: {{$json.emailBody}}
Control de formato JSON estricto
El problema más común en n8n es que Claude devuelve el JSON envuelto en bloques markdown («`json … «`), lo que rompe el JSON.parse(). Hay dos soluciones: prohibirlo explícitamente en el prompt, o usar un nodo Set para limpiar la respuesta con regex.
Nodo Set — Limpieza de JSON con regex
// En el nodo Set de n8n, campo "Expression": {{ $json.message.content[0].text.match(/\{[\s\S]*\}/)[0] }} // Esto extrae el JSON aunque Claude lo envuelva en markdown
Testing y validación de prompts en producción
Un prompt no está listo para producción hasta que ha pasado por un ciclo de validación con datos reales. El 90% de los fallos en workflows de IA se detectan en las primeras 20 ejecuciones de prueba — si no las haces, los detectas en producción.
Cómo detectar un prompt inestable
Un prompt es inestable cuando produce outputs distintos con el mismo input. Las señales: el formato cambia entre ejecuciones, aparecen campos extra no solicitados, o el modelo «inventa» datos cuando no tiene información suficiente.
| Síntoma | Causa probable | Fix |
|---|---|---|
| JSON con campos extra | No especificaste el schema exacto | Incluye el JSON vacío como plantilla en el prompt |
| Campos inventados cuando faltan datos | No instruiste qué hacer con campos vacíos | Añade «devuelve null si el dato no aparece» |
| Texto antes o después del JSON | Falta la restricción explícita | Añade «Sin texto antes ni después del JSON» |
| Formato correcto en tests, falla en prod | Los datos de prod tienen edge cases no probados | Añade few-shot con ejemplos de los edge cases |
| Respuestas inconsistentes en longitud | No especificaste límite de tokens | Añade maxTokens en el nodo y límite en el prompt |
Métricas básicas para medir calidad
Para workflows de extracción, registra en Google Sheets: tasa de parse exitoso (JSON válido), tasa de campos null inesperados y tasa de ejecuciones que requirieron revisión manual. Con 100 ejecuciones de muestra tienes datos suficientes para decidir si el prompt está listo.
Errores de prompt que rompen los workflows
Estos son los seis errores de prompting que más workflows rompen en producción. Todos tienen solución en el prompt, sin cambiar de modelo ni de plataforma.
| Error | Por qué ocurre | Solución en el prompt |
|---|---|---|
| JSON con bloques markdown | Comportamiento por defecto del modelo | «Responde SOLO con JSON válido. Sin «` ni texto adicional.» |
| Campos inventados | El modelo prefiere dar un dato a devolver null | «Si el campo no está en el input, devuelve exactamente null» |
| Respuesta en inglés | El modelo sigue el idioma del input | «Responde siempre en español, independientemente del idioma del input» |
| Output demasiado largo | Sin restricción de longitud | «Máximo [N] palabras» o limita maxTokens en el nodo |
| Formato correcto pero texto extra | El modelo añade explicaciones no pedidas | Añade un ejemplo explícito del output esperado al final del prompt |
| Inconsistencia con inputs cortos | El modelo «rellena» cuando hay poco contexto | Añade few-shot con ejemplos de inputs cortos y su output esperado |
Prompt caching: hasta 90% de ahorro en costes
El prompt caching es la capacidad de Anthropic para reutilizar la parte estática de un prompt sin recalcularla en cada ejecución. En workflows de alto volumen es la optimización con mayor impacto en costes: un sistema prompt de 2.000 tokens que se ejecuta 1.000 veces al día pasa de costar 6$/día a 0,60$/día.
Cómo funciona en n8n
El caching se activa automáticamente cuando el System Message supera los 1.024 tokens y su contenido no cambia entre ejecuciones. Por eso la separación System/Human Message es crítica: el System Message estático se cachea, el Human Message dinámico no.
Regla de caching en n8n
✅ SE CACHEA (System Message — estático) Rol + instrucciones fijas + schema JSON + restricciones + ejemplos few-shot ❌ NO SE CACHEA (Human Message — dinámico) {{$json.emailBody}}, {{$json.datos}}, {{$now}} // Regla práctica: si el texto cambia entre ejecuciones → Human Message // Si el texto es siempre igual → System Message
| Workflow | Sin caching (1.000 ej/día) | Con caching | Ahorro |
|---|---|---|---|
| Clasificador emails (system: 800 tokens) | 7,2$/mes | 0,72$/mes | 90% |
| Extractor facturas (system: 1.200 tokens) | 18$/mes | 1,8$/mes | 90% |
| FAQ dinámico (system: 3.000 tokens) | 27$/mes | 2,7$/mes | 90% |
usage.cache_read_input_tokens indica cuántos tokens se sirvieron desde caché. Si este número es 0 en un workflow repetitivo, revisa que el System Message no tenga variables dinámicas que lo invaliden en cada ejecución.Preguntas frecuentes
usage en la respuesta. Si cache_read_input_tokens es mayor que 0, el caching está activo. Si siempre es 0, el System Message está cambiando entre ejecuciones — probablemente tiene una variable dinámica que lo invalida.Resumen ejecutivo
Claves para producción
- Separa siempre System Message (estático) de Human Message (dinámico)
- Los 5 elementos: rol, tarea, contexto, formato y restricciones
- Few-shot con 3-5 ejemplos para clasificación y extracción
- System Message estático de +1.024 tokens activa el prompt caching
- Valida con 10 inputs reales variados antes de activar en producción
Errores a evitar
- Usar el campo «Prompt» genérico en lugar de System + Human separados
- No especificar qué devolver cuando falta un dato (null vs. inventado)
- Meter variables dinámicas en el System Message (rompe el caching)
- Activar en producción sin probar edge cases: inputs cortos, vacíos o con caracteres especiales
- Asumir que el prompt de ChatGPT funciona igual en Claude sin ajustar
¿Quieres que revisemos tus prompts de producción?
Auditamos tus workflows de n8n o Make e identificamos qué prompts están fallando y por qué.