Curso para Crear Agentes de AI con LangGraph

Integración de LLM en grafos para agentes que razonan

Curso para Crear Agentes de AI con LangGraph

Contenido del curso

Integración de LLM en grafos para agentes que razonan

Resumen

Convierte un flujo de datos en un agente que razona: integra un large language model en un grafo con LangGraph y orquesta decisiones de forma autónoma. Este enfoque combina memoria compartida, hilos y estado persistente para que los nodos no solo procesen datos, sino que piensen y actúen según el contexto acumulado.

¿Cómo convertir un flujo de datos en un agente que razona con LangGraph y LangChain?

El punto de partida es un flujo de datos sin “cerebro”: start → node1 → end. La clave es inyectar un large language model en el grafo para que el agente decida, ramifique, haga ciclos y retroceda cuando sea necesario. Puedes conectar modelos con LangChain, SDK nativo o Llama Index; lo importante es que LangGraph ejecute su motor de grafos y mantenga el estado.

  • De proceso a inteligencia: pasar de transformar datos a razonar y tomar acciones.
  • Nodos con estado: cada nodo puede leer y escribir en el estado compartido.
  • Memoria viva por hilo: el contexto se conserva mientras mantengas el mismo ID de hilo.

¿Qué pasos de código integran el LLM y actualizan el estado compartido?

Se define el modelo, se ajusta la temperatura y se reescribe la lógica del nodo para trabajar con un new_state que consolida cambios y mensajes antes de devolver el return.

¿Cómo configurar el modelo y su temperatura?

Se inicializa el modelo con temperatura = 1 y se prepara para la invocación.

# Inicialización del modelo (ejemplo mínimo) llm = init_model(temperature=1)
  • Temperatura 1: respuestas más creativas y variadas.
  • Invocación: se llamará al modelo con el historial y el mensaje actual.

¿Cómo cambia la lógica del nodo con new state?

Se crea un new_state (diccionario) y se aplica una lógica simple basada en si existe un nombre del usuario.

import random def node1(state): new_state = {} # Si no hay nombre, asígnalo; si ya hay, actualiza edad aleatoria. if not state.get("customer_name"): new_state["customer_name"] = "John Du" # valor capturado/derivado. else: new_state["my_age"] = random.randint(18, 80) # ...luego se añadirá la parte de mensajes. return new_state
  • customer_name: primero se captura y guarda.
  • my_age: se asigna solo si ya existe un nombre, usando un número aleatorio.

¿Cómo se unen mensajes y se persisten en la memoria?

Se toma el historial de mensajes del estado, se agrega la nueva respuesta de la AI y se guarda en el new_state. Al devolverlo, LangGraph actualizará la memoria compartida.

def node1(state): new_state = {} # Lógica de nombre/edad como antes... # ... # Historial existente y nueva respuesta de AI. history = state.get("messages", []) ai_reply = {"role": "ai", "content": "Hola, estoy aquí para ayudarte."} # Unir *arrays*: historial + [nueva respuesta]. new_state["messages"] = history + [ai_reply] return new_state
  • Unión de arrays: se usa history + [mensaje_ai].
  • Persistencia: el historial crece con cada intercambio.

¿Cómo funcionan los hilos, la memoria compartida y la interfaz de LangGraph Studio?

Al crear un nuevo hilo, la memoria arranca en limpio; al mantener el mismo hilo, el estado persiste, incluso si recargas la UI. En LangGraph Studio es visible el view state y puedes debuggear el grafo, revisar el JSON del estado y chatear desde una interfaz de chat cuando el agente es de tipo “mensajes”.

¿Qué es un hilo y cómo persiste el estado?

  • Un hilo conserva: estado, historial de mensajes y valores como customer_name.
  • Mientras uses el mismo ID de hilo, la memoria compartida se mantiene.
  • Ejemplo: tras “Hola, ¿cómo estás?” el agente responde “Hola, estoy aquí para ayudarte” y guarda el customer_name = John Du; luego, al decir “me llamo Nicolás”, el sistema recuerda y puede asignar my_age.

¿Qué viste en el historial de mensajes y arrays vacíos?

  • Puede aparecer un mensaje “vacío” en el historial: a veces LangGraph/LangChain envían “reacciones” como “estoy pensando” o “escribiendo”.
  • Puedes inspeccionar el estado en vista colapsada o de detalle, e incluso como JSON para entender cada paso.

¿Cómo aprovechar el prompt y la memoria compartida?

  • Mejora el system prompt: inyecta el nombre capturado (por ejemplo, “Nicolás”) para que el modelo recuerde y responda con contexto.

  • Aplica prompting basado en el estado: cualquier agente puede leer el estado compartido y continuar el trabajo desde allí.

  • Más adelante, podrás montar persistencia propia y exponer una API con FastAPI.

  • Reto 1: crea dos hilos en LangGraph Studio y verifica que el historial y la memoria compartida se mantengan por hilo.

  • Reto 2: configura un system prompt que use datos del estado (por ejemplo, el nombre) para personalizar respuestas.

¿Te gustaría compartir cómo inyectarías el nombre del usuario en el system prompt o qué otros campos guardarías en el estado para tus agentes?