Contenido del curso
El Núcleo del Agente: Estado y LLMs
Lógica y Estructura de Nodos
Agentes ReAct
Grafos Avanzados y Colaboración
- 17

Enrutamiento de agentes con conditional edge en LangGraph
09:49 min - 18

Routing inteligente con LLM para derivar conversaciones automáticamente
22:14 min - 19

Paralelización de nodos en agentes con LangGraph
06:58 min - 20

Desarrollo de un agente de code review con análisis paralelo
15:47 min - 21

Patrón orchestrator para selección dinámica de nodos en paralelo
16:31 min - 22

Evaluator Optimizer: ciclos de autocrítica para agentes de IA
12:48 min
Puesta en Producción
Memoria compartida entre nodos en LangGraph
Resumen
LangGraph organiza agentes de inteligencia artificial como un grafo donde cada nodo accede a una memoria compartida llamada estado. Si estás construyendo agentes que necesitan recordar información, ejecutar acciones y coordinarse entre sí, entender este flujo es tu primer paso.
¿Qué es un grafo en LangGraph y por qué importa?
LangGraph trabaja con una arquitectura de nodos conectados por edges. Tienes un nodo inicial (Start), uno o varios nodos intermedios y un nodo final (End). Cada nodo puede ser un Large Language Model, un retrieval que trae información extra (por ejemplo, de un PDF), una memoria o tools que dan manos al cerebro para ejecutar acciones [1:00].
Esta estructura te permite orquestar entradas y salidas que no necesariamente son chats. Pueden ser archivos, mensajes o cualquier otro input. La gracia es que todos los nodos comparten un mismo estado.
¿Qué es un nodo en LangGraph? Es una función de Python que recibe el estado compartido, ejecuta lógica y devuelve la parte del estado que quiere actualizar.
¿Cómo se define el estado compartido?
El estado en LangGraph se gestiona como un diccionario tipado de Python. Para tiparlo correctamente importas TypedDict desde typing y declaras las claves que vas a compartir entre nodos [4:30].
Un ejemplo concreto del flujo:
- Defines una clase
Statecon campos comocustomer_name: strymy_age: int. - Inicializas el estado vacío y accedes a sus valores con
.get()para evitar errores. - Si intentas leer una clave inexistente sin
.get(), Python lanza un error porque el diccionario está vacío.
Usar .get() con un valor por defecto es la práctica recomendada. Te da un fallback y evita que el programa se rompa cuando una variable aún no ha sido asignada.
¿Cómo creas y conectas nodos en LangGraph?
Un nodo se define como una función de Python que recibe el estado y devuelve un diccionario con los cambios. Aquí entra una buena práctica clave: devuelve solo lo que estás actualizando, no el estado completo [6:45].
Si tu estado tiene 10 o 20 variables y devuelves todo siempre, LangGraph intentará reconciliar cada campo con los demás nodos del grafo. Devolver únicamente el delta es más limpio y eficiente.
¿Cómo se ensambla el grafo?
Una vez tienes tus funciones, importas desde LangGraph tres piezas: StateGraph, START y END. El proceso es:
- Creas un builder con
StateGraph(State)pasándole la definición del estado. - Registras nodos con
builder.add_node("node_one", node_one), donde la convención es usar el mismo nombre de la función. - Conectas con
add_edge(START, "node_one")y luegoadd_edge("node_one", END). - Llamas a
builder.compile()y obtienes tu agente listo.
¿Qué es un edge en LangGraph? Es la conexión entre dos nodos del grafo. Define el orden de ejecución: desde dónde sale el flujo y hacia dónde llega.
¿Cómo visualizar el grafo sin depender de PNG?
LangGraph ofrece varios formatos para dibujar el grafo. El más común es Mermaid PNG, pero el servicio puede fallar y bloquear tu flujo. Una alternativa rápida y confiable es el formato ASCII, que se renderiza directo en tu notebook [9:50].
Para usar ASCII necesitas instalar la dependencia grandalf como paquete de desarrollo. Una vez instalada, ejecutas la visualización ASCII y ves el grafo con su Start, su nodo intermedio y su End conectados por edges.
Esto te permite avanzar sin pelearte con visualizadores externos como LangGraph Studio, aunque ese también es una opción válida cuando quieres ver el grafo de forma más estética.
¿Cómo actualizar el estado con lógica condicional?
La función principal de un nodo es actualizar el estado. Puedes meter lógica condicional dentro de la función para decidir qué campo modificar según lo que ya exista en la memoria compartida.
En el ejemplo trabajado:
- Si
customer_nameno existe, el nodo lo asigna a"John Doe". - Si
customer_nameya tiene valor, el nodo actualizamy_agecon un número. - Si ninguna condición aplica, devuelves un diccionario vacío
{}y el estado no cambia.
Cuando ejecutas esto en LangGraph Studio, puedes pasar valores iniciales al estado desde la interfaz gráfica. Por ejemplo, defines customer_name = "Nicolás Molina" y el nodo entra por la rama que actualiza my_age.
¿Por qué devolver solo el campo actualizado y no todo el estado? Porque LangGraph reconcilia automáticamente los cambios con el resto del grafo. Devolver todo el estado obliga al sistema a procesar variables que no cambiaron y puede generar conflictos cuando varios nodos escriben en paralelo.
Reto: extiende tu estado
Ahora te toca a ti. Tu estado actual tiene dos variables: customer_name y my_age. Agrega una tercera, por ejemplo un array, e intenta hacer push de elementos desde node_one según alguna condición. Modifica el estado y observa cómo se refleja en el debugger.
¿Qué variable agregaste y cómo decidiste cuándo actualizarla? Cuéntame en los comentarios.