MÓDULO 2 · PROMPT ENGINEERING · 35 MIN

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.
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:

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?
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:

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:

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:

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:

Cuándo aplicarlo
Usá los 4 componentes cuando...Solo instrucción + input cuando...
La tarea es ambigua o tiene múltiples interpretacionesLa tarea es trivial y autoexplicativa ("Traducí esto al inglés")
Necesitás outputs consistentes para automatizarEs una consulta única exploratoria
Hay restricciones técnicas, de seguridad o de negocioEl contexto es irrelevante para el resultado
El resultado se usará en producción o decisiones críticasEstás haciendo brainstorming o investigación rápida
Trabajás en equipo y otros van a replicar el promptSolo vos vas a usar el prompt una vez
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.

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ó?

Troubleshooting rápido
Si ves esto...CausaSolución
El LLM malinterpreta tu código de ejemplo como instrucciónNo usaste delimitadores para el INPUTEnvolvé el código en fences con tipo o etiquetas XML
Outputs inconsistentes al repetir el mismo promptFalta especificidad en el OUTPUTDefiní estructura exacta: "JSON con keys: x, y, z" o "Markdown: título, lista, código"
El LLM añade características no solicitadasInstrucción ambigua con verbos genéricosCambiá "mejora" por "refactoriza para reducir acoplamiento" o "añadí type hints"
El LLM mezcla explicación con código en el mismo bloqueNo especificaste delimitadores ni formato de outputAñadí: "Retorná SOLO el bloque de código en ```typescript```, sin texto explicativo"
Respuestas genéricas que ignoran tu stack técnicoContexto demasiado vago o ausenteEspecificá versiones exactas: "Python 3.11+", "React 18 con hooks"
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: