Menu

Árbol de pensamiento: cómo funciona y ejemplos

El árbol de pensamiento (tree of thought) hace que el modelo explore varias soluciones parciales, evalúe cada una y conserve solo las ramas prometedoras. Aquí verás cómo funciona el método original, una versión en un solo prompt para probar y dónde se queda corta esa versión.

Puedes editar cada prompt de esta página y abrirlo después en ChatGPT, Claude u otra app de IA.

El árbol de pensamiento (tree of thought prompting) hace que un modelo de lenguaje trabaje un problema como lo harías tú en papel: anotar algunos pasos siguientes posibles, juzgar cuáles parecen prometedores, continuar esos y abandonar una rama cuando no lleva a ninguna parte. La idea viene de Yao et al. 2023, "Tree of Thoughts: Deliberate Problem Solving with Large Language Models". Amplía la cadena de pensamiento, que sigue una sola línea de razonamiento, a una búsqueda entre muchas líneas.

Esta página explica cómo funciona el método original, te da una versión en un solo prompt para probar en ChatGPT, Claude o Gemini y muestra el bucle en código para cuando un prompt no basta.

Cómo funciona el árbol de pensamiento

El artículo divide el método en cuatro decisiones.

  1. Qué cuenta como un pensamiento. Un pensamiento es un paso intermedio, lo bastante pequeño para que el modelo lo produzca bien y lo bastante grande para poder juzgarlo. En un acertijo matemático es una ecuación; en una tarea de redacción es un plan breve.
  2. Cómo generar pensamientos. A partir de la solución parcial actual, el modelo propone varios pasos siguientes candidatos, ya sea muestreando de forma independiente o enumerándolos en una sola respuesta.
  3. Cómo evaluarlos. Se le pide al modelo que puntúe cada solución parcial. El artículo usó dos estilos: puntuar cada estado por separado (por ejemplo como "seguro", "probable" o "imposible") o mostrarle al modelo varios estados y dejar que vote por el mejor.
  4. Cómo buscar. Un programa conserva los mejores estados de cada nivel (búsqueda en anchura) o sigue una rama en profundidad y retrocede cuando la evaluación dice que no tiene salida (búsqueda en profundidad).

Toma la tarea del Juego del 24 del artículo: usa los números 4, 9, 10 y 13 una vez cada uno, con las cuatro operaciones básicas, para llegar a 24. Una cadena de pensamiento se compromete con su primera ecuación y tiene que cargar con ella. Un árbol de pensamiento podría probar 13 - 9 = 4, 10 - 4 = 6 y 4 + 9 = 13 como primeros pasos, preguntarle al modelo con qué números restantes todavía se puede llegar a 24, descartar el callejón sin salida (con 10, 13 y 13 no se llega a 24) y terminar en (10 - 4) * (13 - 9) = 24.

Qué mostró el artículo

Los autores eligieron tres tareas que a GPT-4 le resultaban difíciles incluso con cadena de pensamiento, porque cada una requiere planificar o buscar: el Juego del 24, una tarea de escritura creativa con frases finales fijas y minicrucigramas de 5x5. Con GPT-4, la búsqueda en árbol resolvió muchos más acertijos del Juego del 24 que el prompting con cadena de pensamiento o que muestrear varias cadenas y quedarse con la respuesta mayoritaria, y también rindió mejor en las otras dos tareas.

El precio son las llamadas. Cada paso candidato y cada evaluación son una petición aparte, así que resolver un problema puede llevar decenas de llamadas al modelo donde la cadena de pensamiento cuesta una. Ese intercambio tiene sentido en problemas difíciles y ninguno en los sencillos.

El árbol de pensamiento en un solo prompt

Puedes aproximar la idea en un solo mensaje: pide varios enfoques distintos, un veredicto sobre cada uno según los datos que diste y el desarrollo solo del que sobreviva. Las pestañas de abajo envían el mismo problema de las dos maneras.

Nuestra app web va rápida para los usuarios de Europa, pero tarda unos 12 segundos en cargar para los usuarios de Australia. El servidor está en Fráncfort. Cuando la página carga, el navegador hace 40 peticiones pequeñas a la API, una tras otra. ¿Cuál es la causa y qué deberíamos hacer?
Try it
Example replyReplies vary between models and runs.

