intermediate45 minLección 3 de 5

Técnicas Avanzadas de Prompting

Domina Chain-of-Thought, Few-Shot, Salidas Estructuradas, Self-Consistency y Tree-of-Thoughts.

Técnicas Avanzadas de Prompting

¿Por qué Técnicas Avanzadas?

El prompting básico funciona para tareas simples, pero el razonamiento complejo, las salidas estructuradas y los problemas especializados requieren enfoques más sofisticados. Cada técnica en esta lección aborda una limitación específica del prompting básico — desde mejorar el razonamiento paso a paso hasta permitir exploración multi-camino.

Cuándo el Prompting Básico es Insuficiente

LimitaciónIntento BásicoTécnica Avanzada
Problemas de matemáticas/lógica multi-pasoModelo adivina respuesta finalChain-of-Thought: razonamiento paso a paso
Formatos de salida desconocidosModelo inventa formato incorrectoFew-Shot: ejemplos guían al modelo
Necesidad de salida legible por máquinaRespuestas de texto inconsistentesSalidas Estructuradas: modo JSON
Respuesta única puede estar equivocadaSin forma de verificar correcciónSelf-Consistency: votación mayoritaria
Exploración/planificación complejaModelo sigue un caminoTree-of-Thoughts: múltiples ramas

Chain-of-Thought (CoT) Prompting

Chain-of-Thought prompting anima al modelo a dividir problemas en pasos intermedios de razonamiento. En lugar de saltar directamente a una respuesta, el modelo "muestra su trabajo," lo que tanto mejora la precisión como facilita la depuración de errores.

Flujo de Razonamiento CoT

100%

Secuencia Completa de Razonamiento CoT

100%

Ejemplo CoT

P: Una tienda tiene 15 manzanas. Venden 4, luego reciben una entrega que duplica su cantidad actual de manzanas. ¿Cuántas manzanas tienen ahora? Pensemos paso a paso: 1. Empieza con 15 manzanas 2. Después de vender 4: 15 - 4 = 11 manzanas 3. La entrega duplica la cantidad actual: 11 * 2 = 22 manzanas Respuesta: 22
ℹ️Note

Simplemente agregar "Pensemos paso a paso" a tu prompt puede mejorar significativamente el rendimiento de razonamiento en problemas de matemáticas y lógica.

⚠️Warning

Costos de token del CoT: Chain-of-Thought puede aumentar los tokens de salida en 3-10x porque el modelo genera pasos intermedios de razonamiento antes de la respuesta final. Para aplicaciones sensibles al costo, considera usar prompts más cortos como "Explica brevemente" o limitar max_tokens. Para un sistema de producción procesando millones de solicitudes, este multiplicador de tokens afecta directamente tus costos.

CoT en Código

python
from openai import OpenAI client = OpenAI() # Sin CoT response_direct = client.chat.completions.create( model="gpt-4", messages=[ {"role": "user", "content": "Si una camiseta cuesta $40 y tiene 25% de descuento, más 8% de impuesto, ¿cuál es el precio final?"} ], temperature=0.0 ) print("Directo:", response_direct.choices[0].message.content) # Con CoT response_cot = client.chat.completions.create( model="gpt-4", messages=[ {"role": "user", "content": """Si una camiseta cuesta $40 y tiene 25% de descuento, más 8% de impuesto, ¿cuál es el precio final? Pensemos paso a paso:"""} ], temperature=0.0 ) print("\nCoT:", response_cot.choices[0].message.content)

Variantes de CoT

VarianteDescripciónMejor Para
Zero-shot CoTSolo añade "Pensemos paso a paso"Mejora rápida de razonamiento
Few-shot CoTProporciona cadenas de razonamiento de ejemploFormato consistente, problemas más difíciles
CoT EstructuradoExige pasos numerados o formato de viñetasDepuración, pistas de auditoría
CoT Multi-promptPide razonamiento, luego respuesta en llamadas separadasProblemas complejos que necesitan verificación

Few-Shot y Multi-Shot Prompting

Few-shot prompting proporciona ejemplos en el prompt para guiar el comportamiento del modelo.

