Módulo 4: Chain-of-Thought y Razonamiento

1. Introducción: Por Qué los LLMs Necesitan Pensar Paso a Paso

Descripción

Chain-of-Thought (CoT) es una técnica que mejora dramáticamente el razonamiento de los LLMs al pedirles que expliquen su proceso paso a paso. En esta cápsula entenderás el paper original (Wei et al., 2022), la paradoja de modelos con 100B+ parámetros que fallan en aritmética simple sin CoT, y cómo CoT desbloquea capacidades latentes que el modelo ya tiene pero no expresa.

Por qué importa: Sin CoT, un modelo puede dar la respuesta incorrecta a un problema de lógica o matemáticas sin que sepas por qué. Con CoT, el razonamiento es visible, verificable y corrige muchos errores al obligar al modelo a generar tokens intermedios que actúan como "espacio de trabajo mental".

Tiempo estimado: 45-60 minutos


La Paradoja del Modelo Gigante que Falla en Aritmética

Imagina esto: GPT-4, un modelo entrenado en billones de tokens de texto humano, capaz de escribir código, explicar física cuántica y debatir filosofía... falla en calcular 17 × 23.

¿Cómo es posible?

Modelos como GPT-4 pueden fallar en:

  • 15 + 27 = ? (a veces responden 42, a veces 43)
  • "Si A implica B, y B es falso, ¿qué pasa con A?"
  • Problemas de múltiples pasos encadenados
  • Problemas de edades, velocidades, porcentajes

Pero cuando se les pide "Piensa paso a paso", la accuracy mejora 15-30% en tareas de razonamiento.

Esta es la paradoja: el modelo sabe cómo resolver el problema, pero el formato de predicción token-a-token hace que "tome atajos". CoT obliga al modelo a mostrar el trabajo, como un estudiante que no puede simplemente escribir la respuesta final en un examen.


¿Por Qué Ocurre Esto? El Mecanismo Subyacente

Los LLMs generan tokens uno por uno, y cada token depende de los anteriores. Cuando respondes directamente:

Pregunta: ¿Cuánto es 17 × 23?
Respuesta: [token para número] → 391

El modelo intenta "adivinar" el número correcto basándose en patrones estadísticos de su entrenamiento.

Pero con CoT:

Pregunta: ¿Cuánto es 17 × 23? Piensa paso a paso.
Respuesta:
- Descompongo: 17 × 23 = 17 × 20 + 17 × 3
- 17 × 20 = 340
- 17 × 3 = 51
- 340 + 51 = 391
- Por lo tanto: 391

Aquí, cada paso genera tokens que sirven como contexto enriquecido para los tokens siguientes. Los tokens intermedios ("340", "51") ya están en el contexto cuando el modelo calcula la suma final, reduciendo errores.

Analogía humana: Es como la diferencia entre hacer matemáticas mentalmente vs. escribirlas en papel. El papel (los tokens intermedios) actúa como memoria externa.


Paper Original: Chain-of-Thought Prompting (2022)

Referencia: Wei, J., Wang, X., Schuurmans, D., Bosma, M., Ichter, B., Xia, F., ... & Zhou, D. (2022). Chain-of-Thought Prompting Elicits Reasoning in Large Language Models. NeurIPS 2022.

Wei et al. demostraron en este paper fundacional que añadir ejemplos con razonamiento explícito mejora significativamente las capacidades de los modelos en:

  • Aritmética: GSM8K, MATH benchmark
  • Razonamiento lógico: SVAMP, MultiArith
  • Sentido común: CommonsenseQA, StrategyQA
  • Symbolic reasoning: Coin flip, last letter concatenation

Hallazgos Clave del Paper

HallazgoDescripción
Emergencia con escalaCoT solo funciona bien con modelos ≥100B parámetros
Few-shot requeridoEl paper original usaba ejemplos con razonamiento
Mejora consistente+15-30% en math, +5-15% en logic
GeneralizaciónFunciona sin cambiar los pesos del modelo

Ejemplo del Paper

El paper mostraba ejemplos como este:

Q: Roger has 5 tennis balls. He buys 2 more cans of tennis balls.
   Each can has 3 tennis balls. How many tennis balls does he have now?

A: Roger started with 5 balls. 2 cans of 3 tennis balls each is 6 tennis balls.
   5 + 6 = 11. The answer is 11.

Comparado con el enfoque estándar que solo diría "11", este formato obliga al modelo a mostrar cada paso.


