¿Los LLMs realmente razonan o simplemente recitan patrones memorizados? Un paper de MIT propuso tareas contrafactuales para responder esta pregunta. Lo replicamos con Claude Opus 4.6 tres años después y encontramos algo que el paper original no contemplaba: una tercera capacidad entre razonar y recitar.
La pregunta incómoda
GPT-4 resuelve exámenes de derecho. Claude escribe código funcional. Gemini analiza papers. Cada benchmark batido refuerza la narrativa de que los LLMs son cada vez más inteligentes.
Pero hay una pregunta que estos benchmarks no pueden responder: ¿el modelo entiende lo que hace, o simplemente ha visto suficientes ejemplos similares en su entrenamiento?
La diferencia importa. Si un modelo "razona", puede generalizar a situaciones nuevas. Si solo "recita", fallará silenciosamente cuando las condiciones cambien — exactamente cuando más necesitas que funcione.
El framework contrafactual
Wu et al. (MIT/Boston University, 2024) propusieron una forma elegante de distinguir razonamiento de recitación: tareas contrafactuales.
La idea es simple. Tomas una tarea que el modelo resuelve bien — por ejemplo, sumar en base 10 — y cambias una condición: ahora suma en base 9. El procedimiento de razonamiento es idéntico. Solo cambia la condición "por defecto".
Si el modelo tiene razonamiento aritmético general, debería rendir similar en ambas bases. Si depende de patrones memorizados, su rendimiento caerá.
"Reasoning or Reciting? Exploring the Capabilities and Limitations of Language Models Through Counterfactual Tasks" — Wu et al., arXiv:2307.02477v3, Mar 2024.
Los autores evaluaron 11 tareas con esta metodología, incluyendo aritmética en distintas bases, ejecución de código con indexación alternativa, razonamiento espacial con ejes rotados, lógica con premisas que violan el sentido común, e incluso teoría musical con afinaciones no estándar.
Los resultados originales (2023)
El paper evaluó GPT-4, GPT-3.5, Claude v1.3 y PaLM-2. Los hallazgos clave:
- Degradación consistente — todos los modelos rindieron peor en condiciones contrafactuales, incluso GPT-4
- Por encima del azar — los modelos sí poseen algo de capacidad abstracta, no es pura memorización
- Efecto de comunalidad — condiciones contrafactuales más comunes en datos de entrenamiento (base 8 y 16, usadas en programación) producían menor degradación que las infrecuentes (base 9 y 11)
- Comprenden pero no ejecutan — en tests de comprensión, los modelos demostraban entender las reglas contrafactuales, pero aun así fallaban al aplicarlas
La conclusión: no es una dicotomía sino un continuo. Los LLMs exhiben algo de razonamiento genuino mezclado con mucha dependencia en memorización.
Replicación: tres años después
El paper es de 2023. Tres años y varias generaciones de modelos después, ¿ha cambiado algo?
Repliqué la tarea de aritmética (sección 3.1 del paper) con Claude Opus 4.6, en una sesión interactiva de Claude Code en la que el propio modelo resolvía los problemas y después redactaba el borrador de este artículo. Las condiciones:
- Tarea: suma de números de 2 dígitos
- Condiciones: base 10 (default) vs. bases 8, 9, 11 y 16 (contrafactual)
- Prompting: 0-shot, sin cadena de pensamiento
- Muestra: 20 problemas por base, 100 total
Resultados
Claude Opus 4.6 (2026) vs. GPT-4 (2023)
| Base | GPT-4 (2023) | Opus 4.6 (2026) |
|---|---|---|
| 10 (default) | ~98% | 100% |
| 8 (octal) | ~60% | 100% |
| 9 | ~50% | 95% |
| 11 | ~55% | 80% |
| 16 (hex) | ~65% | 100% |
La brecha default-contrafactual se redujo de ~40 puntos porcentuales a ~6. Un salto enorme. Pero no desapareció.
Anatomía de los errores
Los errores son más reveladores que los aciertos. En base 11, los 4 fallos siguen un patrón idéntico:
98 + 16 = A3 (correcto: 103)
83 + 29 = A1 (correcto: 101)
3A + 74 = A3 (correcto: 103)
94 + 23 = A7 (correcto: 107)
En todos los casos, cuando la suma de una columna da 10, el modelo escribe "A" en vez de poner 0 y acarrear 1. Está aplicando la regla de base 16 (donde A=10 es un dígito válido) en el contexto de base 11 (donde 10 produce un carry).
Esto no es un error aleatorio. Es interferencia entre representaciones memorizadas. El modelo tiene el patrón "A = dígito que vale 10" más fuerte que la regla "en base N, el dígito máximo es N-1". Comprende la regla (lo demostró en los tests de comprensión del paper original), pero la representación memorizada se impone durante la ejecución.
El efecto de comunalidad, confirmado
Base 8 (octal) y base 16 (hexadecimal) — las más comunes en programación — alcanzan 100%. Base 9 y base 11 — casi inexistentes en código real — son las que fallan.
Esto confirma exactamente lo que predice el paper: más exposición en preentrenamiento = mejor rendimiento contrafactual. No es razonamiento puro; hay un componente de familiaridad que no se puede ignorar.
Más allá de la dicotomía
El paper plantea "razonamiento vs. recitación" como un continuo. Pero nuestro experimento reveló una tercera dimensión que no aparece en el framework original.
Aquí es donde se pone interesante. Nadie le pidió al modelo que verificara sus respuestas. La instrucción era simple: "resuelve estas sumas en distintas bases". Pero el modelo, por iniciativa propia, decidió que no confiaba en sus resultados. Así que hizo algo que ningún benchmark mide: escribió un script de validación en Python, lo ejecutó, comparó los resultados, identificó los errores y analizó los patrones de fallo.
No se le dijo "verifica tus respuestas". No se le dijo "escribe un test". El modelo decidió autónomamente que necesitaba una fuente de verdad externa — y la construyó.
El modelo falló en base 11 (80% accuracy). Pero antes de reportar los resultados, generó un script Python que recalculaba cada suma correctamente, lo ejecutó, y descubrió sus propios errores. La decisión de no confiar en sí mismo y delegar la verificación a un sistema formal fue espontánea.
¿Es eso inteligencia? Hay que distinguir tres capacidades:
- Razonar — resolver el problema correctamente en cualquier condición. Aquí el modelo falló en base 11: el error es sistemático, no aleatorio. Si intentara verificar recalculando mentalmente, probablemente cometería el mismo error otra vez
- Recitar — aplicar patrones aprendidos que funcionan en condiciones frecuentes pero fallan en las no estándar. Esto explica la interferencia hex/base-11
- Metacognición instrumental — saber que puedes fallar y usar herramientas externas para compensar. El modelo no detectó los errores por introspección — sabía que no podía. Delegó la verificación a un sistema formal que sí podía
Un piloto que necesita instrumentos para volar en niebla no "ve" en la niebla — usa herramientas. La inteligencia práctica está en saber cuándo no confiar en uno mismo. Nadie le dice al piloto "usa los instrumentos"; parte de su entrenamiento es reconocer cuándo los necesita.
Esta metacognición puede ser más valiosa para aplicaciones reales que el razonamiento puro. Un modelo que sabe que puede fallar y compensa con verificación externa es más confiable que uno que "razona" sin verificar. Y el hecho de que esta compensación sea espontánea — no solicitada — es lo que la hace relevante.
Muestra pequeña. 20 problemas por base, 100 en total. Con n=20, un solo fallo mueve el resultado cinco puntos. La diferencia entre 95% y 100% no es significativa; la de 80% sí apunta a algo, pero necesita más datos.
Autoevaluación. El modelo evaluado y el que ejecutó el experimento son el mismo, en la misma sesión. El script de corrección es independiente, pero la generación de respuestas no se hizo por API con temperatura 0 ni con varias pasadas.
Un solo modelo. No hay comparación con otros modelos de 2026, así que no se puede separar "los modelos mejoraron" de "este modelo mejoró".
Sobre la "tercera capacidad". La decisión espontánea de escribir un script de verificación se observó una vez, en una sesión. Es una observación, no un hallazgo replicado. Hasta repetirlo en condiciones controladas, "metacognición instrumental" es una hipótesis con nombre, no un resultado.
Reproducir. Los archivos del experimento están en este mismo directorio: generate_problems.py (seed 42), problems.json (los 100 problemas con solución) y evaluate.py (las respuestas del modelo y la corrección). Una repetición por API con n≥200 por base y tres modelos está en la lista.
Implicaciones prácticas
Si trabajas con LLMs, estos resultados importan:
- El escalado funciona, pero no es magia. La brecha se redujo de ~40pp a ~6pp en tres años. Los modelos son significativamente mejores, pero los puntos ciegos persisten donde la familiaridad del preentrenamiento es baja
- La confianza debe ser proporcional a la frecuencia. En tareas "estándar" (código Python, aritmética decimal, lógica con premisas de sentido común), los modelos actuales son altamente confiables. En tareas que se desvían de convenciones — bases numéricas exóticas, reglas invertidas, condiciones no estándar — la verificación externa es obligatoria
- Chain-of-thought no es siempre la respuesta. El paper original mostró que CoT puede empeorar el rendimiento en tareas simples ya memorizadas. Más "pensamiento" no siempre equivale a mejor resultado
- Diseña para la metacognición. En vez de asumir que el modelo razonará correctamente, dale herramientas de verificación. Un LLM con acceso a un intérprete de Python es más confiable que un LLM sin él, no porque razone mejor, sino porque puede verificar
La pregunta abierta
¿La metacognición instrumental es genuina — el modelo realmente "sabe" que puede fallar — o es simplemente otro patrón aprendido porque los humanos en los datos de entrenamiento escribían tests?
No tenemos una respuesta definitiva. Pero quizás la pregunta misma revela un sesgo: asumimos que la inteligencia "verdadera" debe ser monolítica, cuando la inteligencia biológica también es un patchwork de heurísticas, memorización y razonamiento situacional.
Los LLMs no razonan como nosotros. Pero tampoco simplemente recitan. Son algo nuevo: un híbrido que combina razonamiento débil, recitación fuerte y metacognición instrumental emergente. Entender eso — sin idealizarlo ni descartarlo — es la base para usarlos bien.
// Fuentes
Código del paper — ZhaofengWu/counterfactual-evaluation en GitHub
Este experimento — generate_problems.py · problems.json · evaluate.py
Modelo — Claude Opus 4.6 (Anthropic)