LangGraph: Marco para agentes de IA escalables y autónomos
En el ámbito de la arquitectura de software moderna, el paradigma está cambiando de las cadenas de ejecución lineales a gráficos dinámicos y cíclicos. Para los directores de tecnología y ingenieros senior, esta distinción es crucial. Si bien las "cadenas" tradicionales (como las de las primeras versiones de LangChain) son suficientes para tareas simples de entrada-salida, el desarrollo de "agentes de IA" personalizados de nivel empresarial requiere una arquitectura más robusta: una que soporte bucles, persistencia y gestión compleja del estado.desarrollo de "agentes de IA" personalizados de nivel empresarialrequiere una arquitectura más robusta: una que soporte bucles, persistencia y gestión compleja del estado.
Este artículo ofrece un análisis técnico detallado sobre la creación de un marco de agentes autónomos utilizando LangGraphLangGraph. A diferencia del antiguo AgentExecutor
En4Geeks<s3>desarrolladores de agentes de IA personalizadosDesarrollo de agentes de IA personalizados, ayudamos a las empresas a superar los "prototipos de juguete" y a implementar sistemas de IA escalables y tolerantes a fallos.
Equipo de Ingeniería de Software Compartido Bajo Demanda, mediante Suscripción.
Acceda a un equipo flexible y compartido de ingeniería de software bajo demanda a través de una suscripción mensual predecible. Desarrolladores, diseñadores, ingenieros de control de calidad y un gerente de proyecto gratuito le ayudan a construir MVPs, escalar productos e innovar con tecnologías modernas como React, Node.js y más.
La Arquitectura: ¿Por qué usar Gráficos?
Los agentes autónomos difieren de los simples chatbots porque poseen "capacidad de decisión"—la habilidad de determinar qué hacer a continuación según el estado actual.
Una arquitectura basada en grafos modela esto perfectamente:
- Nodos: Representan unidades de trabajo (por ejemplo, una llamada a un LLM, la ejecución de una herramienta o un paso de revisión humana).
- Aristas: Representan el flujo de control.
- Estado: Una estructura de datos compartida que se pasa entre los nodos, manteniendo el contexto a lo largo del ciclo de vida del grafo.
Esta estructura permite la ejecución de procesos cíclicos. Si la salida de una herramienta de un agente es insuficiente, el gráfico puede redirigir la ejecución de nuevo al nodo de razonamiento para intentar de nuevo, en lugar de fallar linealmente.. Si la salida de la herramienta de un agente es insuficiente, el gráfico puede redirigir la ejecución de nuevo al nodo de razonamiento para intentar de nuevo, en lugar de fallar de forma lineal.
Implementación paso a paso
Crearemos un agente de investigación capaz de buscar de forma iterativa en la web y refinar su respuesta hasta que se cumpla una condición.
1. Requisitos y configuración del entorno
Asegúrese de tener las bibliotecas necesarias instaladas. Utilizaremos langgraph, langchain, y tavily-python para las capacidades de búsqueda.
pip install langgraph langchain langchain-openai tavily-python
2. Definir el estado del Agente
El Estado es la base de tu grafo. Es un TypedDict (o modelo de Pydantic) que contiene las claves disponibles para todos los nodos.
from typing import TypedDict, Annotated, List, Union
from langchain_core.messages import BaseMessage
import operator
class AgentState(TypedDict):
# 'messages' tracks the conversation history.
# operator.add ensures new messages are appended, not overwritten.
messages: Annotated[List[BaseMessage], operator.add]
# We can add custom keys for tracking specific logic
next_step: str
3. Creando los nodos
Necesitamos dos nodos principales: uno para el Agente(Razonamiento basado en LLM) y uno paraHerramientas (ejecución).
from langchain_openai import ChatOpenAI
from langchain_community.tools.tavily_search import TavilySearchResults
from langchain_core.messages import ToolMessage
from langgraph.prebuilt import ToolNode
# Initialize Tools and LLM
tools = [TavilySearchResults(max_results=1)]
tool_node = ToolNode(tools)
# Bind tools to the model so it knows it can call them
model = ChatOpenAI(model="gpt-4o", temperature=0).bind_tools(tools)
# Define the Agent Node
def agent_node(state: AgentState):
messages = state['messages']
response = model.invoke(messages)
# The response is returned as a dict to update the 'messages' key in State
return {"messages": [response]}
4. Definición de lógica condicional (Condiciones)
Aquí es donde reside la "autonomía". Definimos una función para inspeccionar el último mensaje. Si el modelo de lenguaje decide llamar a una herramienta, la dirigimos a herramientas FIN.
from typing import Literal
from langgraph.graph import END
def should_continue(state: AgentState) -> Literal["tools", END]:
messages = state['messages']
last_message = messages[-1]
# If the LLM generated tool calls, route to the tool node
if last_message.tool_calls:
return "tools"
# Otherwise, end the workflow
return END
Equipo de Ingeniería de Software Compartido bajo Demanda, por Suscripción.
Acceda a un equipo flexible y compartido de ingeniería de software bajo demanda a través de una suscripción mensual predecible. Desarrolladores, diseñadores, ingenieros de control de calidad y un gerente de proyecto gratuito le ayudan a crear MVPs, escalar productos e innovar con tecnologías modernas como React, Node.js y más.
5. Compilar el grafo
Finalmente, ensamblamos el gráfico. Este paso de compilación valida la estructura y prepara el archivo ejecutable.
from langgraph.graph import StateGraph, START
# Initialize the Graph
workflow = StateGraph(AgentState)
# Add Nodes
workflow.add_node("agent", agent_node)
workflow.add_node("tools", tool_node)
# Set Entry Point
workflow.add_edge(START, "agent")
# Add Conditional Edge
workflow.add_conditional_edges(
"agent",
should_continue,
{
"tools": "tools",
END: END
}
)
# Add Edge from Tools back to Agent (The Loop)
workflow.add_edge("tools", "agent")
# Compile
app = workflow.compile()
Funcionalidades Avanzadas: Persistencia y Memoria
Para el desarrollo de agentes de IA personalizados para producción, la memoria transitoria rara vez es suficiente. Necesita hilos de ejecución prolongados que persistan a través de las sesiones del usuario. LangGraph lo maneja a través de<s3>puntos de controlverificadores.
Al añadir un punto de control, el estado del grafo se guarda después de la ejecución de cada nodo. Esto permite "viajar en el tiempo" (reanudar desde un estado anterior) o implementar flujos de trabajo "con intervención humana" donde un agente se detiene para obtener la aprobación antes de ejecutar acciones sensibles.Human-in-the-Loop workflows donde un agente pausa para la aprobación antes de ejecutar acciones sensibles.
from langgraph.checkpoint.memory import MemorySaver
# Initialize checkpointer
memory = MemorySaver()
# Compile with checkpointer
app = workflow.compile(checkpointer=memory)
# Execute with a thread_id to maintain session state
thread = {"configurable": {"thread_id": "1"}}
inputs = {"messages": [("user", "What is the current stock price of Apple?")]}
for event in app.stream(inputs, thread):
for key, value in event.items():
print(f"Node '{key}' output: {value}")
Conclusión
Pasar de estructuras simples a arquitecturas basadas en grafos permite a los ingenieros construir agentes que sean resilientes, introspectivos y capaces de resolver problemas complejos. Tanto si está automatizando flujos de trabajo empresariales como si está desarrollando productos de IA generativa, controlar el bucle de estado es fundamental.
Para las organizaciones que buscan acelerar este proceso,4Geeks ofrece el desarrollo de agentes de inteligencia artificial personalizados especializado.. Asistimos a las empresas en el diseño e implementación de estas sofisticadas arquitecturas de inteligencia artificial, asegurando que su transición a sistemas autónomos sea tanto estratégica como técnicamente sólida.
Equipo de Ingeniería de Software Compartido Bajo Demanda, Por Suscripción.
Acceda a un equipo flexible y compartido de ingeniería de software bajo demanda a través de una suscripción mensual predecible. Desarrolladores, diseñadores, ingenieros de control de calidad y un gerente de proyecto gratuito le ayudan a crear MVPs, escalar productos e innovar con tecnologías modernas como React, Node.js y más.
Preguntas frecuentes
¿Por qué deberían los desarrolladores elegir LangGraph en lugar de cadenas lineales para el desarrollo de agentes de IA personalizados?
Las cadenas de ejecución lineales son adecuadas para tareas simples y secuenciales de entrada-salida, pero a menudo carecen de la flexibilidad necesaria para aplicaciones empresariales complejas. LangGraph, por el contrario, utiliza una arquitectura de grafo cíclica que soporta bucles, razonamiento iterativo y corrección de errores dinámica. Esto permite a los desarrolladores construir agentes robustos y autónomos capaces de revisar pasos y refinar respuestas en función de su estado actual, en lugar de fallar linealmente.
¿Cuáles son los componentes clave de la arquitectura de LangGraph y cómo funcionan?
La arquitectura de LangGraph se basa en tres elementos principales: Nodos, Aristas, y Estado.
- Nodos representan unidades de trabajo específicas, como una llamada a un LLM, la ejecución de una herramienta o un paso de revisión humana.
- Aristas definen la lógica de control, determinando la ruta que sigue el agente entre los nodos.
- Estado es una estructura de datos compartida que persiste el contexto a lo largo de toda la vida del gráfico, permitiendo que el agente mantenga la memoria y tome decisiones informadas basadas en las acciones anteriores.
¿Cómo maneja LangGraph la persistencia y la memoria para flujos de trabajo de IA de larga duración?
Para soportar interacciones complejas y múltiples turnos, así como hilos de larga duración, LangGraph utiliza "puntos de control". Esta función guarda el estado del gráfico después de la ejecución de cada nodo, creando efectivamente una memoria persistente de la sesión. Esta capacidad es esencial para implementar funciones avanzadas como "viaje en el tiempo" (reanudar desde un estado específico del pasado) y "Flujos de trabajo con intervención humana", donde un agente puede pausar su ejecución para esperar la aprobación del usuario antes de continuar.