La causa principal es la distancia física entre Australia y tu servidor en Fráncfort. Cada petición tiene que viajar a Europa y volver, y con 40 peticiones en cada carga de página, ese retraso se acumula.

La solución estándar es una CDN (red de distribución de contenidos). Una CDN guarda copias de tu sitio en servidores de todo el mundo, así que los usuarios australianos descargan desde un lugar cercano en lugar de desde Fráncfort. La mayoría de los proveedores te dejan ponerla delante de un sitio existente sin cambiar tu código.

También puedes comprimir las imágenes y activar la caché del navegador para reducir aún más el tiempo de carga.

La respuesta directa no es absurda; hasta tiene en cuenta las 40 peticiones, pero tomó la primera explicación que encajaba ("la distancia") y siguió con ella. La respuesta ramificada comparó cada explicación con los detalles del prompt, y así notó que "una tras otra" importa más que "Australia", y que la CDN dejaría intactas las llamadas a la API.

Una plantilla reutilizable

La misma estructura sirve para decisiones de diseño y planes. Rellena el problema y los criterios que te importan; la respuesta muestra el valor por defecto rellenado.

Ramificar, juzgar, elegir
Fill in
Problema: Nuestro equipo de tres personas tiene que elegir cómo desplegar una pequeña API en Node.js. Criterios: coste mensual, tiempo de configuración, mantenimiento continuo Propón 3 enfoques realmente distintos. Para cada uno, valóralo según cada criterio en una línea corta y da un veredicto: conservar o descartar. Luego desarrolla solo el mejor enfoque en cinco primeros pasos concretos. Si dos enfoques empatan, di qué información decidiría entre ellos.
Try it
Example replyReplies vary between models and runs.

Plataforma como servicio (un hosting de apps gestionado) Coste: moderado, sube con el tráfico. Configuración: menos de una hora desde un repositorio Git. Mantenimiento: bajo, el proveedor parchea el sistema operativo. Conservar.

Tu propio servidor virtual Coste: el más bajo. Configuración: un día para el servidor, TLS y un gestor de procesos. Mantenimiento: alto, las actualizaciones y los reinicios corren por tu cuenta. Descartar para un equipo de tres.

Funciones serverless Coste: muy bajo a pequeña escala. Configuración: moderada, puede que haya que reestructurar una app de servidor existente. Mantenimiento: bajo, pero los arranques en frío añaden latencia. Conservar como segunda opción.

Mejor: plataforma como servicio. Primeros pasos:

  1. Añade un script de arranque y lee el puerto de una variable de entorno.
  2. Pasa los secretos a los ajustes de entorno del proveedor.
  3. Conecta el repositorio y despliega la rama principal.
  4. Añade un endpoint de comprobación de estado.
  5. Configura una alerta de gasto.

Dónde se queda corto un solo prompt

La versión en un solo prompt conserva el vocabulario del método, pero pierde la mayor parte de su mecanismo.

  • Sin retroceso real. El modelo escribe todas las ramas y veredictos de una sola pasada. Si el paso 3 de la rama elegida falla, nada lo manda de vuelta al paso 1.
  • El juez es el autor. La misma respuesta que propuso una idea también la califica, así que tiende a favorecer la rama que ya tenía en mente. En el artículo, la evaluación es una llamada aparte que se hace cuando los candidatos ya existen.
  • Las ramas no son independientes. Las ideas enumeradas en una misma respuesta se influyen entre sí y a menudo terminan siendo variaciones de un mismo tema. Pedir enfoques "realmente distintos", como hace la plantilla, empuja en contra de esto, pero no lo elimina.
  • Los modelos de razonamiento ya ramifican. Los modelos que piensan antes de responder prueban y descartan enfoques internamente. Para ellos, el prompt aporta menos precisión; su valor restante es que ves las opciones descartadas y puedes discrepar del razonamiento.

Una búsqueda en árbol real en código

