C
Contextología
Prompt Engineering

Few-shot prompting: guía completa con ejemplos reales

25 de mayo de 2026· 6 min read

Few-shot prompting es una de las técnicas más efectivas y menos aprovechadas en prompt engineering. La idea es simple: en lugar de solo describir la tarea, incluyes ejemplos de inputs y outputs correctos directamente en el prompt. El modelo aprende el patrón y lo aplica al nuevo input.

La diferencia entre zero-shot (sin ejemplos) y few-shot (con 3-5 ejemplos) puede ser dramática en tareas de clasificación, extracción y formateo.

Zero-shot vs Few-shot: el impacto real

Tarea: clasificar el sentimiento de reseñas de productos.

Prompt zero-shot:

Clasifica el sentimiento de esta reseña como POSITIVO, NEGATIVO o NEUTRO.

Reseña: "El producto llegó en perfecto estado pero el embalaje dejaba mucho que desear."

El modelo puede responder de muchas formas: "NEUTRO", "neutral", "Neutro con matices negativos", etc. La inconsistencia del formato es el problema principal.

Prompt few-shot:

Clasifica el sentimiento de las reseñas. Responde SOLO con POSITIVO, NEGATIVO o NEUTRO.

Reseña: "Producto excelente, llegó antes de lo esperado y funciona perfectamente."
Clasificación: POSITIVO

Reseña: "Calidad pésima, se rompió a la semana. No lo recomiendo."
Clasificación: NEGATIVO

Reseña: "Cumple su función básica pero no destaca especialmente."
Clasificación: NEUTRO

Reseña: "El producto llegó en perfecto estado pero el embalaje dejaba mucho que desear."
Clasificación:

El modelo ahora sabe exactamente el formato esperado y tiene tres patrones de referencia.

Cuándo usar few-shot

Alta efectividad:

  • Clasificación con categorías específicas del dominio
  • Extracción de datos con formato particular
  • Transformaciones de texto con estilo específico
  • Tareas donde el formato del output es crítico

Menor efectividad:

  • Preguntas de conocimiento general (el modelo ya sabe la respuesta)
  • Tareas de razonamiento puro (aquí chain-of-thought funciona mejor)
  • Cuando tienes demasiados ejemplos y exceden el contexto

Cuántos ejemplos incluir

La respuesta depende de la tarea, pero hay patrones claros:

| Situación | Ejemplos recomendados | |-----------|----------------------| | Formato simple, categorías claras | 2-3 | | Clasificación con múltiples categorías | 1-2 por categoría | | Extracción de datos compleja | 3-5 | | Tarea muy específica del dominio | 5-10 | | Contexto limitado (menos de 8k tokens) | 1-3 |

Más ejemplos no siempre es mejor. Demasiados ejemplos pueden:

  • Agotar el contexto disponible para el input real
  • Hacer que el modelo sea demasiado rígido y no generalice bien
  • Aumentar el coste por llamada sin mejora proporcional

Selección de ejemplos: qué incluir

La calidad de los ejemplos importa más que la cantidad.

Criterios para buenos ejemplos

Representativos del caso general: evita elegir los casos más simples o más difíciles. Los ejemplos deben reflejar el tipo de input que el sistema recibirá en producción.

Cobertura de variantes: si la tarea tiene diferentes patrones, incluye un ejemplo de cada tipo. Para clasificación de 4 categorías, incluye al menos un ejemplo de cada una.

Sin sesgos sistemáticos: si todos tus ejemplos tienen el mismo formato de input, el modelo puede sobreajustarse a ese patrón.

Casos límite incluidos: un ejemplo de un caso ambiguo (con la respuesta correcta) ayuda al modelo a manejar incertidumbre.

Selección dinámica de ejemplos

Para sistemas en producción, la selección estática de ejemplos es subóptima. Los mejores resultados se consiguen seleccionando los ejemplos más similares al input actual:

from anthropic import Anthropic
import numpy as np

client = Anthropic()

# Base de datos de ejemplos
EJEMPLOS = [
    {"input": "El cliente pregunta por el horario de atención", "output": "consulta_horario"},
    {"input": "Necesito saber si tienen envío gratuito", "output": "consulta_envio"},
    {"input": "Quiero cancelar mi pedido número 12345", "output": "cancelacion_pedido"},
    {"input": "El producto que recibí está roto", "output": "incidencia_producto"},
    {"input": "¿Puedo cambiar la dirección de entrega?", "output": "modificar_pedido"},
    # ... más ejemplos
]

def obtener_embedding(texto: str) -> list:
    """Obtiene el embedding de un texto."""
    import openai
    response = openai.embeddings.create(
        model="text-embedding-3-small",
        input=texto
    )
    return response.data[0].embedding