Zero-Shot CoT: El Descubrimiento de Kojima (2022)

Un año después, Kojima et al. (2022) hicieron un descubrimiento sorprendente: no necesitas ejemplos. Simplemente añadir la frase mágica es suficiente:

"Let's think step by step."

Esto se llama Zero-Shot CoT y funciona porque:

  1. El modelo ha visto miles de textos donde el razonamiento explícito precede a respuestas correctas
  2. La frase activa ese patrón de generación
  3. No requiere diseñar ejemplos específicos por dominio

Mejoras reportadas (Zero-Shot CoT vs. Zero-Shot estándar):

  • MultiArith: 17.7% → 78.7%
  • GSM8K: 10.4% → 40.7%
  • SVAMP: 67.7% → 74.2%

CoT vs. Prompting Estándar: Comparativa

AspectoSin CoTCon CoT
Accuracy en math~20-40%~50-80%
Accuracy en logic~55%~70-85%
Tokens consumidosPocos3-5x más
Costo APIBajoModerado-alto
VerificabilidadNingunaAlta
Detección de erroresImposiblePosible
Mejor paraTareas simplesRazonamiento complejo

Los 4 Tipos de CoT

En este módulo exploraremos cuatro variantes principales:

1. Zero-Shot CoT

La más simple. Solo añades "Let's think step by step" o "Piensa paso a paso".

prompt = f"{pregunta}\n\nPiensa paso a paso."

2. Manual CoT (Few-Shot CoT)

Proporcionas ejemplos con razonamiento explícito formato Input → Reasoning → Answer.

prompt = f"""
Ejemplo:
Input: {ejemplo_1}
Reasoning: {razonamiento_1}
Answer: {respuesta_1}

Input: {nueva_pregunta}
Reasoning:
"""

3. Self-Consistency CoT

Generas múltiples cadenas de razonamiento y eliges la respuesta más común (mayoría de votos).

4. Automatic CoT

El modelo genera automáticamente los ejemplos de razonamiento usando clustering.


¿Cuándo Usar CoT?

✅ Usar CoT cuando:

  • El problema requiere múltiples pasos (aritmética, álgebra, geometría)
  • Hay razonamiento lógico (implicaciones, deducciones)
  • Necesitas verificar el proceso, no solo la respuesta
  • El problema es ambiguo y quieres ver cómo el modelo lo interpreta
  • Analizas código o debugging

❌ NO usar CoT cuando:

  • La tarea es creativa (poesía, brainstorming, metáforas)
  • Es clasificación simple con criterios claros
  • La respuesta es factual directa ("¿Capital de España?")
  • El costo importa y la tarea es sencilla
  • La latencia es crítica y hay miles de llamadas

Implementación Mínima con OpenAI

Aquí tienes el código más básico para experimentar con CoT:

from openai import OpenAI

client = OpenAI()  # Asegúrate de tener OPENAI_API_KEY en el entorno

def comparar_con_sin_cot(pregunta: str) -> dict:
    """
    Compara la respuesta de un modelo con y sin CoT.
    
    Args:
        pregunta: El problema a resolver
    
    Returns:
        dict con respuestas 'sin_cot' y 'con_cot'
    """
    # Sin CoT
    respuesta_directa = client.chat.completions.create(
        model="gpt-4o-mini",
        messages=[{"role": "user", "content": pregunta}],
        temperature=0,
        max_tokens=100
    )
    
    # Con CoT
    respuesta_cot = client.chat.completions.create(
        model="gpt-4o-mini",
        messages=[{"role": "user", "content": f"{pregunta}\n\nPiensa paso a paso."}],
        temperature=0,
        max_tokens=500
    )
    
    return {
        "sin_cot": respuesta_directa.choices[0].message.content,
        "con_cot": respuesta_cot.choices[0].message.content
    }


# Ejemplo de uso
if __name__ == "__main__":
    problemas = [
        "Si tengo 17 manzanas y doy el 30% a María, ¿cuántas me quedan?",
        "Un tren sale de A a 60 km/h. Otro sale de B (300 km) a 90 km/h en dirección contraria. ¿Cuándo se encuentran?",
        "Si todos los gatos son mamíferos, y algunos mamíferos vuelan, ¿pueden volar algunos gatos?"
    ]
    
    for problema in problemas:
        print(f"\nProblema: {problema}")
        resultado = comparar_con_sin_cot(problema)
        print(f"\nSin CoT:\n{resultado['sin_cot']}")
        print(f"\nCon CoT:\n{resultado['con_cot']}")
        print("-" * 60)

