genai · temario
4.1tema 1 de 5

Effective Prompting

Cómo hablarle a un LLM para obtener resultados consistentes y confiables

Un modelo de lenguaje no adivina tu intención: interpreta el texto que le das. Si el prompt es ambiguo, la respuesta también lo será. La diferencia entre un prompt mediocre y uno efectivo no es magia — es estructura. Todo prompt útil tiene al menos tres piezas: un rol que sitúa al modelo, un contexto que acota el dominio, y una instrucción clara que define la tarea.

El rol actúa como un 'sombrero' que el modelo se pone: 'Eres un revisor de código senior especializado en Python' produce respuestas muy distintas a 'Eres un asistente genérico'. El contexto proporciona los datos y restricciones del problema. La instrucción especifica exactamente qué hacer con esos datos. Separar las tres piezas —aunque sea mentalmente— es el primer hábito que marca la diferencia.

El few-shot prompting aprovecha la capacidad de los LLMs de reconocer patrones en ejemplos. En lugar de explicar la regla abstracta, muestras tres o cuatro casos de entrada/salida y el modelo infiere el patrón. Funciona especialmente bien para tareas de formato (convertir texto a JSON, extraer campos, clasificar) donde la regla es difícil de verbalizar pero los ejemplos son evidentes.

Chain-of-thought (CoT) le pide al modelo que razone paso a paso antes de dar la respuesta final. Añadir 'Piensa paso a paso' o 'Let's think step by step' antes de la pregunta reduce errores en razonamiento matemático y lógico de manera consistente. La razón es que el modelo genera tokens intermedios de razonamiento que sirven como 'memoria de trabajo', análogos a escribir borradores antes de entregar el informe final.

La temperatura controla la aleatoriedad de las salidas: 0.0 produce respuestas casi deterministas (ideal para extracción de datos, código, validación), mientras que valores cercanos a 1.0 aumentan la variedad creativa (útil para brainstorming o generación de opciones). Un error común es usar temperatura alta para tareas que requieren precisión, o temperatura 0 para tareas donde necesitas exploración. El parámetro `max_tokens` limita el largo de la respuesta — no ajustarlo puede cortar respuestas largas o desperdiciar presupuesto de tokens.

Los límites en el prompt son tan importantes como las instrucciones: decirle explícitamente al modelo qué NO hacer, qué longitud debe tener la respuesta, en qué idioma responder, y qué formato usar. Un prompt sin límites produce respuestas que van a la deriva. Piénsalo como el plano de un arquitecto: sin dimensiones y restricciones, el constructor toma decisiones arbitrarias.

structure.txt
# Anatomy of a well-structured prompt

ROLE:        You are a senior Python code reviewer.
CONTEXT:     The following function is part of a REST API handler.
             It must be thread-safe and handle up to 1000 req/s.
INSTRUCTION: Review it for correctness, performance, and security.
             Return a JSON array of issues: [{line, severity, description}]

# Few-shot example (classification)

Input:  'The product arrived broken.'  -> Label: negative
Input:  'Delivery was super fast!'     -> Label: positive
Input:  'It works, I guess.'           -> Label: neutral
Input:  'I love the new design!'       -> Label: ???

# Chain-of-thought trigger

Q: A train leaves at 09:00 doing 80 km/h. Another leaves at 10:00
   doing 120 km/h. When do they meet?
A: Let's think step by step.
   Step 1: At 10:00 the first train has traveled 80 km.
   Step 2: Relative speed = 120 - 80 = 40 km/h.
   Step 3: Time to close 80 km gap = 80/40 = 2 h.
   Answer: They meet at 12:00.

# API call with temperature and max_tokens

response = client.messages.create(
    model='claude-opus-4-5',
    max_tokens=512,
    temperature=0.0,        # deterministic — for extraction tasks
    messages=[
        {'role': 'user', 'content': prompt}
    ]
)

Debugging lab

Detecta y corrige el error en el código.

0/5 tests passing0%
  1. 4.1.5.1

    prompt = 'Tell me about Python.' # Returns a 5-paragraph essay nobody asked for

  2. 4.1.5.2

    response = client.messages.create(model='claude-haiku-4-5', max_tokens=1024, temperature=0.9, messages=[{'role':'user','content':'Extract the invoice total from this text: '+text}])

  3. 4.1.5.3

    # Few-shot para clasificar sentimientos messages = [{'role':'user','content':'positive: great product\nnegative: terrible\nClassify: '+review}]

  4. 4.1.5.4

    # Prompt para resolver un problema de lógica messages = [{'role':'user','content':'If all A are B and some B are C, are some A definitely C? Answer yes or no.'}]

  5. 4.1.5.5

    system = 'You are a helpful assistant.' user = 'Summarize this legal contract in 2 sentences and flag any unusual clauses.'