Módulo 1: Fundamentos de Prompt Engineering

1. Introducción: Prompt Engineering como Disciplina

Descripción

Esta es la primera cápsula del Módulo 1 de Advanced Prompt Engineering. Aquí vas a entender la diferencia fundamental entre "usar ChatGPT" y hacer prompt engineering profesional. La mayoría de developers que trabajan con LLMs escriben prompts por intuición: prueban algo, si funciona lo dejan, si no lo reescriben hasta que "se ve bien". Eso no escala en producción.

Prompt engineering como disciplina es diseñar inputs para LLMs que producen outputs predecibles, evaluables y optimizados. No es arte ni magia: es ingeniería con principios, patrones y prácticas reproducibles. Este módulo te da el marco mental y las herramientas que usarás en los 7 módulos siguientes.

Por qué importa: Sin entender prompt engineering como disciplina, los módulos posteriores (zero-shot, few-shot, CoT, ReAct, evaluation) serían técnicas sueltas sin contexto. Con esta base, cada técnica encaja en un framework coherente: componentes identificables, roles que controlan comportamiento, parámetros que afectan resultados.


Diferencia: Usar ChatGPT vs Prompt Engineering

Usar ChatGPT (enfoque casual)

  • Escribes una pregunta o instrucción
  • Si la respuesta es buena, la usas
  • Si no, reescribes y vuelves a intentar
  • No hay método, no hay métricas, no hay reproducibilidad
  • Funciona para tareas personales y exploración

Prompt Engineering (enfoque profesional)

  • Diseñas prompts con componentes identificables (instrucción, contexto, input, output format)
  • Configuras roles (system, user, assistant) como contrato de comportamiento
  • Ajustas parámetros (temperature, max_tokens) según el caso de uso
  • Evalúas con métricas objetivas, no con "se ve bien"
  • Versionas prompts, haces A/B testing, optimizas costos
  • Funciona para sistemas en producción que sirven a usuarios reales

La transición: "Lo que haces funciona a veces" → "funciona siempre, con cualquier modelo, de forma predecible".


Prompt Engineering como Skill de Ingeniería

Por qué no es "arte"

Arte: Subjetivo, depende del talento individual, difícil de replicar.

Ingeniería: Sistemático, basado en principios, reproducible por cualquier equipo.

Evidencia de que es ingeniería:

  1. Componentes identificables: Un prompt profesional tiene estructura: instrucción, contexto, input, output format. Puedes analizarlo, descomponerlo, y mejorarlo por partes.

  2. Parámetros configurables: Temperature, top_p, max_tokens afectan el resultado de forma predecible. No es "el modelo decidió" — es "configuraste X y obtuviste Y".

  3. Evaluación objetiva: Métricas como accuracy, faithfulness, format compliance permiten medir si un prompt mejora o empeora. No "se ve bien" sino "score 0.92 vs 0.78".

  4. Versionado y CI/CD: Los prompts se versionan, se testean, y se despliegan como cualquier artefacto de software. Un cambio en el prompt puede romper un sistema; por eso hay regression testing.

Analogía: Escribir prompts como ingeniería es como escribir SQL. Un desarrollador junior escribe queries que "funcionan a veces". Un senior diseña queries optimizadas, con índices, con constraints, que funcionan siempre y son mantenibles. Prompt engineering es el mismo salto de nivel.


Dos Tipos de Problemas que Resuelve

Problema 1: Outputs inconsistentes

Sin método, el mismo prompt puede dar resultados muy diferentes en llamadas sucesivas, especialmente al cambiar de modelo o versión.

from openai import OpenAI
client = OpenAI()

# Prompt casual — temperatura alta, sin constrainst de formato
for i in range(3):
    r = client.chat.completions.create(
        model="gpt-4o-mini",
        messages=[{"role": "user", "content": "Clasifica este email como urgente o no urgente: 'El servidor de producción está caído.'"}],
        temperature=0.7  # Alta — resultados variables
    )
    print(f"  Intento {i+1}: {r.choices[0].message.content}")
# Puede producir:
#   Intento 1: "Urgente"
#   Intento 2: "Este email claramente indica una situación urgente, ya que..."
#   Intento 3: "URGENTE - Requiere atención inmediata"

