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.
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
- Generación: Dado un estado, el modelo propone varios posibles siguientes pasos.
- Evaluación: Cada estado se evalúa (por ejemplo, probabilidad de conducir a una respuesta correcta).
- Búsqueda: Se utiliza BFS o DFS para explorar el árbol.
- 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: