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.
# 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.
- 4.1.5.1
prompt = 'Tell me about Python.' # Returns a 5-paragraph essay nobody asked for
- 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}])
- 4.1.5.3
# Few-shot para clasificar sentimientos messages = [{'role':'user','content':'positive: great product\nnegative: terrible\nClassify: '+review}]
- 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.'}]
- 4.1.5.5
system = 'You are a helpful assistant.' user = 'Summarize this legal contract in 2 sentences and flag any unusual clauses.'