¿Cuál es la mejor forma de aprender prompting?
Antes de hablar de técnicas, vale la pena empezar con una pregunta más fundamental: ¿qué estás haciendo realmente cuando escribes un prompt?
La mayoría de recursos enseñan prompting como un catálogo de técnicas — Chain of Thought, few-shot, role prompting. Son útiles, pero son herramientas. Aprender herramientas sin entender el problema que resuelven limita tu capacidad de adaptarte cuando encuentras algo nuevo.
Lo que realmente escala es un proceso de pensamiento que puedas ejecutar cada vez que interactúas con un LLM. Las técnicas se vuelven derivaciones naturales de ese proceso. Este documento es, justamente, ese proceso — cada sección es un paso, cada diagrama un checkpoint mental.
Paso 0: Calibrar el modelo mental
Antes de escribir un solo prompt, necesitas una representación precisa de qué es un LLM y cómo opera:
flowchart LR
A["Le hago una pregunta
y me da una respuesta"]
B["Le doy una especificación
y genera el output más probable
dado esa especificación"]
A -- "→" --> B
style A fill:#fff,stroke:#d0d0d0,color:#999,stroke-width:1px,rx:10,ry:10
style B fill:#f5f5f5,stroke:#888,color:#333,stroke-width:1.5px,rx:10,ry:10
Esta distinción tiene implicaciones directas en cómo estructuras tu comunicación:
- Si operas con el modelo mental de "pregunta → respuesta" → tiendes a escribir prompts conversacionales y ambiguos
- Si operas con el modelo mental de "especificación → output" → estructuras prompts con la misma precisión con la que escribirías una spec técnica
Tres propiedades del sistema que condicionan todo lo demás:
1. El modelo solo opera sobre lo explícito. No tiene acceso a tu intención. Información que no está codificada en el prompt no existe para el sistema.
2. Siempre genera output. No tiene mecanismo para señalar "información insuficiente". Llena gaps con la distribución más probable — que tiende hacia lo genérico.
3. Interpreta literalmente. "Hazlo bien" no tiene resolución semántica útil. "Genera una tabla con 3 columnas: problema, impacto, solución" sí.
Para reflexionar: Si el modelo solo trabaja con lo que recibe explícitamente, ¿qué información necesita tener para producir exactamente lo que quieres?
Paso 1: Definir el resultado antes de escribir el prompt
El error más frecuente en prompting no es técnico — es comenzar a escribir sin haber definido el criterio de éxito. Si tu intención es difusa, tu especificación va a ser difusa, y el output va a converger hacia lo genérico.
flowchart TD
A["¿Puedo describir en una oración
qué constituye un
resultado exitoso?"]
A -->|"SÍ"| B["Esa oración se convierte
en tu criterio de evaluación"]
A -->|"NO"| C["Vale la pena definirlo primero.
La claridad previa al prompt
es lo que más impacta el output."]
C -.->|"clarifica"| A
style A fill:#f5f5f5,stroke:#888,color:#333,stroke-width:1.5px,rx:10,ry:10
style B fill:#eef7ee,stroke:#8cb88c,color:#333,stroke-width:1px,rx:10,ry:10
style C fill:#fff,stroke:#d0d0d0,color:#666,stroke-width:1px,rx:10,ry:10
En la práctica:
Intención difusa: "Quiero aprender sobre bases de datos"
↓ (aplica: ¿qué resultado exitoso se ve?)
Resultado definido: "Una comparación de PostgreSQL vs MySQL
para una app SaaS multi-tenant con <1000 usuarios,
en formato de tabla con 5 criterios operacionales"
↓
El prompt se estructura naturalmente cuando el resultado está definido.
Para reflexionar: ¿Notas cómo la segunda versión elimina prácticamente toda la ambigüedad? El modelo ya no tiene que inferir qué tipo de comparación, para qué contexto, en qué formato. Eso es lo que hace la diferencia.
Paso 2: Los 5 filtros de completitud
Tienes tu resultado definido. Ahora vas a escribir el prompt. Antes de enviarlo, pásalo por estos 5 filtros — cada uno que falta es un grado de libertad que el modelo resolverá con lo más probable (lo más genérico):
flowchart TD
P["TU PROMPT
(borrador)"]
P --> F1
P --> F2
P --> F3
P --> F4
P --> F5
F1["Filtro 1
¿Verbo de acción preciso?
Analiza · Compara · Genera"]
F2["Filtro 2
¿Contexto relevante?
Stack · Proyecto · Audiencia"]
F3["Filtro 3
¿Formato de salida?
Tabla · JSON · Bullets"]
F4["Filtro 4
¿Exclusiones definidas?
Sin intro · Máx N"]
F5["Filtro 5
¿Criterio de evaluación?
¿Es medible?"]
F1 --> R["PROMPT LISTO"]
F2 --> R
F3 --> R
F4 --> R
F5 --> R
style P fill:#f0f0f0,stroke:#888,color:#333,stroke-width:1.5px,rx:12,ry:12
style R fill:#eef7ee,stroke:#8cb88c,color:#333,stroke-width:1.5px,rx:12,ry:12
style F1 fill:#fff,stroke:#d0d0d0,color:#333,stroke-width:1px,rx:8,ry:8
style F2 fill:#fff,stroke:#d0d0d0,color:#333,stroke-width:1px,rx:8,ry:8
style F3 fill:#fff,stroke:#d0d0d0,color:#333,stroke-width:1px,rx:8,ry:8
style F4 fill:#fff,stroke:#d0d0d0,color:#333,stroke-width:1px,rx:8,ry:8
style F5 fill:#fff,stroke:#d0d0d0,color:#333,stroke-width:1px,rx:8,ry:8
Para reflexionar: Estos 5 filtros no son específicos de LLMs. Son los mismos criterios de una buena delegación en cualquier contexto — definir la tarea, dar contexto, especificar formato, establecer límites, y tener forma de evaluar el resultado. La diferencia es que un LLM, a diferencia de un colega, nunca va a pedirte clarificación. Simplemente infiere.
Paso 3: Diagnóstico de fallos — las técnicas como compensaciones
Enviaste tu prompt y el resultado no es lo que esperabas. Aquí es donde la mayoría reescribe el prompt intuitivamente. Pero hay un enfoque más preciso: diagnosticar qué tipo de fallo ocurrió, porque cada tipo tiene una compensación específica.
flowchart TD
O["RECIBES EL OUTPUT"]
O -->|"Es lo que querías"| OK["Extrae el patrón
Guárdalo como template"]
O -->|"No es lo que querías"| D["¿Qué tipo
de fallo es?"]
D --> D1["Razonamiento
débil"]
D --> D2["Formato
incorrecto"]
D --> D3["Superficial
o genérico"]
D --> D4["Longitud
incorrecta"]
D --> D5["Falta
información"]
D1 --> R1["+ Chain of Thought"]
D2 --> R2["+ Few-shot examples"]
D3 --> R3["+ Role prompting"]
D4 --> R4["+ Restricciones"]
D5 --> R5["+ Contexto / RAG"]
R1 --> RE["Reescribe con
el ajuste específico"]
R2 --> RE
R3 --> RE
R4 --> RE
R5 --> RE
RE -.->|"reenvía"| O
style O fill:#f0f0f0,stroke:#888,color:#333,stroke-width:1.5px,rx:12,ry:12
style OK fill:#eef7ee,stroke:#8cb88c,color:#333,stroke-width:1px,rx:10,ry:10
style D fill:#f5f5f5,stroke:#888,color:#333,stroke-width:1.5px,rx:10,ry:10
style RE fill:#f0f0f0,stroke:#888,color:#333,stroke-width:1.5px,rx:12,ry:12
style D1 fill:#fff,stroke:#d0d0d0,color:#555,stroke-width:1px,rx:8,ry:8
style D2 fill:#fff,stroke:#d0d0d0,color:#555,stroke-width:1px,rx:8,ry:8
style D3 fill:#fff,stroke:#d0d0d0,color:#555,stroke-width:1px,rx:8,ry:8
style D4 fill:#fff,stroke:#d0d0d0,color:#555,stroke-width:1px,rx:8,ry:8
style D5 fill:#fff,stroke:#d0d0d0,color:#555,stroke-width:1px,rx:8,ry:8
style R1 fill:#f9f9f9,stroke:#bbb,color:#555,stroke-width:1px,rx:20,ry:20
style R2 fill:#f9f9f9,stroke:#bbb,color:#555,stroke-width:1px,rx:20,ry:20
style R3 fill:#f9f9f9,stroke:#bbb,color:#555,stroke-width:1px,rx:20,ry:20
style R4 fill:#f9f9f9,stroke:#bbb,color:#555,stroke-width:1px,rx:20,ry:20
style R5 fill:#f9f9f9,stroke:#bbb,color:#555,stroke-width:1px,rx:20,ry:20
Este es el punto clave: cada técnica de prompting es la compensación natural para una limitación específica del modelo. Cuando lo ves desde esta perspectiva, las técnicas se derivan del diagnóstico — no se memorizan de un catálogo:
| Observas en el output | Limitación subyacente | Compensación |
|---|---|---|
| Salta a conclusiones sin justificación | El modelo optimiza brevedad sobre razonamiento | Chain of Thought — forzar pasos intermedios explícitos |
| Contenido correcto, estructura incorrecta | Las instrucciones verbales son ambiguas para definir formato | Few-shot — los ejemplos definen el patrón con mayor precisión |
| Respuesta correcta pero genérica, sin profundidad | La distribución por default es generalista | Role prompting — filtrar hacia una distribución de expertise específica |
| Se extiende sin control o es demasiado breve | No tiene restricciones de alcance | Definir límites explícitos (longitud, exclusiones, scope) |
| Le falta información que no está en su training | El modelo no puede acceder a datos que no tiene | Inyectar contexto directamente en el prompt (RAG) |
Para reflexionar: ¿Ves cómo este enfoque es más robusto que memorizar técnicas? Si entiendes la limitación que cada técnica compensa, puedes adaptarlas o crear variaciones propias cuando encuentres un tipo de fallo nuevo.
Paso 4: Escalar — de prompt individual a pipeline
Una vez que el loop de un solo prompt es fluido, la siguiente pregunta natural es: ¿qué hago cuando la tarea excede la capacidad de un prompt individual?
La respuesta es componer prompts. Hay tres niveles de composición:
NIVEL 1 — Prompt aislado
flowchart LR
P["Prompt"] --> R["Resultado"]
style P fill:#f0f0f0,stroke:#888,color:#333,rx:10,ry:10
style R fill:#eef7ee,stroke:#8cb88c,color:#333,rx:10,ry:10
NIVEL 2 — Pipeline
flowchart LR
P1["P1"] --> P2["P2"] --> P3["P3"]
style P1 fill:#f0f0f0,stroke:#888,color:#333,rx:10,ry:10
style P2 fill:#f0f0f0,stroke:#888,color:#333,rx:10,ry:10
style P3 fill:#eef7ee,stroke:#8cb88c,color:#333,rx:10,ry:10
NIVEL 3 — Sistema autónomo
flowchart LR
A["Observa"] --> B["Decide"] --> C["Actúa"] --> A
style A fill:#f0f0f0,stroke:#888,color:#333,rx:10,ry:10
style B fill:#f0f0f0,stroke:#888,color:#333,rx:10,ry:10
style C fill:#f0f0f0,stroke:#888,color:#333,rx:10,ry:10
La mayoría de tareas profesionales se resuelven bien en el Nivel 1 ejecutado con rigor. Las tareas complejas viven en el Nivel 2. El Nivel 3 (agents) es donde todo converge, pero no es prerequisito para obtener valor significativo.
Para reflexionar: ¿Hay alguna tarea recurrente en tu trabajo donde descomponer en 2-3 prompts secuenciales mejoraría la calidad del resultado final?
Paso 5: El loop de competencia
Todo este proceso se internaliza con práctica deliberada sobre tareas reales:
flowchart LR
A["Tarea
real"] --> B["Resultado
definido"] --> C["5 filtros
al prompt"] --> D["Envía"]
D --> E["Diagnostica"]
E -->|"Ajusta"| C
E -->|"✓ OK"| F["Extrae
template"]
style A fill:#f0f0f0,stroke:#888,color:#333,stroke-width:1.5px,rx:10,ry:10
style B fill:#f0f0f0,stroke:#888,color:#333,stroke-width:1px,rx:10,ry:10
style C fill:#f0f0f0,stroke:#888,color:#333,stroke-width:1px,rx:10,ry:10
style D fill:#f0f0f0,stroke:#888,color:#333,stroke-width:1px,rx:10,ry:10
style E fill:#f5f5f5,stroke:#888,color:#333,stroke-width:1.5px,rx:10,ry:10
style F fill:#eef7ee,stroke:#8cb88c,color:#333,stroke-width:1px,rx:10,ry:10
Para reflexionar: ¿Cuál es la tarea que más repites en tu trabajo diario? Esa es tu campo de práctica óptimo — porque la iteración sobre un problema real que te importa es más efectiva que cualquier ejercicio artificial.
El principio unificador
flowchart LR
A["Claridad
de intención"] --> B["Precisión
de spec"] --> C["Calidad
de output"]
style A fill:#f0f0f0,stroke:#888,color:#333,stroke-width:1.5px,rx:10,ry:10
style B fill:#f0f0f0,stroke:#888,color:#333,stroke-width:1.5px,rx:10,ry:10
style C fill:#eef7ee,stroke:#8cb88c,color:#333,stroke-width:1.5px,rx:10,ry:10
Cuando la intención es clara, la especificación es precisa, y el output es predecible. Prompting es, en esencia, claridad de pensamiento aplicada a un medio específico.
Las técnicas son compensaciones útiles para limitaciones concretas del sistema. Pero el fundamento es más simple: la capacidad de articular con precisión qué quieres antes de pedirlo. Esa capacidad mejora cómo escribes specs, cómo delegas, cómo estructuras problemas. El prompting mejora como consecuencia natural.