ReAct Pattern
Nivel intermedio — razonamiento explícito para agentes confiables: Thought, Action y Observation en cada paso del ciclo.
El problema
El agente de la lección anterior funciona, pero su razonamiento era opaco: el modelo decidía internamente qué herramienta usar sin explicar por qué.
Situación típica: tu agente de soporte debe resolver "el cliente no puede acceder a su cuenta". Ejecuta 5 herramientas y da una respuesta incorrecta. Sin visibilidad del razonamiento, no sabes si malinterpretó el problema inicial, usó la herramienta incorrecta, interpretó mal un resultado, o llegó a una conclusión errónea con datos correctos. // 4 causas posibles distintas, cero forma de distinguirlas
El patrón ReAct (Reasoning + Acting)
Formaliza el ciclo del agente en tres fases explícitas que se repiten hasta completar la tarea:
THOUGHT (Razono) → ACTION (Ejecuto) → OBSERVATION (Observo)
↑ |
└─────────────────────────────────┘
Thought — el agente verbaliza explícitamente qué piensa, qué información tiene, qué le falta y qué planea hacer. Action — basándose en el pensamiento, elige una acción concreta: usar una herramienta específica o finalizar. Observation — el sistema ejecuta la acción y devuelve el resultado, que alimenta el siguiente ciclo.
La clave: el Thought no es opcional ni implícito. Es un output estructurado que el modelo debe generar antes de cada acción.
Ejemplo de traza
THOUGHT 1: Necesito identificar cuál es la capital de Francia. Usaré la herramienta de búsqueda para confirmar.
ACTION 1: search("capital de Francia")
OBSERVATION 1: La capital de Francia es París.
THOUGHT 2: Ahora sé que la capital es París. Necesito buscar su población actual.
ACTION 2: search("población de París 2024")
OBSERVATION 2: París tiene aproximadamente 2.1 millones de habitantes.
THOUGHT 3: Tengo toda la información necesaria. Puedo dar una respuesta completa.
ACTION 3: finish("La capital de Francia es París, con una población de aproximadamente 2.1 millones de habitantes.")
Agente básico vs. ReAct
| Aspecto | Agente básico | Agente ReAct |
|---|---|---|
| Razonamiento | Implícito (caja negra) | Explícito (auditable) |
| Debugging | Difícil — solo ves inputs/outputs | Fácil — ves cada paso lógico |
| Tokens usados | Menos | Más (por los thoughts) |
| Latencia | Menor | Mayor (más generación) |
| Explicabilidad | Baja | Alta |
| Mejora sistemática | Difícil | Posible (analizas patrones de error) |
Cuándo aplicarlo
| Usa ReAct cuando... | NO lo uses cuando... |
|---|---|
| Necesitas auditar decisiones del agente | La tarea es trivial (1 paso) |
| Debuggeas por qué un agente falla | La latencia es crítica (añade tokens) |
| El dominio requiere explicabilidad (finanzas, salud) | El razonamiento no aporta valor al usuario |
| Tareas complejas con múltiples pasos | El agente ya funciona correctamente |
El THOUGHT es texto generado por el modelo, igual que cualquier otra salida — puede sonar coherente y plausible y aun así llevar a una acción equivocada, o justificar después de los hechos una decisión que en realidad tomó por otras razones. ReAct es una herramienta de diagnóstico, no una garantía de que el proceso interno del modelo coincida literalmente con lo que el texto dice.
Practica: transforma el agente a ReAct
Partiendo del agente básico de la lección anterior, implementa un agente ReAct completo que externalice su razonamiento en cada paso, con herramientas de búsqueda simulada y calculadora. Refuerza el formato en el system prompt (THOUGHT antes de cada ACTION, una sola herramienta por turno, razonamiento de al menos 2 frases) y prueba con una pregunta donde la búsqueda no encuentre resultados, para ver cómo el agente adapta su plan.