# Prompt engineered — temperatura 0, formato estricto
for i in range(3):
    r = client.chat.completions.create(
        model="gpt-4o-mini",
        messages=[
            {"role": "system", "content": "Clasifica emails. Responde SOLO con: URGENTE o NO_URGENTE. Nada más."},
            {"role": "user", "content": "El servidor de producción está caído."}
        ],
        temperature=0,
        max_tokens=5
    )
    print(f"  Intento {i+1}: {r.choices[0].message.content}")
# Produce siempre:
#   Intento 1: URGENTE
#   Intento 2: URGENTE
#   Intento 3: URGENTE

Problema 2: Comportamiento impredecible entre modelos

import anthropic

oai = OpenAI()
ant = anthropic.Anthropic()

# Mismo prompt casual en dos modelos
prompt_casual = "Resume este texto: 'El mercado cayó 3% ayer debido a cifras de inflación.'"

r_oai = oai.chat.completions.create(
    model="gpt-4o-mini",
    messages=[{"role": "user", "content": prompt_casual}],
    temperature=0
)

r_ant = ant.messages.create(
    model="claude-3-5-haiku-20241022",
    messages=[{"role": "user", "content": prompt_casual}],
    temperature=0,
    max_tokens=100
)

# Ambos funcionan, pero el formato puede variar entre modelos
# Para código que depende del output: problema potencial

# Prompt engineered — mismo resultado en ambos:
prompt_eng = """
Resume en exactamente 1 oración, máximo 15 palabras, en inglés.
Texto: "El mercado cayó 3% ayer debido a cifras de inflación."
Resumen:"""

# Resultado consistente independientemente del modelo

Posición en el Stack de AI Engineering

┌─────────────────────────────────────────────────────────┐
│  AI Engineering Stack                                   │
├─────────────────────────────────────────────────────────┤
│  Deployment, Monitoring, Cost Optimization (Nivel 3)    │
│  Evaluation, Testing, Guardrails (Nivel 2)               │
│  Agents, RAG, Chains (Nivel 1)                           │
│  ← Prompt Engineering (ESTA GUÍA)                       │
│  LLM Access, APIs, Python (Fundamentos)                  │
└─────────────────────────────────────────────────────────┘