La Emergencia con Escala: Un Fenómeno Importante

Wei et al. descubrieron algo fascinante: CoT solo emerge como útil en modelos grandes.

En modelos pequeños (< 8B parámetros), añadir CoT a veces empeora los resultados, porque el modelo no tiene capacidad de generar razonamientos coherentes.

Tamaño del modeloEfecto de CoT
< 1B parámetrosNeutral o negativo
1B - 8BLigero positivo en tareas simples
8B - 70BPositivo consistente
> 70BGrandes mejoras (+20-40%)

Implicación práctica: Si usas GPT-4o-mini, CoT funciona bien. Si usas modelos más pequeños locales, verifica que el modelo sea suficientemente capaz antes de depender de CoT.


Roadmap del Módulo 4

Este módulo te llevará de lo básico a lo avanzado en CoT prompting:

#CápsulaQué verásDificultad
01Introducción (esta)CoT, paradoja, paper fundacionalBásico
02Zero-Shot CoT"Let's think step by step", variantes, benchmarksBásico
03Manual CoTDiseñar cadenas de razonamiento con ejemplosIntermedio
04CoT para tareas específicasMath, logic, code, verificationIntermedio
05Verification patternsSelf-check, backward verification, confidenceAvanzado
06Multi-step reasoning pipelinesEtapas explícitas, orquestaciónAvanzado
07Limitaciones y anti-patternsCuándo CoT no ayuda, razonamiento fabricadoIntermedio
08Proyecto: Reasoning EngineCoT verificable con confidence y comparativaAvanzado

Al final del módulo sabrás:

  • Cuándo y cómo aplicar CoT
  • Diseñar prompts con razonamiento explícito por dominio
  • Verificar y validar el razonamiento del modelo
  • Construir pipelines multi-etapa robustos
  • Detectar y evitar anti-patterns comunes

Ejercicios de esta Cápsula

Ejercicio 1: Tu primer experimento CoT

Elige 3 problemas de aritmética de distinta dificultad. Ejecuta cada uno con y sin "Piensa paso a paso". Registra si CoT mejora o no el resultado.

Ver solución
from openai import OpenAI

client = OpenAI()

problemas_con_respuesta = [
    ("¿Cuánto es 15 + 27?", "42"),
    ("¿Cuánto es 17 × 23?", "391"),
    ("Si tengo $150 y gasto el 40%, ¿cuánto me queda?", "90"),
]

def resolver(pregunta: str, cot: bool) -> str:
    contenido = pregunta
    if cot:
        contenido += "\n\nPiensa paso a paso."
    
    respuesta = client.chat.completions.create(
        model="gpt-4o-mini",
        messages=[{"role": "user", "content": contenido}],
        temperature=0,
        max_tokens=300
    )
    return respuesta.choices[0].message.content

aciertos_sin_cot = 0
aciertos_con_cot = 0

for pregunta, correcta in problemas_con_respuesta:
    r_sin = resolver(pregunta, cot=False)
    r_con = resolver(pregunta, cot=True)
    
    if correcta in r_sin:
        aciertos_sin_cot += 1
    if correcta in r_con:
        aciertos_con_cot += 1
    
    print(f"\n=== {pregunta} ===")
    print(f"Sin CoT: {r_sin[:80]}...")
    print(f"Con CoT: {r_con[:80]}...")

print(f"\nAccuracy sin CoT: {aciertos_sin_cot}/{len(problemas_con_respuesta)}")
print(f"Accuracy con CoT: {aciertos_con_cot}/{len(problemas_con_respuesta)}")

Ejercicio 2: Identificar el mecanismo

Dado este output de CoT, identifica los "tokens intermedios" que actúan como memoria de trabajo y explica cómo cada uno ayuda al siguiente paso.

Problema: Si hay 5 equipos en un torneo y cada equipo juega contra todos los demás una vez, ¿cuántos partidos hay en total?

Respuesta con CoT:
- Equipo 1 juega contra 4 equipos: 4 partidos
- Equipo 2 juega contra 3 restantes (ya jugó contra equipo 1): 3 partidos  
- Equipo 3 juega contra 2 restantes: 2 partidos
- Equipo 4 juega contra 1 restante: 1 partido
- Total: 4 + 3 + 2 + 1 = 10 partidos
Ver solución

