Prompt Engineering Avanzado: Chain-of-Thought, ReAct y Tree-of-Thoughts

Descubre cómo las técnicas avanzadas de prompt engineering – chain-of-thought, ReAct y tree-of-thoughts – mejoran la precisión y el razonamiento de los LLMs.

AI & ML
LLMRAGAgents

Prompt Engineering Avanzado: Chain-of-Thought, ReAct y Tree-of-Thoughts

Introducción

El prompt engineering ha evolucionado de simples instrucciones a estrategias sofisticadas que mejoran el razonamiento de los modelos de lenguaje. Técnicas como chain-of-thought (CoT), ReAct y tree-of-thoughts (ToT) permiten a los LLMs abordar problemas complejos con pasos lógicos, búsqueda estructurada y verificación interna. En este artículo exploramos cada técnica con ejemplos prácticos y recomendaciones de implementación.

Chain-of-Thought: Razonamiento paso a paso

La técnica chain-of-thought (cadena de pensamiento) pide al modelo desglosar su razonamiento en pasos secuenciales antes de dar la respuesta final. Esto mejora la precisión en tareas aritméticas, lógicas y de sentido común.

Ejemplo básico

Prompt sin CoT:
"Si Juan tiene 5 manzanas y Pedro le da 3, ¿cuántas manzanas tiene Juan?"

Prompt con CoT:
"Paso a paso: 1) Juan comienza con 5 manzanas. 2) Pedro le da 3 manzanas. 3) Sumamos: 5 + 3 = 8. Por lo tanto, Juan tiene 8 manzanas."

El modelo aprende a imitar esta estructura. En la práctica, se incluyen ejemplos de cadenas de pensamiento en el prompt (few-shot CoT) o se instruye directamente al modelo a "pensar paso a paso" (zero-shot CoT).

Variantes: Auto-CoT y CoT-SC

  • Auto-CoT: Genera automáticamente las cadenas de pensamiento a partir de ejemplos.
  • CoT-SC (autoconsistencia): Genera múltiples cadenas y selecciona la respuesta más frecuente, mejorando la robustez.

ReAct: Razonamiento + Acción

ReAct (Reasoning + Acting) combina el razonamiento con la capacidad de interactuar con herramientas externas. El modelo genera pensamientos, acciones (como llamar a una API) y observaciones, iterando hasta resolver la tarea.

Estructura del prompt ReAct

Question: ¿Cuál es la población de la capital de Francia?

Thought: Necesito buscar la capital de Francia y luego su población.
Action: search[capital de Francia]
Observation: París

Thought: Ahora busco la población de París.
Action: search[población de París]
Observation: 2.161 millones

Answer: La población de la capital de Francia (París) es de aproximadamente 2.161 millones de habitantes.

Implementación

Se puede implementar con frameworks como LangChain o mediante prompts estructurados que definan las acciones disponibles. Un ejemplo real es el agente de conversación que usa búsqueda web para responder preguntas factuales.

Tree-of-Thoughts: Búsqueda en árbol

Tree-of-thoughts (ToT) generaliza CoT al explorar múltiples líneas de razonamiento en forma de árbol. El modelo evalúa nodos (estados intermedios) y decide qué caminos seguir, podando los menos prometedores.

Funcionamiento

  1. Generación: Dado un estado, el modelo propone varios posibles siguientes pasos.
  2. Evaluación: Cada estado se evalúa (por ejemplo, probabilidad de conducir a una respuesta correcta).
  3. Búsqueda: Se utiliza BFS o DFS para explorar el árbol.
  4. Selección: Se elige el mejor camino o se combinan múltiples caminos.

Ejemplo: Juego del 24

En el juego del 24, se deben usar cuatro números y operaciones para obtener 24. ToT explora diferentes combinaciones de operaciones y evalúa cuáles se acercan al objetivo.

Input: 4, 7, 8, 8
Nodes: 
- (4 + 7) * 8 / 8 = 11? No.
- (8 - 7) * 4 + 8 = 12? No.
- (8 + 8) * 7 / 4 = 28? No.
- (8 - 4) * 7 - 8 = 20? No.
... hasta encontrar (8 - 7) * 8 * 4 = 32? No... finalmente (8 + 8 - 7) * 4 = 36? No... 
El árbol se poda hasta hallar la solución.

Comparativa y recomendaciones

| Técnica | Cuándo usarla | Ventajas | Desventajas |
|---------|---------------|----------|-------------|
| CoT | Problemas lógicos, aritméticos, de sentido común | Fácil de implementar, mejora precisión | No permite interacción externa |
| ReAct | Tareas que requieren búsqueda, cálculos, acceso a datos | Combina razonamiento con acciones reales | Requiere API o herramientas, más costoso |
| ToT | Problemas complejos con múltiples caminos (planificación, puzzles) | Explora espacio de soluciones, mejor que CoT en tareas difíciles | Mayor latencia y costo computacional |

Implementación práctica

Para implementar CoT, basta con añadir "Pensemos paso a paso" al final del prompt. Para ReAct, necesitas definir acciones y un entorno. ToT es más complejo y suele requerir un controlador externo que gestione el árbol.

Ejemplo en Python con CoT

import openai

prompt = """Pregunta: Si un tren viaja a 60 km/h durante 2 horas, ¿qué distancia recorre?
Paso a paso:
1. La velocidad es 60 km/h.
2. El tiempo es 2 horas.
3. Distancia = velocidad * tiempo = 60 * 2 = 120 km.
Respuesta: 120 km.

Pregunta: Una tienda vende 25 camisetas al día. ¿Cuántas vende en una semana?
Paso a paso:
"""
response = openai.ChatCompletion.create(model="gpt-4", messages=[{"role":"user","content":prompt}])
print(response.choices[0].message.content)

Conclusión

Chain-of-thought, ReAct y tree-of-thoughts son técnicas poderosas que amplían las capacidades de los LLMs. CoT es el punto de partida; ReAct añade interacción con el mundo real; ToT ofrece búsqueda estructurada para problemas complejos. Dominar estas técnicas es esencial para cualquier ingeniero de prompts que busque soluciones precisas y robustas.

Para profundizar, te recomendamos leer los artículos originales:

Publicaciones relacionadas