Prompt engineering es la capa entre: "Sabes llamar APIs de LLMs" y "Construyes sistemas RAG, agents, chains".

  • Todo sistema AI usa prompts: el system prompt de un chatbot, el prompt de un RAG para generar respuestas, las instrucciones de un agente.
  • Sin prompts bien diseñados, el mejor RAG o el mejor agente falla por outputs inconsistentes, formatos incorrectos, o comportamiento impredecible.
  • Esta guía te da la base para que cuando construyas RAG (guía #8), agents (guía #11), o evaluation pipelines, tus prompts sean production-ready.

Qué Cambia con Esta Guía

Antes (si solo usabas ChatGPT o APIs básicas):

  • Prompts por intuición
  • Sin estructura de componentes
  • Sin system prompts como contrato
  • Sin parámetros configurados conscientemente
  • Sin evaluación más allá de "probé y funcionó"

Después (al completar esta guía):

  • Prompts con método (CRISPE, anatomía, roles)
  • Componentes identificables y evaluables
  • System prompts que controlan comportamiento
  • Parámetros elegidos según caso de uso
  • Evaluation con métricas, regression testing, A/B testing
  • Prompts versionados y gestionados en producción

Roadmap del Módulo 1

#CápsulaQué verás
01Introducción (esta)Prompt engineering como disciplina, posición en el stack
02Anatomía de un promptComponentes: instrucción, contexto, input, output format. Tokens
03Roles: system, user, assistantSystem prompt como contrato. Multi-turn
04Temperature y parámetrostemperature, top_p, max_tokens. Cuándo usar cada valor
05Mental models (CRISPE)Framework para diseñar prompts sistemáticamente
06Comparación: casual vs engineeredSide-by-side con métricas. Cuándo basta lo básico
07Proveedores y diferenciasOpenAI vs Anthropic vs Google. Adapter patterns
08Proyecto: Prompt AnalyzerSistema que clasifica, descompone y sugiere mejoras

Duración estimada: 1.0-1.25 hrs para el módulo completo.


Qué NO Cubre Este Módulo

  • Fine-tuning: Ajustar los pesos del modelo (eso requiere entrenamiento, no está en scope)
  • Prompt injection a fondo: Cubrimos guardrails básicos en M3; ataques avanzados son tema de seguridad especializada
  • Jailbreaking: Técnicas para romper guardrails de seguridad no son útiles en producción
  • NLP matemático: Attention, embeddings, matrices de pesos — esto es para quienes construyen modelos, no los usan

Qué sí cubre: Todo lo que un AI Engineer necesita para usar LLMs en producción de forma profesional y reproducible.


Setup Técnico

Prerequisitos

  • Python 3.11+
  • OpenAI API key (o Anthropic para comparaciones)
  • Experiencia con requests o SDKs de APIs

Instalación

# Crear entorno virtual
python -m venv venv
source venv/bin/activate  # Mac/Linux
# venv\Scripts\activate  # Windows

# Instalar dependencias
pip install openai>=1.0.0 anthropic>=0.25.0 python-dotenv>=1.0.0 pydantic>=2.0.0

Archivo .env

# .env
OPENAI_API_KEY=sk-proj-...
ANTHROPIC_API_KEY=sk-ant-...  # Opcional para cápsula 07

Verificar instalación

# verify_setup.py
import os
from openai import OpenAI
from dotenv import load_dotenv

load_dotenv()

client = OpenAI()

response = client.chat.completions.create(
    model="gpt-4o-mini",
    messages=[{"role": "user", "content": "Di exactamente: 'Setup correcto'"}],
    temperature=0,
    max_tokens=20
)

print(response.choices[0].message.content)
# Output esperado: Setup correcto

Conexión con el Resto de la Guía

Este módulo es la base conceptual para todo lo que viene:

  • M2 (Zero-Shot / Few-Shot): Usa anatomía de prompts para construir ejemplos con método
  • M3 (Structured Outputs): Amplía "output format" a schemas Pydantic y JSON mode
  • M4 (Chain-of-Thought): Agrega "razonamiento" como componente dentro del output format
  • M5 (ReAct): Combina el "context" con herramientas y observaciones externas
  • M6 (Prompt Composition): Encadena múltiples prompts con anatomía bien definida
  • M7 (Evaluation): Mide cada componente de anatomía con métricas objetivas
  • M8 (Production): Versiona, cachea y monitorea prompts con estructura consistente

El Ciclo de un Prompt Engineer en Producción

En la práctica, trabajar con prompts en producción sigue un ciclo iterativo que verás aplicado en cada módulo:

1. DISEÑAR
   Definir objetivo → Elegir componentes (CRISPE) → Draft inicial
         │
         ▼
2. PROBAR
   Ejecutar con ejemplos representativos → Capturar outputs
         │
         ▼
3. EVALUAR
   Medir con métricas objetivas → Identificar failures por componente
         │
         ▼
4. REFINAR
   Ajustar el componente que falla → No reescribir todo
         │
         ▼
5. VERSIONAR
   Guardar versión → Tag de cambio → Regression tests
         │
         └──────────────── Repetir con nueva tarea ────────────────▶

Este ciclo aparece en el Prompt Analyzer (M1-08), en el Few-Shot System (M2-08), en el Structured Data Extractor (M3-08), y en cada proyecto de la guía. Al final de esta guía, tendrás interiorizado este ciclo como forma de trabajar.


Primer Código: Comparación Directa

El siguiente código muestra en 30 líneas la diferencia clave entre prompt casual y engineered en un caso concreto: clasificar la urgencia de tickets de soporte.

from openai import OpenAI
from dotenv import load_dotenv

load_dotenv()
client = OpenAI()

TICKET = "La base de datos de producción no responde desde hace 20 minutos. Usuarios afectados: 5000."

# === PROMPT CASUAL ===
r_casual = client.chat.completions.create(
    model="gpt-4o-mini",
    messages=[{"role": "user", "content": f"¿Esto es urgente? {TICKET}"}],
    temperature=0.7
)
print("Casual:", r_casual.choices[0].message.content[:100])
# Puede dar: "Sí, esto es muy urgente porque..." (texto libre, no parseable)

# === PROMPT ENGINEERED ===
r_eng = client.chat.completions.create(
    model="gpt-4o-mini",
    messages=[
        {
            "role": "system",
            "content": (
                "Eres un clasificador de urgencia de tickets de soporte. "
                "Clasifica en: CRITICO, ALTO, MEDIO, o BAJO. "
                "Responde SOLO con la categoría. Nada más."
            )
        },
        {"role": "user", "content": TICKET}
    ],
    temperature=0,
    max_tokens=10
)
print("Engineered:", r_eng.choices[0].message.content)
# Siempre da: CRITICO

En las 8 cápsulas de este módulo aprenderás exactamente por qué cada decisión del "prompt engineered" (system prompt, temperature=0, max_tokens, formato de respuesta) importa y qué pasa cuando las cambias.


Evidencia de Éxito

Al terminar este módulo debes poder:

  • Explicar prompt engineering como disciplina (no como "tips") en 3 oraciones
  • Identificar los 4 componentes de un prompt en cualquier ejemplo
  • Configurar temperature y max_tokens conscientemente según el caso de uso
  • Diseñar un prompt usando el framework CRISPE
  • Comparar el comportamiento de OpenAI vs Anthropic con el mismo prompt
  • Construir un Prompt Analyzer básico funcional (cápsula 08)

Preguntas Frecuentes al Empezar

¿Necesito saber Machine Learning para esta guía? No. Esta guía asume que sabes Python y consumir APIs REST. No necesitas entender cómo funciona un transformer internamente para diseñar prompts efectivos.

¿Los prompts de esta guía funcionarán en 6 meses cuando los modelos cambien? Los principios sí. Los valores exactos de parámetros pueden ajustarse. El framework CRISPE, la anatomía de prompts, los patrones zero-shot/few-shot son fundamentos que se mantienen independientemente del modelo. El Módulo 7 (Evaluación) te da las herramientas para detectar cuándo un prompt regresó con un nuevo modelo.

¿Cuánto tiempo lleva dominar prompt engineering? Para tener prompts production-ready: 2-3 semanas de práctica activa. Para dominar técnicas avanzadas (CoT, ReAct, evaluation): 2-3 meses de trabajo en proyectos reales. Esta guía te da el mapa; los proyectos de cada módulo son la práctica deliberada.

¿Debo usar OpenAI o Anthropic? Empieza con OpenAI (gpt-4o-mini para práctica, costo bajo). La cápsula 07 explica diferencias y cuándo usar cada uno. El módulo 7 y 8 cubren multi-provider en producción.


Resumen

  • Prompt engineering es una disciplina de ingeniería, no arte: componentes identificables, parámetros configurables, evaluación objetiva.
  • Diferencia clave: Usar ChatGPT = intuición. Prompt engineering = método reproducible.
  • Posición: Capa entre "LLM APIs" y "RAG, agents, chains". Todo sistema AI usa prompts.
  • Qué cambia: De "funciona a veces" a "funciona siempre, con cualquier modelo, de forma predecible".
  • En este módulo: Anatomía, roles, parámetros, CRISPE, comparación proveedores, y el Prompt Analyzer como proyecto.
  • Límites: No cubre fine-tuning, jailbreaking, ni NLP matemático. Solo lo que un AI Engineer usa en producción.

Recursos adicionales

  1. OpenAI API Reference — Documentación oficial de la API y parámetros disponibles
  2. Anthropic Messages API — API de Claude con diferencias de diseño respecto a OpenAI
  3. Prompt Engineering Guide (OpenAI) — Guía oficial de prompting con estrategias recomendadas
  4. Learn Prompting — Recursos introductorios de prompt engineering con ejemplos
  5. tiktoken — Librería de OpenAI para contar tokens en tus prompts
  6. Prompting Guide (DAIR.AI) — Referencia comprensiva de técnicas de prompting con papers