La forma más rápida de obtener una respuesta más inteligente de un LLM no siempre es una pregunta más inteligente. A veces, solo hay que pedirle que vaya más despacio.
En enero de 2022, Jason Wei y un grupo de investigadores de Google Brain publicaron un paper con un hallazgo que parecía casi trivial. Si incluyes ejemplos de razonamiento paso a paso en tu prompt, los modelos de lenguaje de gran escala (LLM) mejoran drásticamente en problemas de varios pasos. Problemas matemáticos, acertijos de lógica, razonamiento de sentido común. Tareas en las que los modelos fallaban pasaron a tener una precisión casi humana. Lo llamaron chain-of-thought prompting, y cambió la forma en que muchos de nosotros escribimos prompts.
El insight original
El paper, "Chain-of-Thought Prompting Elicits Reasoning in Large Language Models", mostró que los prompts de few-shot que contienen trazas de razonamiento —no solo las respuestas finales— desbloquean capacidades latentes en modelos grandes.
El mecanismo es fácil de pasar por alto, así que seamos precisos. En el few-shot prompting, tu prompt contiene un ejemplo resuelto —una pregunta y su respuesta— seguido de la pregunta que realmente quieres resolver. Lo que el chain-of-thought cambia no es la pregunta que haces. Cambia la forma en que se escribe la respuesta del ejemplo. Esta es la Figura 1 del paper, con la respuesta del modelo marcada:
Standard prompting — el ejemplo muestra solo la respuesta final:
Q: Roger has 5 tennis balls. He buys 2 more cans of tennis balls.
Each can has 3 tennis balls. How many does he have now?
A: The answer is 11.
Q: The cafeteria had 23 apples. If they used 20 to make lunch and
bought 6 more, how many apples do they have?
A: The answer is 27. <- respuesta del modelo: INCORRECTO
Chain-of-thought prompting — mismas preguntas, pero el ejemplo ahora muestra su razonamiento:
Q: Roger has 5 tennis balls. He buys 2 more cans of tennis balls.
Each can has 3 tennis balls. How many 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.
Q: The cafeteria had 23 apples. If they used 20 to make lunch and
bought 6 more, how many apples do they have?
A: The cafeteria had 23 apples originally. They used 20 to make
lunch, so they had 23 - 20 = 3. They bought 6 more apples, so
they have 3 + 6 = 9. The answer is 9. <- respuesta del modelo: CORRECTO
El modelo imita el formato que se le mostró. Dale un ejemplo que salta directamente a un número y saltará directamente a un número —y fallará en la aritmética de dos pasos. Dale un ejemplo que trabaje los pasos y trabajará los pasos también en el nuevo problema. Unas pocas palabras extra en el ejemplo (exemplar). En el benchmark matemático GSM8K, ese cambio llevó a PaLM 540B de un 18% a un 57% de precisión. No es una mejora marginal. Es la diferencia entre lo inútil y lo útil.
Una advertencia importante del paper: el truco solo funciona a escala. Los modelos por debajo de aproximadamente 100 mil millones (billion) de parámetros casi no mostraron beneficios. La capacidad de razonamiento parece una propiedad emergente de la escala. El conocimiento está ahí en los modelos más pequeños, pero no puedes extraerlo solo mediante el prompting.
Zero-shot CoT: la frase mágica
Más tarde en 2022, Kojima et al. encontraron algo aún más extraño. No necesitas ejemplos cuidadosamente elaborados. Solo añade "Let's think step by step" al prompt y el modelo comienza a razonar.
Q: A store has 4 shelves. Each shelf holds 8 boxes. Each box contains 6 items.
How many items are in the store?
Let's think step by step.
El modelo produce pasos intermedios: "4 shelves times 8 boxes is 32 boxes. 32 boxes times 6 items is 192 items". El Zero-shot CoT es menos confiable que el few-shot —las cadenas a veces son descuidadas— pero cuesta cero esfuerzo de prompt engineering. Cinco palabras, y el modelo se esfuerza más.
¿Por qué funciona esto? La explicación más plausible es que los LLM absorbieron millones de ejemplos de razonamiento paso a paso durante el entrenamiento. Libros de texto, tutoriales, respuestas de Stack Overflow, soluciones matemáticas. La frase "let's think step by step" activa una distribución de texto que tiende a incluir razonamiento intermedio, y el modelo sigue esa distribución.
Mira cómo funciona la frase mágica
A continuación, se presentan dos ejecuciones reales grabadas del mismo modelo (Gemini Flash, con su función de pensamiento nativa desactivada en ambas, por lo que lo que ves es puro prompting). Misma pregunta —contar la letra "e" en una oración— y la única diferencia es cómo comienza cada solicitud. Una comienza con "Answer with only the final number, no explanation". La otra comienza con la frase mágica misma: "Let's think step by step". Nada es simulado ni se llama a ningún LLM cuando presionas play; estas son grabaciones de las ejecuciones reales.
"Just the answer" produce un número con confianza en aproximadamente un segundo —y es incorrecto. Ejecútalo de nuevo y obtendrás un número incorrecto diferente; intentos separados nos dieron 17, 18, 19 y 22. "Let's think step by step" hace que el modelo deletree la oración palabra por palabra, sume los conteos por palabra y llegue al total correcto: 21.
Contar letras es una tarea deliberadamente injusta para un modelo de lenguaje —lee tokens, no caracteres, por lo que la respuesta directa es una suposición disfrazada de hecho. Eso es lo que lo convierte en una demostración clara: la ejecución paso a paso no hace que el modelo sea más inteligente, hace que el modelo escriba el problema, y la respuesta surge de los pasos escritos.
Por qué el chain-of-thought funciona realmente
La razón más profunda es computacional. Un Transformer genera un token a la vez, y cada generación de token es un cómputo de profundidad fija —un número constante de capas realizando un número constante de operaciones. Para una búsqueda simple como "¿Cuál es la capital de Francia?", eso es más que suficiente. Para un problema de varios pasos, el modelo necesita más cómputo del que le ofrece un solo paso hacia adelante (forward pass).
El chain-of-thought distribuye el cómputo a través de múltiples posiciones de tokens. Cada paso de razonamiento es un nuevo token, y cada generación de token recibe un forward pass completo a través de la red. Al escribir "5 + 6 = 11" como tokens intermedios, el modelo realiza la suma durante la generación en lugar de intentar hacerlo todo de una sola vez.
Pedirle a un modelo que salte de la pregunta a la respuesta en un solo paso es como pedirle a una persona que multiplique dos números de cinco dígitos mentalmente. Escribir los pasos intermedios le da al modelo el mismo espacio de trabajo (scratch space) que un humano obtiene con papel y lápiz. Eso es exactamente lo que viste en la repetición anterior: el desglose numerado letra por letra es el espacio de trabajo, construido un token a la vez.
También explica por qué el chain-of-thought a veces falla. Si el modelo comete un error en un paso intermedio, arrastrará ese error con confianza por el resto de la cadena. La cadena es tan fuerte como su eslabón más débil.
Variantes y extensiones
El chain-of-thought dio lugar a una pequeña familia de técnicas.
Self-consistency
En lugar de generar una sola cadena de razonamiento, se muestrean múltiples cadenas con una temperatura superior a cero y se toma una votación por mayoría sobre la respuesta final. Si 7 de cada 10 cadenas llegan a 192, esa es probablemente la respuesta, incluso si 3 cadenas se desviaron.
answers = []
for _ in range(10):
response = llm.generate(prompt, temperature=0.7)
answer = extract_final_answer(response)
answers.append(answer)
final_answer = most_common(answers) # votación por mayoríaLa self-consistency aporta un aumento real en la precisión. En GSM8K, llevó a PaLM 540B del 57% (una sola cadena) al 74% (votación por mayoría). El costo es obvio: estás ejecutando la inferencia N veces por pregunta.
Tree of Thoughts
En lugar de una cadena lineal, explora un árbol de caminos de razonamiento. En cada paso, genera múltiples pasos siguientes candidatos, evalúa cuáles son más prometedores y continúa desde los mejores. Es beam search aplicado al razonamiento.
Tree of Thoughts es bueno en problemas con callejones sin salida, donde podrías necesitar retroceder (backtrack). El ejemplo canónico es el "Juego del 24": dados cuatro números, usa operaciones aritméticas para obtener 24. Una cadena lineal se compromete con un primer paso incorrecto. Un árbol puede explorar varios primeros pasos en paralelo.
Program-of-Thought
En lugar de razonar en lenguaje natural, haz que el modelo escriba código que resuelva el problema y luego ejecute el código. El modelo se encarga de la formulación del problema; un intérprete confiable se encarga de las matemáticas.
Q: If a train travels at 60 mph for 2.5 hours, then 80 mph for 1.75 hours,
what is the total distance?
# Let me write code to solve this:
distance_1 = 60 * 2.5 # 150 miles
distance_2 = 80 * 1.75 # 140 miles
total = distance_1 + distance_2 # 290 miles
print(total) # 290
Esto elimina por completo los errores aritméticos y es especialmente bueno para problemas que requieren cálculos precisos.
Limitaciones
El chain-of-thought no es una solución mágica.
Verbosidad. Las cadenas de razonamiento consumen tokens, lo que significa más latencia y más costo. Para preguntas simples, el overhead no vale la pena.
Razonamiento alucinado. El modelo puede producir pasos intermedios que suenan plausibles pero son lógicamente inválidos. La cadena "parece correcta" pero llega a la conclusión equivocada. Eso es posiblemente peor que una respuesta incorrecta directa porque le da al usuario una falsa confianza.
Fidelidad (Faithfulness). Existe un debate abierto sobre si el razonamiento de chain-of-thought refleja lo que el modelo realmente está haciendo, o si es una racionalización post-hoc. El modelo podría llegar a una respuesta a través de sus representaciones internas y luego generar una cadena de razonamiento que la justifique. Los humanos también hacemos esto.
Rendimientos decrecientes a escala extrema. A medida que los modelos se vuelven más grandes y capaces, resuelven más problemas correctamente incluso sin chain-of-thought, y la brecha se cierra.
Del prompting al razonamiento nativo
La evolución más interesante del chain-of-thought es que ha sido absorbido en el entrenamiento. Los modelos o1 y o3 de OpenAI no necesitan que les indiques "think step by step". Lo hacen de forma nativa, produciendo tokens de razonamiento interno antes de responder.
Estos modelos de razonamiento se entrenan con aprendizaje por refuerzo (reinforcement learning) para producir trazas de pensamiento útiles. El razonamiento ocurre en un scratchpad oculto. Ves la respuesta final y opcionalmente un resumen del razonamiento, pero no la cadena bruta (raw). El modelo decide cuándo y cuánto razonar en lugar de esperar a que un prompt lo active.
Este es un patrón que se repite en la IA: un truco de prompting revela una capacidad, los investigadores descubren cómo integrar la capacidad en el entrenamiento y la siguiente generación de modelos lo hace por defecto. El chain-of-thought fue el insight inicial. Los modelos de razonamiento son el producto.
Lo que comenzó como un hack de prompting es ahora una parte fundamental de cómo piensan los sistemas más capaces. La lección es clara: dale al modelo espacio para trabajar en el problema y la respuesta mejorará.