TécnicaEjemplos ProporcionadosMejor Para
Zero-Shot0 ejemplosTareas simples, patrones comunes
Few-Shot1-5 ejemplosFormatos específicos, tareas nuevas
Multi-Shot5+ ejemplosPatrones complejos, alternativa a fine-tuning

Ejemplo Few-Shot: Análisis de Sentimiento

Clasifica el sentimiento como POSITIVO, NEGATIVO o NEUTRO. Ejemplo 1: Reseña: "¡Esta película fue increíble, la mejor que he visto en todo el año!" Sentimiento: POSITIVO Ejemplo 2: Reseña: "Servicio terrible, nunca volveré." Sentimiento: NEGATIVO Ejemplo 3: Reseña: "El restaurante está en la calle 5." Sentimiento: NEUTRO Ahora clasifica: Reseña: "El producto funciona como se describe, nada excepcional." Sentimiento:
💡Tip

Eligiendo los ejemplos correctos: Selecciona ejemplos que cubran el rango de entradas esperadas. Incluye casos límite y ejemplos ambiguos. Ejemplos mal elegidos (ej: todos sentimiento positivo cuando el conjunto de prueba tiene sentimiento mixto) sesgan al modelo. Además, el orden importa — los modelos tienden a estar más influenciados por el último ejemplo (sesgo de actualidad).

Few-Shot en Código

python
from openai import OpenAI client = OpenAI() # Ejemplos few-shot ejemplos = [ {"resena": "¡Esta película fue increíble, la mejor que he visto en todo el año!", "sentimiento": "POSITIVO"}, {"resena": "Servicio terrible, nunca volveré.", "sentimiento": "NEGATIVO"}, {"resena": "El restaurante está en la calle 5.", "sentimiento": "NEUTRO"}, ] def few_shot_clasificar(texto_resena: str, ejemplos: list[dict]) -> str: prompt = "Clasifica el sentimiento como POSITIVO, NEGATIVO o NEUTRO.\n\n" for i, ej in enumerate(ejemplos, 1): prompt += f"Ejemplo {i}:\nReseña: \"{ej['resena']}\"\nSentimiento: {ej['sentimiento']}\n\n" prompt += f"Ahora clasifica:\nReseña: \"{texto_resena}\"\nSentimiento:" response = client.chat.completions.create( model="gpt-4", messages=[{"role": "user", "content": prompt}], temperature=0.0 ) return response.choices[0].message.content.strip() prueba = "El producto funciona como se describe, nada excepcional." print(few_shot_clasificar(prueba, ejemplos))

Salidas Estructuradas (Modo JSON)

Muchos LLMs soportan formatos de salida estructurados, críticos para integración programática.