def seleccionar_ejemplos_similares(query: str, n: int = 3) -> list:
    """Selecciona los n ejemplos más similares al query."""
    query_embedding = obtener_embedding(query)
    
    similitudes = []
    for ejemplo in EJEMPLOS:
        ejemplo_embedding = obtener_embedding(ejemplo["input"])
        similitud = np.dot(query_embedding, ejemplo_embedding)
        similitudes.append((similitud, ejemplo))
    
    similitudes.sort(reverse=True)
    return [e for _, e in similitudes[:n]]

def clasificar_intencion(mensaje_usuario: str) -> str:
    """Clasifica la intención del mensaje usando few-shot dinámico."""
    ejemplos_relevantes = seleccionar_ejemplos_similares(mensaje_usuario, n=3)
    
    # Construir el prompt con los ejemplos más relevantes
    ejemplos_texto = "\n\n".join([
        f"Input: {e['input']}\nIntención: {e['output']}"
        for e in ejemplos_relevantes
    ])
    
    prompt = f"""Clasifica la intención del mensaje de soporte al cliente.
Categorías posibles: consulta_horario, consulta_envio, cancelacion_pedido, 
incidencia_producto, modificar_pedido, otro

{ejemplos_texto}

Input: {mensaje_usuario}
Intención:"""
    
    response = client.messages.create(
        model="claude-haiku-3-5",
        max_tokens=30,
        messages=[{"role": "user", "content": prompt}]
    )
    return response.content[0].text.strip()

Few-shot chain-of-thought

La combinación más potente: few-shot con razonamiento paso a paso. Los ejemplos incluyen no solo el input y el output, sino el proceso de pensamiento intermedio.

PROMPT_COT = """Analiza estos contratos y determina si hay cláusulas problemáticas.

---
Cláusula: "El arrendador puede terminar el contrato con 3 días de preaviso por cualquier motivo."
Razonamiento: Esta cláusula es desequilibrada porque permite terminación unilateral con muy poco preaviso sin causa justificada. La legislación española requiere preaviso mínimo y causas justificadas para terminación anticipada.
Veredicto: PROBLEMÁTICA - Riesgo alto

---
Cláusula: "Las partes acuerdan someterse a arbitraje para resolver disputas en el plazo de 30 días."
Razonamiento: El arbitraje es un mecanismo válido de resolución de conflictos. El plazo de 30 días es razonable. No hay desequilibrio aparente entre las partes.
Veredicto: ACEPTABLE - Sin riesgo significativo

---
Cláusula: "El precio puede ajustarse anualmente según el índice IPC publicado por el INE."
Razonamiento: La indexación al IPC es una práctica estándar y transparente. El índice INE es oficial y verificable. Es equitativo para ambas partes.
Veredicto: ACEPTABLE - Práctica estándar

---
Cláusula: {clausula}
Razonamiento:"""

Incluir el razonamiento en los ejemplos hace que el modelo razone de forma similar antes de dar su veredicto, mejorando significativamente la calidad en tareas complejas.

Formato de los ejemplos

El formato influye en la consistencia del output. Elige uno y mantenlo:

# Opción 1: Separadores claros
Input: [texto]
Output: [respuesta]

# Opción 2: Etiquetas XML
<ejemplo>
<entrada>[texto]</entrada>
<salida>[respuesta]</salida>
</ejemplo>

# Opción 3: Formato conversacional (para modelos de chat)
Usuario: [texto]
Asistente: [respuesta]

La opción con etiquetas XML tiende a dar mejores resultados con Claude. El formato conversacional funciona bien cuando quieres que el output suene natural.

Errores frecuentes

Ejemplos que no reflejan el caso de uso real: ejemplos demasiado simples pueden hacer que el modelo falle con inputs más complejos de los que aparecen en producción.

Sin ejemplo de categoría "otro": en tareas de clasificación, si no incluyes un ejemplo de "ninguna de las anteriores", el modelo puede forzar cualquier input a una categoría existente.

Inconsistencia en el formato: si algunos ejemplos usan mayúsculas y otros no, el output será inconsistente.

No iterar los ejemplos: los ejemplos iniciales son un punto de partida. Analiza los casos donde el modelo falla y añade ejemplos que cubran esos patrones.

Cuándo pasar a fine-tuning

Si necesitas más de 20-30 ejemplos para lograr la calidad deseada, y esos ejemplos son consistentes (no varían mucho), considera fine-tuning en lugar de few-shot. El fine-tuning puede internalizar cientos de patrones y reducir el tamaño del prompt significativamente, reduciendo costes a escala.

Pon en práctica lo que has aprendido

Generador de System Prompt

Construye un system prompt con ejemplos few-shot integrados.

Abrir herramienta gratuita →

Recibe lo mejor de Contextología

Diseño de contexto, agentes y workflows de IA directamente en tu correo.