Contenido del curso

Patrón ReAct en LangChain con tools

Resumen

El patrón ReAct combina razonamiento y acción para que un agente de IA decida por sí mismo cuándo llamar a una tool, cuándo iterar y cuándo entregar la respuesta final. Si estás construyendo agentes con varias herramientas en LangGraph o LangChain, este patrón te ayuda a orquestar decisiones complejas sin escribir cientos de líneas de código.

¿Qué es el patrón ReAct y por qué importa en agentes con tools?

ReAct viene de Reason and Act: el large language model razona, ejecuta una acción (normalmente una tool), observa el resultado y vuelve a razonar. Antes, el razonamiento y la ejecución vivían separados. El paper original de 2023 propuso unirlos en un mismo ciclo, y de ahí nace esta arquitectura que hoy es estándar en la industria.

La clave está en el ciclo virtuoso. El agente no llama a una tool y termina; evalúa si con esa respuesta ya puede resolver la tarea o si necesita llamar a otra tool, pedirle más información al usuario o reintentar. Y aquí viene lo interesante: el modelo dirige sus propias acciones basándose en la retroalimentación de su entorno [02:00].

¿Qué es el patrón ReAct? Es una arquitectura de agentes donde el modelo razona, ejecuta una tool, observa el resultado y decide si itera o entrega la respuesta final. Une pensamiento y acción en un mismo ciclo.

Para evitar bucles infinitos, normalmente se define un máximo de iteraciones. Aunque los modelos modernos suelen saber cuándo detenerse o cuándo pedirle al usuario información que les falta para correr una tool.

¿Cómo funciona el ciclo ReAct paso a paso?

El flujo arranca en un punto de inicio. Tu agente recibe un prompt con instrucciones y tiene acceso a un set de tools. A partir de ahí, evalúa continuamente si necesita ejecutar alguna herramienta para resolver la pregunta del usuario o si puede ir directo a Done y generar la respuesta.

Es un comportamiento muy parecido al patrón RAG, donde OpenAI decide internamente si llama a su tool de file search o responde directamente. La diferencia es que con ReAct tú tienes el control: declaras tus propias tools y el modelo razonador decide cuándo y cómo usarlas, sin depender de lo que ofrezca el proveedor.

Un caso concreto que se trabaja en el módulo es un agendador de citas [05:30]. El agente maneja la conversación y cuenta con tools para crear la cita y verificar disponibilidad. Si le falta la fecha, el nombre del doctor o el nombre del paciente, le pide al usuario esa información antes de ejecutar las herramientas. Una vez tiene todo, agenda y responde.

¿Se puede combinar ReAct con structured output?

Sí. Puedes pedirle al agente que, después de usar las tools, devuelva la respuesta en un formato estructurado específico. Esto es útil cuando necesitas integrar la salida con otros sistemas o quieres garantizar un esquema de datos.

¿Cómo implementar ReAct en LangChain y LangGraph?

LangChain ya trae una utilidad llamada create_agent que implementa el patrón ReAct por defecto en pocas líneas de código [07:30]. Por debajo, esta función usa LangGraph como sistema de orquestación, con nodos, edges y routers.

Esto te deja dos caminos:

  • Usar create_agent de LangChain cuando quieras un ReAct estándar y rápido de implementar.
  • Construir tu propio ReAct con LangGraph cuando necesites lógica custom, bifurcaciones específicas o ajustes basados en el paper original.

Si visualizas el grafo en LangGraph Studio, vas a notar algo distinto a los patrones de chaining lineales. Aparecen bifurcaciones: el agente llama a un set de tools, el resultado regresa, y puede quedarse en un ciclo hasta decidir que ya tiene suficiente para responder.

¿Cuándo conviene usar ReAct en lugar de chaining? Cuando tu agente tiene varias tools y necesita decidir dinámicamente cuál usar, en qué orden o si debe iterar. El chaining sirve para flujos lineales fijos.

¿Qué modelos razonadores funcionan mejor con ReAct?

Este patrón depende fuertemente del razonamiento: el modelo tiene que evaluar, generar planes y decidir qué tool llamar primero. Si usas un modelo sin capacidades de razonamiento, los resultados se degradan. Por eso la recomendación es elegir modelos pensados para esto [12:00].

Dentro de los principales proveedores tienes opciones claras:

  • OpenAI: la familia GPT-5 y todos los modelos que empiezan con cero (o1, o3, o1-mini). Los que llevan cero son razonadores; piensan antes de responder. El o1-pro es el más potente pero también el más costoso y lento.
  • Google: Gemini 2.5 Pro incluye thinking, que es su versión de razonamiento, con buena relación precio-rendimiento.
  • Anthropic: Claude Opus 4.1 y Claude Sonnet 4 ya incorporan razonamiento por defecto.

No todo necesita un modelo razonador caro. Para tareas de triage, donde solo decides a qué nodo enviar la conversación, un GPT-4o Mini funciona perfecto y es económico. Reservá los razonadores potentes para tareas complejas con muchas tools, como agentes tipo Cursor, Kiro de Amazon o Copilot en VS Code, donde el modelo analiza archivos y genera aplicaciones completas.

La regla práctica: si tu agente va a manejar varias tools con decisiones complejas, invierte en un modelo razonador. Si es un flujo simple, optimiza por costo y velocidad.

¿Qué tipo de tareas crees que solo un modelo razonador puede resolver bien y cuáles dejarías en manos de un modelo más ligero? Cuéntame en los comentarios.