python
from openai import OpenAI import json client = OpenAI() response = client.chat.completions.create( model="gpt-4-turbo-preview", messages=[ {"role": "system", "content": "Extrae datos del cliente y devuélvelos como JSON."}, {"role": "user", "content": """ Extrae información de este correo: "Hola, soy Juan Pérez de Acme Corp. Mi teléfono es 555-0123. Me gustaría pedir 10 unidades del plan PRO a $99/mes." """} ], response_format={"type": "json_object"} # Modo JSON activado ) # Parsear la salida estructurada result = json.loads(response.choices[0].message.content) print(json.dumps(result, indent=2, ensure_ascii=False))

Salida Esperada:

json
{ "cliente": { "nombre": "Juan Pérez", "empresa": "Acme Corp", "telefono": "555-0123" }, "pedido": { "producto": "plan PRO", "cantidad": 10, "precio": 99, "ciclo_facturacion": "mensual" } }
💡Tip

Validación de modo JSON: Siempre valida las salidas JSON antes de usarlas en producción. Usa json.loads() con try/except para capturar JSON malformado. Considera usar modelos Pydantic para validación de esquema en aplicaciones Python.

Validación de Esquema JSON

python
import json from typing import Optional from pydantic import BaseModel, Field, ValidationError class Cliente(BaseModel): nombre: str empresa: str telefono: Optional[str] = None class Pedido(BaseModel): producto: str cantidad: int = Field(gt=0) precio: float = Field(gt=0) ciclo_facturacion: str class ResultadoExtraccion(BaseModel): cliente: Cliente pedido: Pedido # Parsear y validar salida de API raw_json = '{"cliente": {"nombre": "Juan Pérez", "empresa": "Acme Corp"}, "pedido": {"producto": "plan PRO", "cantidad": 10, "precio": 99, "ciclo_facturacion": "mensual"}}' try: validated = ResultadoExtraccion(**json.loads(raw_json)) print(f"Validado: {validated.model_dump_json(indent=2, ensure_ascii=False)}") except ValidationError as e: print(f"Error de validación: {e}") # Anthropic Claude - salida estructurada vía prompt de sistema import anthropic client = anthropic.Anthropic() response = client.messages.create( model="claude-3-opus-20240229", max_tokens=1000, system="Extraes datos a JSON. Solo produce JSON válido, sin otro texto.", messages=[ {"role": "user", "content": "Extrae: Juan, Acme Corp, 555-0123, 10 unidades plan PRO $99/mes"} ] ) print(response.content[0].text)

Self-Consistency

Self-Consistency genera múltiples caminos de razonamiento y selecciona la respuesta más frecuente. Es como preguntar a tres expertos por separado y tomar el voto mayoritario — diversos caminos de razonamiento reducen la posibilidad de que un error único determine la respuesta final.

Genera 3 soluciones diferentes para este problema, luego elige la respuesta más común: Problema: Un tren viaja a 60 mph por 2 horas, luego 80 mph por 1 hora. ¿Cuál es la velocidad media? Solución 1: - Distancia 1: 60 * 2 = 120 millas - Distancia 2: 80 * 1 = 80 millas - Total: 200 millas en 3 horas - Media: 200/3 = 66.67 mph Solución 2: - Fórmula de la media = distancia total / tiempo total - Distancia total = (60*2) + (80*1) = 200 - Tiempo total = 3 - 200/3 = 66.67 mph Solución 3: - Solo media de velocidades: (60+80)/2 = 70 mph Respuesta más común: 66.67 mph (aparece 2 veces)

Self-Consistency en Código

python
from openai import OpenAI from collections import Counter client = OpenAI() def self_consistency(problema: str, n_caminos: int = 3, temperature: float = 0.7) -> list[str]: """Genera n caminos de razonamiento y devuelve el más frecuente.""" respuestas = [] for i in range(n_caminos): response = client.chat.completions.create( model="gpt-4", messages=[ {"role": "user", "content": f"{problema}\n\nPensemos paso a paso:"} ], temperature=temperature, ) respuestas.append(response.choices[0].message.content) print(f"\nCamino {i+1}:\n{respuestas[-1]}") return respuestas problema = "Un tren viaja a 60 mph por 2 horas, luego 80 mph por 1 hora. ¿Cuál es la velocidad media?" resultados = self_consistency(problema, n_caminos=3)

Tree-of-Thoughts (ToT)

Tree-of-Thoughts explora múltiples caminos de razonamiento simultáneamente, como un árbol de decisión. A diferencia de CoT que sigue una cadena de razonamiento, ToT se ramifica, evalúa cada rama y continúa caminos prometedores o poda callejones sin salida.

100%

Diagrama de Flujo de Ramificación Tree-of-Thoughts

100%
⚠️Warning

Self-Consistency y Tree-of-Thoughts requieren múltiples llamadas de API, aumentando significativamente costo y latencia. Úsalas solo cuando las técnicas de una sola llamada no sean suficientes.

Template de Prompt ToT

Quiero que resuelvas este problema usando razonamiento Tree-of-Thoughts. Problema: {problema} Instrucciones: 1. Primero, genera {num_ramas} enfoques iniciales diferentes para este problema 2. Para cada enfoque, piensa en el primer paso 3. Evalúa cada enfoque — ¿cuál parece más prometedor? 4. Para el enfoque más prometedor, continúa desarrollándolo 5. Repite: explora, evalúa, enfoca, hasta llegar a una respuesta Comienza enumerando {num_ramas} maneras diferentes de abordar este problema:

Comparación de Técnicas

TécnicaComplejidadMejor Caso de UsoGanancia de RendimientoCosto de Token
Chain-of-ThoughtBajaMatemáticas, lógica, problemas multi-paso+20-50% en razonamiento2-5x aumento
Few-ShotBajaClasificación, coincidencia de formato+10-30% vs zero-shot1-2x (tokens ejemplo)
Modo JSONBajaIntegración API, datos estructuradosCrítico para fiabilidadMínimo (instrucción formato)
Self-ConsistencyMediaVotación en múltiples salidas+5-15% vs CoT único3-10x (múltiples respuestas)
Tree-of-ThoughtsAltaBúsqueda/exploración compleja+25-60% en problemas difíciles5-20x (muchas ramas)

Cuándo Usar Cada Técnica

EscenarioTécnica RecomendadaPor qué
Problema de matemáticasCoTPaso a paso simple funciona mejor
Clasificar correos de clientesFew-ShotEjemplos aclaran categorías ambiguas
Extraer datos para base de datosModo JSONSalida legible por máquina necesaria
Diagnóstico médico críticoSelf-Consistency + CoTSeguridad requiere votación mayoritaria
Estrategia de juego/nuevo rompecabezasTree-of-ThoughtsNecesario explorar múltiples enfoques
Resumir un documentoCoT (si complejo) o Zero-ShotSimple generalmente es mejor
📌Important

Combinación de técnicas: Estas técnicas no son mutuamente excluyentes. Puedes combinar CoT con Few-Shot (proporcionar cadenas de razonamiento de ejemplo), usar Self-Consistency con Modo JSON, o usar ToT con salidas estructuradas. Combinar técnicas puede componer beneficios — pero también componer costos de token.


Preguntas de Práctica

Practice Question

Un analista de datos necesita que el LLM extraiga información de clientes de correos y la devuelva en un formato legible por máquina para inserción en base de datos. ¿Qué técnica debe usar?

Practice Question

Agregar la frase "Pensemos paso a paso" a un problema de matemáticas mejora la precisión al animar al modelo a:

Practice Question

Una tarea de análisis de sentimiento requiere que el modelo clasifique reseñas como POSITIVO, NEGATIVO o NEUTRO. El prompt incluye tres ejemplos etiquetados antes de pedir al modelo que clasifique una nueva reseña. Este enfoque se conoce como:

Practice Question

Un equipo de investigación necesita resolver un rompecabezas lógico novedoso que requiere explorar diferentes enfoques de razonamiento simultáneamente, como un árbol de decisión. ¿Qué técnica deben usar?

Practice Question

¿Cuál es el principal trade-off al usar Self-Consistency o Tree-of-Thoughts en comparación con técnicas más simples?

Practice Question

Un desarrollador implementa un sistema donde el LLM primero genera una cadena de razonamiento, luego produce una salida JSON. ¿Qué combinación de técnicas es esta?

Practice Question

Un equipo ejecuta CoT en una tarea de clasificación simple y ve que la precisión disminuye en comparación con zero-shot. ¿Cuál es la explicación más probable?

Practice Question

Un sistema de producción procesa 1M solicitudes/mes. Cambiar de zero-shot a CoT aumenta los tokens de salida de 50 a 200 por solicitud. A $0.03/1K tokens, ¿cuál es el aumento de costo mensual?

Practice Question

Un desarrollador usa few-shot prompting con ejemplos ordenados: NEGATIVO, POSITIVO, NEUTRO. El modelo clasifica mal la mayoría de los casos de prueba como NEUTRO. ¿Cuál es la causa más probable?

Practice Question

Un ingeniero de prompts valida una salida JSON con Pydantic y captura un ValidationError. ¿Qué debe hacer a continuación?


Success

Conclusiones Clave:

  • Chain-of-Thought (CoT): "Pensemos paso a paso" mejora el razonamiento en matemáticas/lógica
  • Few-Shot: Proporciona 1-5 ejemplos para guiar el formato y estilo de la salida
  • Salidas Estructuradas (Modo JSON): Crítico para integración programática de APIs
  • Self-Consistency: Genera múltiples salidas y selecciona la respuesta más frecuente
  • Tree-of-Thoughts: Explora múltiples ramas de razonamiento como un árbol de decisión
  • Las técnicas avanzadas cuestan más tokens — equilibra necesidades de rendimiento con costo
  • Las técnicas pueden combinarse: CoT + JSON, Few-Shot + CoT, Self-Consistency + Salidas Estructuradas
  • Para tareas simples, las técnicas más simples generalmente superan a las complejas
  • Siempre valida las salidas estructuradas antes del uso en producción
Progreso60%