Phase 14 - Lesson 02
ReWOO y Plan-and-Execute: Planificación Desacoplada
This lesson includes a graded coding exercise that runs in your browser, unlocked with lifetime access.
ReAct intercala el pensamiento y la acción en un solo flujo. ReWOO los separa: un gran plan inicial y luego la ejecución. 5x menos tokens, +4% de precisión en HotpotQA, y se puede destilar el planificador en un modelo de 7B. Plan-and-Execute generalizó esto; Plan-and-Act lo escaló para la navegación web.
Tipo: Build Lenguajes: Python (stdlib) Prerrequisitos: Fase 14 · 01 (El Loop del Agente) Tiempo: ~60 minutos
Objetivos de Aprendizaje
- Explicar por que la división de ReWOO entre Planner / Worker / Solver ahorra tokens y mejora la robustez en comparación con el loop intercalado de ReAct.
- Implementar un DAG de plan, un ejecutor ordenado por dependencias y un solver que compone las salidas de los workers, todo utilizando la stdlib.
- Decidir cuándo una tarea debe ejecutarse como planificar-luego-ejecutar versus ReAct intercalado, utilizando el marco de los "cinco patrones de flujo de trabajo" de 2026 (Anthropic).
- Reconocer cuándo se necesitan los datos de plan sintético de Plan-and-Act para tareas de largo horizonte en la web o en dispositivos móviles.
El Problema
El loop intercalado de pensamiento-acción-observación de ReAct es simple y flexible, pero cada llamada a herramienta debe cargar con todo el contexto previo, incluyendo cada pensamiento anterior. El uso de tokens crece cuadráticamente con la profundidad. Peor aún: cuando una herramienta falla a mitad del loop, el modelo tiene que volver a derivar todo el plan a partir de la observación del error.
ReWOO (Xu et al., arXiv:2305.18323, mayo de 2023) notó esto y propuso una alternativa: planificar todo al inicio, recopilar evidencia en paralelo y componer la respuesta al final. Una llamada de LLM para planificar, N llamadas a herramientas para obtener evidencia (que pueden ser en paralelo) y una llamada de LLM para resolver. El intercambio es una menor flexibilidad (el plan es estático) a cambio de una eficiencia de tokens mucho mejor y modos de falla más claros.
El Concepto
Los tres roles
Planner: user_question -> [plan_dag]
Workers: [plan_dag] -> [evidence] (tool calls, possibly parallel)
Solver: user_question, plan_dag, evidence -> final_answer
El Planner produce un DAG. Cada nodo nombra una herramienta, sus argumentos y de qué nodos anteriores depende (referencias como #E1, #E2). Los Workers ejecutaron los nodos en orden topológico. El Solver une todo.
Por qué 5x menos tokens
ReAct incrementa la longitud del prompt de forma lineal con el número de pasos. En el paso 10, el prompt contiene el pensamiento 1 más la acción 1 más la observación 1 más el pensamiento 2 más la acción 2 más la observación 2, y así sucesivamente. Cada paso intermedio también incluye de manera redundante el prompt original.
ReWOO paga un prompt del planificador (grande), N prompts pequeños del worker (cada uno solo con la llamada a la herramienta, sin cadena de pensamiento) y un prompt del solver. En HotpotQA, el artículo mide aproximadamente 5x menos tokens mientras obtiene +4% de precisión absoluta.
Por qué es más robusto
Si el worker 3 falla en ReAct, el loop tiene que razonar a partir del error en medio del flujo. En ReWOO, el worker 3 devuelve una cadena de error; el solver la ve en contexto con el plan original y puede degradarse con gracia. La localización de fallas es por nodo, no por paso.
Destilación del planificador
El segundo resultado del artículo: dado que el planificador no ve observaciones, se puede ajustar un modelo de 7B con las salidas del planificador de un profesor de 175B. El modelo pequeño se encarga de la planificación; el modelo grande no se necesita en la inferencia. Esto ahora es estándar: muchos agentes de producción de 2026 usan un planificador pequeño y un ejecutor grande, o viceversa.
Plan-and-Execute (LangChain, 2023)
El equipo de LangChain, en una publicación de agosto de 2023, generalizó ReWOO bajo el nombre de un patrón: Plan-and-Execute. El planificador inicial emite una lista de pasos, el ejecutor corre cada paso y un replanificador opcional puede revisar después de observar los resultados. Esto es más cercano a ReAct que a ReWOO (el replanificador trae las observaciones de vuelta a la planificación), pero conserva los ahorros de tokens.
Plan-and-Act (Erdogan et al., arXiv:2503.09572, ICML 2025)
Plan-and-Act escala el patrón a agentes web y móviles de largo horizonte. La contribución clave son los datos de plan sintético: un generador de trayectorias etiquetadas produce datos de entrenamiento donde el plan es explícito. Se utiliza para ajustar modelos de planificadores que siguen funcionando más allá de 30-50 pasos en tareas tipo WebArena, donde una sola trayectoria de ReAct perdería coherencia.
Cuándo elegir cuál
| Patrón | Cuándo |
|---|---|
| ReAct | Tareas cortas, entorno desconocido, necesidad de manejo reactivo de excepciones |
| ReWOO | Tareas estructuradas con herramientas conocidas, sensible a tokens, evidencia paralelizable |
| Plan-and-Execute | Como ReWOO pero con replanificación después de la ejecución parcial |
| Plan-and-Act | Largo horizonte (>30 pasos), uso de web/móvil/computadora |
| Tree of Thoughts | La búsqueda vale el costo (Lección 04) |
La guía de diciembre de 2024 de Anthropic: empieza con el más simple. Si la tarea requiere una llamada a herramienta más un resumen, no construyas ReWOO. Si la tarea es una asignación de investigación de 40 pasos, no uses solo ReAct.
Construye
code/main.py implementa un ReWOO de juguete:
Planner— una política programada que emite un DAG de plan a partir de un prompt.Worker— despacha la llamada a herramienta de cada nodo a través del registro.Solver— composición programada que lee la evidencia y produce una respuesta final.- Resolución de dependencias — las referencias como
#E1se sustituyen por las salidas anteriores de los workers.
La demostración responde a "¿Cuál es la población de la capital de Francia, redondeada a millones?" usando un plan de dos pasos: (1) buscar la capital, (2) buscar la población, y luego resolver.
Ejecútalo:
python3 code/main.py
El rastreo muestra primero el plan completo, luego los resultados de los workers y finalmente la composición del solver. Compara la cantidad de tokens (imprimimos un conteo aproximado de caracteres) con una ejecución intercalada al estilo ReAct — ReWOO gana en este tipo de tareas estructuradas.
Úsalo
LangGraph distribuye Plan-and-Execute como una receta (create_react_agent para ReAct, grafos personalizados para plan-execute). Los Flows de CrewAI codifican el patrón directamente: defines las tareas por adelantado y el DAG de Flow las ejecuta. El enfoque de datos sintéticos de Plan-and-Act sigue siendo principalmente investigación; el patrón en tiempo de ejecución (DAG de plan explícito) se distribuye en producción a través de LangGraph y Flows de CrewAI.
Entrégalo
outputs/skill-rewoo-planner.md genera un DAG de plan ReWOO a partir de una solicitud del usuario, dado un catálogo de herramientas. Valida el plan (acíclico, cada referencia resuelta, cada herramienta existente) antes de entregarlo a un ejecutor.
Ejercicios
- Paraleliza la ejecución de los workers para nodos de plan independientes. ¿Qué beneficio aporta en un DAG de 6 nodos con 2 grupos paralelos?
- Agrega un nodo replanificador que se active si algún worker devuelve un error. ¿Cuál es el cambio más pequeño a ReWOO que lo convierte en Plan-and-Execute?
- Reemplaza el Planner por un modelo pequeño (clase 7B) y mantén el Solver en un modelo de frontera. Compara la calidad de extremo a extremo: ¿dónde falla la división?
- Lee la Sección 4 del artículo de ReWOO sobre destilación del planificador. Reproduce el resultado de 175B -> 7B conceptualmente: ¿qué datos de entrenamiento necesitas y cómo evalúas la calidad del plan?
- Adapta el juguete a la forma de trayectoria de Plan-and-Act: el plan es una secuencia, no un DAG. ¿Qué compensaciones cambian?
Términos Clave
| Término | Lo que la gente dice | Lo que realmente significa |
|---|---|---|
| ReWOO | "Reasoning without observations" | Planificar, luego recopilar evidencia en paralelo, luego resolver — sin observaciones que alimenten el prompt de planificación |
| Plan-and-Execute | "Patrón plan-execute de LangChain" | ReWOO con un nodo replanificador opcional después de la ejecución |
| Plan-and-Act | "Plan-execute escalado" | División explícita entre planificador/ejecutor con datos de entrenamiento de plan sintético para tareas de largo horizonte |
| Referencia de evidencia | "#E1, #E2, ..." | Marcador de posición de nodo de plan sustituido por la salida anterior del worker al momento del despacho |
| Destilación del planificador | "Planificador pequeño, ejecutor grande" | Ajustar un modelo pequeño con trazas de planificador de un profesor grande |
| Eficiencia de tokens | "Menos viajes de ida e vuelta" | 5x menos tokens en HotpotQA vs ReAct en el artículo |
| Ejecutor de DAG | "Despachador topológico" | Ejecuta nodos de plan en orden de dependencia; en paralelo en cada nivel |
Lecturas Recomendadas
- Xu et al., ReWOO: Decoupling Reasoning from Observations (arXiv:2305.18323) — el artículo canónico
- Erdogan et al., Plan-and-Act (arXiv:2503.09572) — planificador-ejecutor escalado con planes sintéticos
- LangGraph Plan-and-Execute tutorial — la receta del framework
- Anthropic, Building Effective Agents — elige el patrón más simple que funcione