Los tokens intermedios que actúan como memoria de trabajo son:

  • "4 partidos" → El modelo "recuerda" este número al calcular el siguiente
  • "3 restantes" → La palabra "restantes" reduce el espacio de búsqueda para el modelo
  • "2 restantes", "1 restante" → Patrón que el modelo sigue consistentemente
  • "4 + 3 + 2 + 1" → Ya no tiene que recordar los sumandos originales, están en contexto

Sin CoT, el modelo intentaría calcular C(5,2) = 10 directamente, lo cual requiere conocer la fórmula combinatoria. Con CoT, usa razonamiento inductivo más intuitivo.

Ejercicio 3: Diseña un caso de uso de CoT en tu dominio

Piensa en un problema de tu trabajo o área de interés donde CoT podría ayudar. Describe:

  • El tipo de problema
  • Por qué requiere múltiples pasos
  • Qué esperas ganar con CoT
Ver solución (ejemplo)

Dominio: E-commerce / Análisis de pricing

Problema: "¿Debo bajar el precio de un producto si la competencia lo bajó?"

Por qué requiere múltiples pasos:

  1. Analizar margen actual
  2. Estimar elasticidad de precio en ese segmento
  3. Considerar costos fijos/variables
  4. Evaluar posicionamiento de marca
  5. Proyectar volumen con/sin bajada de precio
  6. Calcular revenue esperado en cada escenario

Beneficio de CoT: El modelo no puede saltarse pasos. El razonamiento es auditable por el equipo de negocio. Si el modelo hace una suposición incorrecta (ej: "elasticidad alta"), se puede detectar y corregir.

Ejercicio 4: Límites de CoT

Prueba CoT en estas 3 tareas y observa qué pasa. ¿Cuáles mejoran? ¿Cuáles no?

  1. "Escribe un haiku sobre el otoño"
  2. "¿Es válido el argumento: Todos los perros son animales. Rex es un animal. Por lo tanto Rex es un perro?"
  3. "¿Cuál es la capital de Japón?"
Ver solución
  1. Haiku: CoT no ayuda (puede empeorar). La tarea es creativa y el razonamiento paso a paso puede generar un haiku mecánico y sin gracia. Ejemplo negativo: "Paso 1: Contar sílabas. Paso 2: Elegir tema otoñal..." → Resultado rígido.

  2. Argumento lógico: CoT ayuda. La respuesta directa a veces da "Válido" incorrectamente. Con CoT: "Premisa: ∀x: perro(x)→animal(x). Rex es animal. Para concluir perro(Rex) necesito ∀x: animal(x)→perro(x), que es falsa. Falacias de afirmación del consecuente. INVÁLIDO." ✓

  3. Pregunta factual: CoT es neutral o negativo. La respuesta directa es "Tokio". Con CoT, el modelo puede añadir información redundante: "Japón es un país en Asia. Su gobierno tiene sede en... Por lo tanto Tokio." Mismo resultado, más tokens y costo.


Conceptos Clave de esta Cápsula

TérminoDefinición
Chain-of-Thought (CoT)Técnica de prompting que pide razonamiento explícito paso a paso
Zero-Shot CoTCoT sin ejemplos, solo con instrucción "piensa paso a paso"
Few-Shot CoTCoT con ejemplos de razonamiento (Manual CoT)
Tokens intermediosLos pasos del razonamiento que actúan como memoria de trabajo
EmergenciaFenómeno por el que CoT solo funciona bien en modelos grandes
Fabricated reasoningRazonamiento que suena lógico pero es incorrecto

Resumen

  • CoT obliga al modelo a generar tokens intermedios que actúan como espacio de trabajo mental
  • La paradoja existe porque los modelos toman atajos sin CoT, aunque tengan el conocimiento
  • El mecanismo es simple: más contexto relevante en el input del siguiente token = mejor predicción
  • Mejora típica: +15-30% en math/logic con CoT
  • Límites: Solo funciona en modelos suficientemente grandes; no aplica en tareas creativas o simples

Recursos adicionales

  1. Chain-of-Thought Prompting Elicits Reasoning in LLMs (Wei et al., 2022)
  2. Large Language Models are Zero-Shot Reasoners (Kojima et al., 2022)
  3. OpenAI: Prompt Engineering Guide
  4. Learn Prompting: Chain of Thought
  5. Anthropic: Chain-of-Thought Prompting
  6. GSM8K Dataset (Grade School Math)