MÓDULO 4 · LANGCHAIN FUNDAMENTOS · 45 MIN

Agentes ReAct: cuando el flujo lo decide el modelo

La diferencia entre una cadena y un agente no es la potencia: es quién decide el orden de los pasos. En una cadena lo decides tú al escribirla. En un agente lo decide el modelo en tiempo de ejecución, y lo decide leyendo las descripciones que tú escribiste para cada herramienta. La descripción es el prompt.
01 — La decisión
Cadena o agente
CadenaAgente
Orden de los pasosfijo, lo escribes túdinámico, lo elige el modelo
Llamadas al LLMlas que pongasuna por vuelta del bucle, más la final
Reproduciblesíno del todo
Depurablefácilpor el log de razonamiento

La regla práctica: si puedes dibujar el diagrama de flujo antes de conocer la pregunta del usuario, no necesitas un agente. Un agente es más lento y más caro por diseño — cada decisión cuesta una llamada.

02 — El mecanismo
El bucle ReAct

ReAct = Reason + Act. El modelo no ejecuta nada: escribe texto diciendo qué quiere ejecutar, y el runtime de LangChain lo ejecuta y le devuelve el resultado como más texto.

Quién produce cada línea
ThoughtEl modelo razona en voz alta qué le falta para responder.
ActionEl modelo nombra una herramienta y escribe su entrada.
ObservationEl runtime ejecuta la herramienta y le pega el resultado. El modelo no la ha ejecutado: la ha pedido.
Final AnswerCuando el modelo cree que ya tiene bastante, cierra el bucle.
↺ mientras no haya Final Answer, vuelve a Thought — y por eso existe max_iterations

Dos consecuencias de que todo esto sea texto. Una: el formato importa. Si el modelo se desvía del formato esperado, el parseo falla — de ahí handle_parsing_errors=True y temperature=0. Con creatividad, un agente se rompe. Dos: el bucle puede no terminar solo; max_iterations es el freno de mano, no un ajuste fino.

03 — El material del que decide
La descripción es el prompt

Una herramienta son tres cosas: un nombre, una función y una descripción. El modelo nunca ve tu función; solo ve el nombre y la descripción, y con eso decide.

Tool(
    name="...",
    func=mi_funcion,          # una función de Python normal y corriente
    description="...",        # esto es lo único que el modelo lee para decidir
)

Por eso, cuando un agente ignora una herramienta que debería usar, el sitio donde se arregla no es el código del agente: es la descripción. Una descripción útil dice cuándo usarla y cuándo no, no qué hace por dentro.

DescripciónQué pasa
"Buscar"El modelo adivina. A veces acierta.
"Buscador web, útil para hechos posteriores al corte de entrenamiento; no la uses para cálculos"El modelo tiene un criterio que aplicar.
// escribe las descripciones como si fueran documentación para un becario rápido y literal
Auditoría Dos cosas del montaje que propone el material. Una: initialize_agent y AgentType.ZERO_SHOT_REACT_DESCRIPTION están deprecados desde hace tiempo y con LangChain v1.0 la funcionalidad legacy vive en langchain-classic; el constructor estándar hoy es create_agent (comprobado en la documentación de release de LangChain v1 el 2026-08-30). Dos: el paquete duckduckgo-search que pide el pip install se renombró a ddgs, y hay incidencias abiertas en el repositorio de LangChain por errores de ratelimit al usar DuckDuckGoSearchRun — que tu ejercicio falle no significa necesariamente que tu agente esté mal montado. (La validación numérica de la guía sí está bien: calculé 8848**3 = 692684296192, es decir 6,927 × 10¹¹, y la guía anuncia «aprox 6.9 × 10¹¹».)

Lo que queda por pensar: el log de verbose=True te enseña el Thought del modelo y se lee como si el agente estuviera razonando. Pero ese texto lo genera el mismo modelo que a continuación puede equivocarse de herramienta. ¿Qué te demuestra realmente un Thought que suena bien — que el razonamiento fue correcto, o solo que el modelo sabe escribir razonamientos con buena pinta? ¿Cómo lo comprobarías sin fiarte del log?
Para hacer
Escribe las descripciones antes que el agente

No montes el agente todavía. Escribe primero solo las descripciones de tus tres herramientas, una línea cada una, diciendo cuándo usarla y cuándo no. Luego léelas seguidas y pregúntate si tú, sin ver el código, sabrías elegir entre ellas para «¿cuál es la población de Tokio y cuánto es el 15 %?». Si tú dudas, el modelo también.