Esencia del patrón
ReAct (Reasoning + Acting) es un patrón que permite que un agente actúe paso a paso, tomando una decisión después de cada acción en función del resultado obtenido.
Cuándo usarlo: cuando no se puede planificar de forma fiable todo el camino por adelantado y el siguiente paso depende del resultado anterior.
Cada paso consta de tres acciones:
Think— decide qué hacer despuésAct— ejecuta una acción o llama a una herramientaObserve— analiza el resultado
Después de eso, el agente vuelve a decidir cuál es el siguiente paso.

Problema
Imagina esto: estás por primera vez en una ciudad nueva y buscas una farmacia abierta con el medicamento que necesitas.
Todavía no sabes de antemano:
- qué farmacias hay cerca
- si están abiertas ahora
- si tienen el medicamento necesario
Es imposible construir un plan completo de inmediato, porque cada paso depende de un resultado nuevo.
Por eso actúas en ciclo:
- Encontraste la farmacia más cercana
- Verificaste si está abierta
- Si no, pasaste a la siguiente
- Repetiste hasta encontrar la correcta
Es decir, constantemente: información -> decisión -> acción -> información nueva.
Y si te fuerzas a fijar la ruta desde el inicio ("#1 -> #2 -> #3"), eso es un plan al azar.
Ese es el problema: en muchas tareas es imposible planificar correctamente todos los pasos por adelantado.
Solución
ReAct resuelve esto con decisiones durante la ejecución, no con un plan rígido definido de antemano.
Analogía: es como un navegador en carretera. Construyes la siguiente maniobra después de cada giro nuevo o cierre de vía. La ruta se ajusta sobre la marcha, no se fija para siempre.
Principio clave: no se puede construir un plan completo de inmediato, por eso el agente debe adaptarse después de cada resultado.
En lugar de primero plan completo -> luego ejecución, el agente trabaja así:
- Razonamiento (
Think): toma una decisión - Acción (
Act): ejecuta una acción - Observación (
Observe): analiza el resultado
Después de eso, define el siguiente paso según el nuevo contexto.
Si una farmacia está cerrada, el agente no "fuerza" el plan anterior, sino que ajusta acciones de inmediato.
Cada resultado nuevo:
- se agrega al contexto
- influye en la siguiente decisión
- cambia la ruta posterior
ReAct no ejecuta un guion predefinido, se adapta en cada paso.
El modelo puede "querer" repetir acciones sin fin, por eso la política de ejecución (execution-policy) define las condiciones para detener el ciclo.
Cómo funciona
Importante: el agente no ejecuta acciones por sí solo
En la etapa de razonamiento (Think), el agente solo decide qué se debe hacer después.
Pero no ejecuta la acción por sí mismo.
Genera una decisión en forma de texto, por ejemplo:
“Hay que llamar la herramienta
search_docscon el parámetro X”
Después de eso:
- el sistema alrededor del agente lee esa decisión
- ejecuta la acción o llama la herramienta
- devuelve el resultado
Ese resultado se vuelve una nueva observación (Observe).
Descripción del flujo completo: Think → Act → Observe
Razonamiento (Think)
El agente decide qué se debe hacer después.
Acción (Act)
El sistema ejecuta la acción o llama a una herramienta.
Observación (Observe)
El entorno devuelve un resultado, que se convierte en un nuevo contexto.
El agente solo toma decisiones.
Todas las acciones las ejecuta una capa externa de ejecución (execution layer).
Si esta capa no tiene límites, el agente puede:
- llamar una herramienta decenas de veces
- repetir las mismas acciones
- gastar el presupuesto en llamadas API
El ciclo se repite hasta que la tarea se completa o se alcanza una condición de parada.
En código se ve así
max_steps = 8
for step_no in range(1, max_steps + 1):
thought = think(context)
action = act(thought)
result = observe(action)
context.append(result) # Observe -> nuevo context para el siguiente Think.
if is_done(result):
done = True
break
if not done:
return stop_with_reason("max_steps_reached")
Cómo se ve durante la ejecución
Goal: encontrar la farmacia abierta más cercana
Think: hay que encontrar una farmacia cercana
Act: el sistema llama find_nearby_pharmacies(user_location)
Observe: se recibió una lista de farmacias ordenada por distancia
Entre iteraciones: la lista de farmacias se agrega al context
Think: verificar la primera farmacia (la más cercana)
Act: el sistema llama check_pharmacy("Farmacia #1")
Observe: la farmacia está cerrada
Entre iteraciones: el estado "cerrada" se agrega al context
Think: verificar la siguiente farmacia
Act: el sistema llama check_pharmacy("Farmacia #2")
Observe: la farmacia está abierta
Think: esta es la farmacia abierta más cercana
Act: el sistema devuelve la dirección
Observe: el usuario recibió el resultado
Stop: condición cumplida, el ciclo termina
El agente decide qué hacer, ejecuta una acción y obtiene un resultado.
Cada resultado se agrega al contexto y se convierte en base para el siguiente paso.
Ejemplo completo de agente ReAct
Cuándo encaja - y cuándo no
Encaja
| Situación | Por qué ReAct encaja | |
|---|---|---|
| ✅ | La ruta al resultado no es obvia | ReAct ajusta el plan en cada paso según nuevas observaciones. |
| ✅ | El siguiente paso depende de la respuesta de una herramienta | La lógica Think -> Act -> Observe está hecha exactamente para este ciclo. |
| ✅ | Necesitas trabajar con API, base de datos, búsqueda u otras herramientas | El agente llama herramientas durante la ejecución y se adapta. |
No encaja
| Situación | Por qué ReAct no encaja | |
|---|---|---|
| ❌ | La tarea tiene un escenario fijo y predecible | Es más simple y más barato ejecutar un pipeline predefinido. |
| ❌ | Se requiere velocidad de respuesta crítica (latencia mínima) | Cada ciclo agrega tiempo por pasos extra de razonamiento y llamadas. |
| ❌ | Cada llamada de herramienta es costosa o estrictamente limitada | Sin límites duros, ReAct puede hacer muchas iteraciones. |
Si eliges ReAct, define límites desde el principio: max_steps, timeouts, condiciones de parada y presupuesto para llamadas de herramientas.
Cuándo usar ReAct (vs otros patrones)
Usa ReAct cuando el agente deba tomar decisiones paso a paso según los resultados de acciones anteriores.
Prueba rápida:
- si necesitas "vi el resultado -> decidí el siguiente paso" -> ReAct
- si necesitas "primero dividir un objetivo grande en subtareas" -> Task Decomposition Agent
Comparación con otros patrones y ejemplos
Chuleta rápida:
| Si la tarea se ve así... | Usa |
|---|---|
| Después de cada paso, hay que decidir qué hacer después | Agente ReAct |
| Primero hay que dividir un objetivo grande en tareas más pequeñas y ejecutables | Task Decomposition Agent |
| Hay que ejecutar código, verificar resultados e iterar de forma segura | Code Execution Agent |
| Hay que analizar datos y devolver conclusiones basadas en ese análisis | Data Analysis Agent |
| Se necesita investigación desde múltiples fuentes con evidencia estructurada | Research Agent |
Ejemplos:
ReAct: "Encuentra la causa de la caída de la API: revisa logs -> mira errores -> ejecuta la siguiente verificación según el resultado".
Task Decomposition: "Prepara el lanzamiento de una nueva tarifa: divide la tarea en subtareas para contenido, ingeniería, QA y soporte".
Code Execution: "Calcula la retención de 12 meses en Python y verifica que las fórmulas sean correctas con datos reales".
Data Analysis: "Analiza un CSV de ventas: encuentra tendencias, anomalías y da conclusiones cortas".
Research: "Recoge datos sobre 5 competidores desde varias fuentes y genera un resumen comparativo".
Cómo combinarlo con otros patrones
ReAct se usa con frecuencia junto con otros patrones.
- ReAct + RAG — cuando faltan hechos, el agente primero los recupera de la base de conocimiento y solo después da el siguiente paso.
- ReAct + Reflection — después de cada paso, el agente se revisa a sí mismo para detectar y corregir errores rápido.
- ReAct + Supervisor — el agente no ejecuta acciones de riesgo por su cuenta; las pasa para aprobación humana.
ReAct agrega un ciclo de decisión. Otros patrones agregan control, memoria o coordinación.
Resumen
Agente ReAct:
- toma decisiones de forma gradual
- ejecuta una acción
- analiza el resultado
Y repite el ciclo hasta completar la tarea.
Ventajas y desventajas
Ventajas
se adapta rápido a datos nuevos
los errores se ven ya en el siguiente paso
funciona bien cuando las condiciones cambian durante la ejecución
cada paso es fácil de explicar
Desventajas
puede ser más lento por la mayor cantidad de pasos
sin límites, puede quedarse en bucle
hay que definir claramente las condiciones de parada
FAQ
Q: ¿ReAct planifica todos los pasos por adelantado?
A: No. Toma decisiones después de cada acción.
Q: ¿ReAct puede quedarse atascado en un ciclo?
A: Sí, si no se definen condiciones de parada.
Q: ¿ReAct funciona sin herramientas?
A: Sí. El agente puede usar el ciclo Think -> Act -> Observe incluso sin llamadas a herramientas, por ejemplo para cambiar el enfoque de una tarea. Pero sin acceso a acciones externas, no puede obtener datos nuevos y trabaja solo con lo que ya está en el contexto.
Qué sigue
ReAct permite que un agente actúe paso a paso.
Pero, ¿qué hacer si la tarea es compleja y está formada por varias subtareas?