El método completo es un bucle en tu programa: generar pasos candidatos, puntuar cada solución parcial en una llamada aparte, conservar los mejores y repetir. Esta es una versión mínima en anchura con el SDK de Python de OpenAI; la misma forma funciona con cualquier proveedor.

from openai import OpenAI

client = OpenAI()
MODEL = "your-model-id"  # e.g. from your provider's model list

def ask(prompt, temperature=0.7):
    response = client.chat.completions.create(
        model=MODEL,
        messages=[{"role": "user", "content": prompt}],
        temperature=temperature,
    )
    return response.choices[0].message.content.strip()

def propose(problem, path, k=3):
    steps = "\n".join(path) or "(none yet)"
    prompt = f"Problem: {problem}\nSteps so far:\n{steps}\nPropose the next step only."
    return [ask(prompt) for _ in range(k)]

def score(problem, path):
    steps = "\n".join(path)
    prompt = (f"Problem: {problem}\nPartial solution:\n{steps}\n"
              "How likely is this to lead to a correct solution? Reply with a number from 1 to 10 only.")
    try:
        return float(ask(prompt, temperature=0))
    except ValueError:
        return 0.0

def tree_of_thought(problem, depth=3, keep=2):
    frontier = [[]]
    for _ in range(depth):
        candidates = [path + [step] for path in frontier for step in propose(problem, path)]
        candidates.sort(key=lambda p: score(problem, p), reverse=True)
        frontier = candidates[:keep]
    return frontier[0]

Con depth=3, keep=2 y tres propuestas por estado, una ejecución hace unas treinta llamadas. En muchas tareas, la autoconsistencia (varias respuestas completas y votación por mayoría) o una secuencia fija de pasos con encadenamiento de prompts consigue casi todo el beneficio con menos llamadas. Recurre a un árbol cuando la tarea requiere búsqueda: muchos primeros movimientos posibles y una forma de detectar pronto un callejón sin salida.

Preguntas frecuentes

¿Qué es el árbol de pensamiento en prompting?

El árbol de pensamiento (tree of thought) es una forma de resolver problemas en la que el modelo propone varios pasos siguientes posibles, valora qué tan prometedor es cada uno y continúa solo las mejores ramas, retrocediendo cuando una rama falla. Viene del artículo de 2023 "Tree of Thoughts: Deliberate Problem Solving with Large Language Models", de Yao et al. En el artículo, la ramificación y la puntuación las ejecuta un programa que llama al modelo muchas veces.

¿Qué diferencia hay entre el árbol de pensamiento y la cadena de pensamiento?

La cadena de pensamiento sigue una sola línea de razonamiento de principio a fin, así que un error temprano llega hasta la respuesta. El árbol de pensamiento mantiene vivas varias soluciones parciales a la vez, las evalúa y descarta las débiles, así que puede recuperarse de un mal primer paso. El precio son muchas más llamadas al modelo.

¿Puedo usar el árbol de pensamiento en ChatGPT o Claude?

Puedes usar una aproximación: un prompt que le pida al modelo enumerar varios enfoques, juzgar cada uno según tus criterios, descartar los débiles y desarrollar el mejor. Funciona en cualquier app de chat. No es el método completo, porque todo ocurre en una sola respuesta y el modelo califica sus propias ideas en la misma pasada en que las escribió.

¿Sigue siendo útil el árbol de pensamiento con los modelos de razonamiento?

Menos que antes. Los modelos que piensan antes de responder ya prueban y descartan enfoques internamente, así que pedirles que ramifiquen aporta menos. La versión en un solo prompt sigue siendo útil cuando quieres ver las opciones y los motivos por los que se descartaron, para poder revisar tú mismo ese juicio.

¿Cuándo debo usar el árbol de pensamiento?

Úsalo en problemas con varios enfoques plausibles en los que la primera idea suele ser errónea: planificación, decisiones de diseño, diagnosticar un problema a partir de síntomas y acertijos que requieren búsqueda. Para una pregunta con un camino evidente, la cadena de pensamiento normal es más barata e igual de buena.

Coddy programming languages illustration

Aprende a programar con Coddy

COMENZAR