Anatomía de un prompt: Los 4 componentes para comunicarte con IA
35 min
Básico
Claude
ChatGPT
Gemini
cualquier LLM
Un prompt efectivo responde 4 preguntas en orden: QUÉ tiene que hacer (instrucción), QUÉ necesita saber para hacerlo (contexto), SOBRE QUÉ debe actuar (input), y CÓMO tiene que entregarlo (output). Si falta alguna, le estás pidiendo al LLM que adivine — y adivina distinto cada vez.
01 —
El problema
Cuando escribimos prompts de forma intuitiva, como si fueran búsquedas de Google, los LLMs producen respuestas genéricas, incompletas o directamente incorrectas.
Situación típica: un desarrollador escribe "genera una función de validación de email" y recibe código sin manejo de errores, sin tests, usando una regex obsoleta. Cada vez que ejecuta el mismo prompt obtiene variaciones diferentes. Tras 10 iteraciones de "ahora añadí esto... ahora cambiá aquello", termina escribiendo más texto explicativo que si hubiera codificado directamente.
Por qué es importante:
- Tiempo desperdiciado en iteraciones innecesarias — estudios muestran que prompts mal estructurados requieren 3-5x más interacciones.
- Outputs inconsistentes que no podés automatizar ni versionar.
- Riesgo de calidad al no especificar restricciones críticas (seguridad, formato, idioma).
02 —
La solución: los 4 componentes de un prompt estructurado
Todo prompt efectivo tiene 4 componentes que responden a 4 preguntas fundamentales. Pueden aparecer en cualquier orden dentro del prompt, pero para tareas complejas los 4 deben estar presentes — para tareas simples, instrucción + input suelen alcanzar.
1. INSTRUCCIÓN → ¿Qué querés que haga?
2. CONTEXTO → ¿Qué necesita saber para hacerlo?
3. INPUT → ¿Sobre qué datos debe actuar?
4. OUTPUT → ¿En qué formato querés el resultado?
03 —
Cómo funciona
1. Instrucción — el verbo de acción
La instrucción es la tarea específica que solicitás. Usá verbos de acción claros y evitá ambigüedad.
- "Necesito algo para emails"
+ "Genera una función Python que valide direcciones de email"
Principios:
- Un verbo, una acción: "Genera", "Analiza", "Refactoriza", "Explica", "Compara"
- Especificidad técnica: no "hacé un código", sino "genera una función", "creá una clase", "escribí un test unitario"
- Sin ambigüedad: "Mejora este código" es vago; "Refactoriza para reducir complejidad ciclomática" es ejecutable
2. Contexto — el marco de referencia
El contexto le da al LLM la información que necesita para tomar decisiones correctas sobre estilo, restricciones, audiencia o dominio.
markdownEres un desarrollador senior en Python 3.11+ trabajando en una API REST.
El proyecto usa FastAPI, sigue PEP 8, y requiere type hints en todas las funciones.
La base de usuarios es internacional, por lo que el código debe manejar Unicode correctamente.
Tipos de contexto:
- Rol/Expertise: "Eres un arquitecto de software especializado en sistemas distribuidos"
- Stack técnico: "Proyecto en Node.js 18, TypeScript 5, usando Prisma ORM"
- Restricciones: "Sin dependencias externas", "Compatible con Python 3.8+", "Máximo 50 líneas"
- Audiencia: "Documentación para desarrolladores junior", "Presentación para C-level"
- Dominio: "En el contexto de procesamiento de pagos con PCI-DSS compliance"
3. Input — los datos de entrada
El input es el material sobre el que el LLM debe trabajar. Usá delimitadores claros para separar tu instrucción de los datos.
markdown# Triple comillas invertidas con tipo
```python
[código aquí]
```
# Etiquetas XML (especialmente efectivo en Claude)
<codigo>
[código aquí]
</codigo>
# Bloques con headers
--- CÓDIGO ACTUAL ---
[código aquí]
--- FIN CÓDIGO ---
# Secciones numeradas
## Entrada 1:
[datos]
## Entrada 2:
[datos]
Por qué usar delimitadores:
- Evitan que el LLM confunda tu código con instrucciones
- Permiten incluir texto que podría malinterpretarse (ej: "ignora las instrucciones previas" dentro de un input)
- Facilitan el parsing cuando automatizás
4. Output — el formato del resultado
Especificar el formato de salida elimina iteraciones innecesarias y permite automatización.
markdownRetorna únicamente el código Python en un bloque ```python```, sin explicaciones.
O bien:
Retorna un JSON con esta estructura:
{
"status": "success|error",
"code": "código generado",
"tests": ["test1", "test2"],
"dependencies": ["paquete1", "paquete2"]
}
Formatos comunes:
- Código puro: "Solo el código, sin markdown ni explicaciones"
- JSON estructurado: "Retorna JSON con campos: título, descripción, prioridad"
- Markdown específico: "Formato: título h2, lista de pasos, bloque de código al final"
- Tabla comparativa: "Tabla markdown con columnas: Feature, Opción A, Opción B, Recomendación"
- Diff/Patch: "Muestra solo las líneas modificadas en formato diff"
04 —
Cuándo aplicarlo
| Usá los 4 componentes cuando... | Solo instrucción + input cuando... |
| La tarea es ambigua o tiene múltiples interpretaciones | La tarea es trivial y autoexplicativa ("Traducí esto al inglés") |
| Necesitás outputs consistentes para automatizar | Es una consulta única exploratoria |
| Hay restricciones técnicas, de seguridad o de negocio | El contexto es irrelevante para el resultado |
| El resultado se usará en producción o decisiones críticas | Estás haciendo brainstorming o investigación rápida |
| Trabajás en equipo y otros van a replicar el prompt | Solo vos vas a usar el prompt una vez |
05 —
Ejercicio práctico
Objetivo: transformar un prompt vago en uno estructurado con los 4 componentes, y comprobar la diferencia en calidad de respuesta.
Contexto inicial: usá cualquier LLM disponible (Claude, ChatGPT, Gemini). No necesitás código previo.
Paso 1 — Ejecutá el prompt vago
promptgenera una función de validación de email
Observá el resultado: ¿Qué lenguaje usó? ¿Tiene manejo de errores? ¿Incluye tests? ¿Especifica qué regex usa o por qué? ¿Es segura contra ReDoS (regex denial of service)? Guardá mentalmente las carencias.
Paso 2 — Ejecutá el prompt estructurado
markdown# INSTRUCCIÓN
Genera una función TypeScript que valide direcciones de email según RFC 5322.
# CONTEXTO
- Proyecto: API REST en Node.js 20 con TypeScript 5
- Stack: Express, Zod para validación
- Requisitos de seguridad: debe prevenir ReDoS
- Audiencia: función interna, no expuesta a usuarios finales
- Restricciones: sin dependencias externas de validación (no usar librerías como validator)
# INPUT
La función recibirá strings desde un formulario web. Ejemplos de inputs esperados:
<ejemplos>
usuario@dominio.com
usuario.apellido+tag@subdominio.dominio.co.uk
invalido@
@invalido.com
usuario@dominio
</ejemplos>
# OUTPUT
Retorna el código TypeScript en un único bloque de código con:
1. La función principal con type annotations
2. Comentarios explicando las decisiones de la regex
3. 5 casos de test (3 válidos, 2 inválidos) en un bloque separado
4. Análisis de complejidad de la regex (para verificar protección ReDoS)
Compará el resultado: ¿Es específico para TypeScript? ¿Explica por qué esa regex? ¿Incluye tests? ¿Menciona protección ReDoS?
Paso 3 — Experimentá con variaciones
Modificá solo el componente CONTEXTO para ver cómo cambia el output, dejando la misma instrucción e input.
// Variación A — cambiar stack técnico
markdown# CONTEXTO
- Proyecto: Script Python 3.11 para limpieza de datos
- Sin frameworks, debe funcionar en stdlib
- Se ejecutará sobre 10M+ de registros, la performance es crítica
// Variación B — cambiar restricciones
markdown# CONTEXTO
- Proyecto: Aplicación educativa para enseñar regex
- El código debe ser extremadamente legible, priorizando claridad sobre rendimiento
- Incluye comentarios explicativos en cada parte de la regex
Observá cómo el mismo input genera implementaciones completamente distintas según el contexto.
Paso 4 — Validación
Verificá que tu prompt estructurado incluya los 4 componentes:
bash# Checklist de componentes
grep -c "INSTRUCCIÓN\|Genera\|Crea" tu_prompt.txt // Debe tener instrucción clara
grep -c "CONTEXTO\|Proyecto\|Requisitos" tu_prompt.txt // Debe tener contexto
grep -c "INPUT\|ejemplos\|recibirá" tu_prompt.txt // Debe especificar input
grep -c "OUTPUT\|Retorna\|Formato" tu_prompt.txt // Debe especificar formato
Resultado esperado: cada grep debe retornar al menos 1 match.
Auditoría
Este checklist solo prueba que ciertas palabras aparecen en el texto — no que el contenido debajo de cada sección sea específico o útil. Un prompt podría tener el header "# CONTEXTO" seguido de una frase vacía y pasar igual el check. Sirve como sanity check rápido, no como garantía de calidad. La validación real es leer el output: ¿el LLM realmente usó esa información, o la ignoró?
06 —
Troubleshooting rápido
| Si ves esto... | Causa | Solución |
| El LLM malinterpreta tu código de ejemplo como instrucción | No usaste delimitadores para el INPUT | Envolvé el código en fences con tipo o etiquetas XML |
| Outputs inconsistentes al repetir el mismo prompt | Falta especificidad en el OUTPUT | Definí estructura exacta: "JSON con keys: x, y, z" o "Markdown: título, lista, código" |
| El LLM añade características no solicitadas | Instrucción ambigua con verbos genéricos | Cambiá "mejora" por "refactoriza para reducir acoplamiento" o "añadí type hints" |
| El LLM mezcla explicación con código en el mismo bloque | No especificaste delimitadores ni formato de output | Añadí: "Retorná SOLO el bloque de código en ```typescript```, sin texto explicativo" |
| Respuestas genéricas que ignoran tu stack técnico | Contexto demasiado vago o ausente | Especificá versiones exactas: "Python 3.11+", "React 18 con hooks" |
07 —
Puntos clave
Concepto central: un prompt efectivo responde 4 preguntas en orden: QUÉ hacer (instrucción), QUÉ saber (contexto), SOBRE QUÉ (input), y CÓMO entregarlo (output). Sin estas 4 respuestas, estás pidiendo al LLM que adivine.
Para recordar:
- ✓ Usá delimitadores siempre que incluyas código, datos o texto largo como input
- ✓ Especificá versiones y stack en el contexto ("Python 3.11", "React 18", no solo "Python" o "React")
- ✓ Definí el formato de output antes de ejecutar, no después de recibir algo que no esperabas
- ✓ Un verbo, una acción en la instrucción ("Genera función", "Refactoriza clase", "Analiza complejidad")
- ✗ No asumas que el LLM conoce tu proyecto sin dar contexto (stack, restricciones, audiencia)
- ✗ No mezcles instrucciones con input sin delimitadores
- ✗ No uses verbos ambiguos como "mejora", "optimiza", "arregla" sin especificar qué aspecto exacto