LangGraph para agentes de producción: puntos de control, HITL y grafos multiagente
Por qué las cadenas se detienen y reinician en los ciclos, y cómo los nodos, aristas y salvadores de puntos de control de LangGraph hacen que los agentes de producción sean operativos, con revisión humana en el proceso.
Fuentes: LangGraph Explained: Build Production-Ready AI Agents in 2026
¿Qué es LangGraph?
LangGraph es un entorno de ejecución para crear agentes con estado y multi-pasos como grafos explícitos: los nodos realizan tareas, las aristas deciden qué se ejecuta a continuación, y el estado compartido persiste a lo largo de los pasos, incluso después de fallos o pausas humanas.
Hace dos años, muchos “agentes” eran bucles while alrededor de un LLM sin posibilidad de recuperación. Los fallos a mitad de tarea obligaban a reiniciar desde cero. Los grafos convierten la memoria, las ramificaciones y la reanudación en elementos fundamentales.
Por qué las cadenas no eran suficientes
Las cadenas LCEL son ideales para pipelines lineales. Tienen dificultades cuando se necesitan ciclos, enrutamiento condicional, puntos de control duraderos o aprobación humana durante la ejecución. Esos son problemas propios de los grafos.
Conceptos clave: nodos, aristas y estado
- Estado — campos tipados que lleva a cabo la ejecución
- Nodos — funciones que actualizan el estado
from typing import TypedDict, Annotated
from langgraph.graph import StateGraph, END
import operator
# Define your state
class AgentState(TypedDict):
messages: Annotated[list, operator.add]
next_action: str
final_answer: str
from langgraph.graph import StateGraph, END
from langgraph.prebuilt import ToolNode
from langchain_openai import ChatOpenAI
from langchain_core.tools import tool
# 1. Define a tool
@tool
def search_web(query: str) -> str:
"""Search the web for current information."""
# Connect to your actual search API here
return f"Search results for: {query}"
# 2. Define the LLM with tools bound
llm = ChatOpenAI(model="gpt-4o", temperature=0)
tools = [search_web]
llm_with_tools = llm.bind_tools(tools)
# 3. Define node functions
def call_llm(state):
response = llm_with_tools.invoke(state["messages"])
return {"messages": [response]}
def should_continue(state):
last_message = state["messages"][-1]
if last_message.tool_calls:
return "run_tools"
return END
# 4. Build the graph
workflow = StateGraph(AgentState)
workflow.add_node("agent", call_llm)
workflow.add_node("run_tools", ToolNode(tools))
workflow.set_entry_point("agent")
workflow.add_conditional_edges("agent", should_continue)
workflow.add_edge("run_tools", "agent")
# 5. Compile with a checkpointer
from langgraph.checkpoint.sqlite import SqliteSaver
memory = SqliteSaver.from_conn_string("agents.db")
graph = workflow.compile(checkpointer=memory)
# 6. Run with a thread ID for persistent state
config = {"configurable": {"thread_id": "user-123"}}
result = graph.invoke({"messages": [("user", "What is the latest GPT model?")]}, config)
print(result["messages"][-1].content)
# Add a human approval gate before a risky action
workflow.add_node("human_review", interrupt(before="execute_payment"))
pip install langgraph langchain-openai psycopg2-binary
Cómo funciona realmente la gestión de estados
Las actualizaciones se fusionan a través de los reductores. Los reductores mal configurados duplican mensajes o eliminan campos. Considere la elección del reductor como parte de la revisión del esquema.
Primer agente (Python)
Defina el estado → agregue nodos → conecte aristas → compile → invoque con un ID de hilo al usar un salvador.
Intervención humana
Interrumpa antes de que surjan efectos secundarios; reanude con un paquete de aprobación. Esta es la diferencia operativa entre las demostraciones y los agentes en producción.
Patrones multiagente
Las transferencias de supervisores/especialistas, las ramas paralelas y los subgrafos se corresponden perfectamente con nodos nombrados que comparten o tienen estados particionados.
Persistencia y recuperación
Los mecanismos de punto de control respaldados por base de datos sobreviven a los reinicios del proceso. Los salvadores en memoria son solo para pruebas.
Cuándo usar LangGraph
Úsalo cuando el flujo de control es no lineal, se debe pausar o reanudar. Prefiere cadenas más simples para respuestas RAG de un solo uso sin ramificaciones.
Cierre
Los agentes en producción necesitan un estado y aristas explícitos, no soluciones improvisadas. LangGraph es una forma fiable de representar todo esto en código.
Omite el ruido promocional del mercado; el valor real radica en el flujo de control con puntos de control y en HITL. Mantén los tutoriales centrados en estas herramientas básicas.
Instrumenta los eventos de inicio/finalización de los nodos para que las trazas muestren qué rama se ejecutó. Los grafos sin telemetría se convierten en cajas negras a las 2 de la madrugada.
Definiciones de gráficos de versiones junto con las instrucciones. Un cambio de nombre de nodo sin migración interrumpe los hilos reanudados que aún apuntan a nombres antiguos.
Omite el ruido de promociones del mercado; el valor técnico radica en el flujo de control con puntos de verificación y HITL. Mantén los tutoriales centrados en esas primitivas.
Instrumenta los eventos de inicio/finalización de nodos para que las trazas muestren qué rama se ejecutó. Los gráficos sin telemetría se convierten en cajas negras a las 2 de la madrugada.
Definiciones de gráficos de versiones junto con las instrucciones. Un cambio de nombre de nodo sin migración interrumpe los hilos reanudados que aún apuntan a nombres antiguos.
Omite el ruido de promociones del mercado; el valor técnico radica en el flujo de control con puntos de verificación y HITL. Mantén los tutoriales centrados en esas primitivas.
Instrumenta los eventos de inicio/finalización de nodos para que las trazas muestren qué rama se ejecutó. Los gráficos sin telemetría se convierten en cajas negras a las 2 de la madrugada.
Definiciones de gráficos de versiones junto con las instrucciones. Renombrar un nodo sin realizar una migración interrumpe los hilos reanudados que aún apuntan a los nombres antiguos.
Omite el ruido de las promociones del mercado; el valor técnico radica en el flujo de control con puntos de verificación y HITL. Mantén los tutoriales centrados en esas primitivas.
Instrumenta los eventos de inicio/finalización de los nodos para que las trazas muestren qué rama se ejecutó. Los gráficos sin telemetría se convierten en cajas negras a las 2 de la madrugada.
Definiciones de gráficos de versiones junto con las instrucciones. Renombrar un nodo sin realizar una migración interrumpe los hilos reanudados que aún apuntan a los nombres antiguos.
Omite el ruido de las promociones del mercado; el valor técnico radica en el flujo de control con puntos de verificación y HITL. Mantén los tutoriales centrados en esas primitivas.
Instrumenta los eventos de inicio/finalización de los nodos para que las trazas muestren qué rama se ejecutó. Los gráficos sin telemetría se convierten en cajas negras a las 2 de la madrugada.
Definiciones de gráficos de versiones junto con las instrucciones. Renombrar un nodo sin realizar una migración interrumpe los hilos reanudados que aún apuntan a los nombres antiguos.
Omite el ruido de las promociones del mercado; el valor técnico radica en el flujo de control con puntos de verificación y HITL. Mantén los tutoriales centrados en esas primitivas.
Instrumenta los eventos de inicio/finalización de los nodos para que las trazas muestren qué rama se ejecutó. Los gráficos sin telemetría se convierten en cajas negras a las 2 de la madrugada.
Definiciones de gráficos de versiones junto con las instrucciones. Renombrar un nodo sin realizar una migración interrumpe los hilos reanudados que aún apuntan a los nombres antiguos.
Omite el ruido de las promociones del mercado; el valor técnico radica en el flujo de control con puntos de verificación y HITL. Mantén los tutoriales centrados en esas primitivas.
Instrumenta los eventos de inicio/finalización de los nodos para que las trazas muestren qué rama se ejecutó. Los gráficos sin telemetría se convierten en cajas negras a las 2 de la madrugada.
Definiciones de gráficos de versiones junto con las instrucciones. Un cambio de nombre de nodo sin migración interrumpe los hilos reanudados que aún apuntan a nombres antiguos.
Omite el ruido de promociones del mercado; el valor técnico radica en el flujo de control con puntos de verificación y HITL. Mantén los tutoriales centrados en esas primitivas.
Instrumenta los eventos de inicio/finalización de nodos para que las trazas muestren qué rama se ejecutó. Los gráficos sin telemetría se convierten en cajas negras a las 2 de la madrugada.
Definiciones de gráficos de versiones junto con las instrucciones. Un cambio de nombre de nodo sin migración interrumpe los hilos reanudados que aún apuntan a nombres antiguos.
Omite el ruido de promociones del mercado; el valor técnico radica en el flujo de control con puntos de verificación y HITL. Mantén los tutoriales centrados en esas primitivas.
Instrumenta los eventos de inicio/finalización de nodos para que las trazas muestren qué rama se ejecutó. Los gráficos sin telemetría se convierten en cajas negras a las 2 de la madrugada.
Definiciones de gráficos de versiones junto con las instrucciones. Un cambio de nombre de nodo sin migración interrumpe los hilos reanudados que aún apuntan a nombres antiguos.
Omite el ruido de promociones del mercado; el valor técnico radica en el flujo de control con puntos de verificación y HITL. Mantén los tutoriales centrados en esas primitivas.
Instrumenta los eventos de inicio/finalización de nodos para que las trazas muestren qué rama se ejecutó. Los gráficos sin telemetría se convierten en cajas negras a las 2 de la madrugada.
Definiciones de gráficos de versiones junto con las instrucciones. Un cambio de nombre de nodo sin migración interrumpe los hilos reanudados que aún apuntan a nombres antiguos.
Omite el ruido de promociones del mercado; el valor técnico radica en el flujo de control con puntos de verificación y HITL. Mantén los tutoriales centrados en esas primitivas.
Instrumenta los eventos de inicio/finalización de nodos para que las trazas muestren qué rama se ejecutó. Los gráficos sin telemetría se convierten en cajas negras a las 2 de la madrugada.
Definiciones de gráficos de versiones junto con las instrucciones. Un cambio de nombre de nodo sin migración interrumpe los hilos reanudados que aún apuntan a nombres antiguos.
Omite el ruido de promociones del mercado; el valor técnico radica en el flujo de control con puntos de verificación y HITL. Mantén los tutoriales centrados en esas primitivas.
Instrumenta los eventos de inicio/finalización de nodos para que las trazas muestren qué rama se ejecutó. Los gráficos sin telemetría se convierten en cajas negras a las 2 de la madrugada.
Definiciones de gráficos de versiones junto con las instrucciones. Un cambio de nombre de nodo sin migración interrumpe los hilos reanudados que aún apuntan a nombres antiguos.
Omite el ruido de promociones del mercado; el valor técnico radica en el flujo de control con puntos de verificación y HITL. Mantén los tutoriales centrados en esas primitivas.
Instrumenta los eventos de inicio/finalización de nodos para que las trazas muestren qué rama se ejecutó. Los gráficos sin telemetría se convierten en cajas negras a las 2 de la madrugada.
Definiciones de grafos de versiones junto con las instrucciones. Renombrar un nodo sin realizar migración interrumpe los hilos en curso que aún hacen referencia a los nombres antiguos.
Omite el ruido de las promociones del mercado; el valor técnico radica en el flujo de control con puntos de verificación y en HITL. Mantén los tutoriales centrados en esas primitivas.
Asocia cada tipo de incidente en producción a una característica del grafo: tiempos de espera → nodo de reintentos, JSON incorrecto de la herramienta → nodo de validación, anulación por el operador → interrupción.
Los subgrafos ayudan a aislar las instrucciones específicas de cada especialista sin perder ni un solo ID de hilo padre para fines de auditoría.
Evita incluir toda la política empresarial en un único nodo central; divídela para que los fallos puedan atribuirse claramente.
Asocia cada tipo de incidente en producción a una característica del grafo: tiempos de espera → nodo de reintentos, JSON incorrecto de la herramienta → nodo de validación, anulación por el operador → interrupción.
Los subgrafos ayudan a aislar las instrucciones específicas de cada especialista sin perder ni un solo ID de hilo padre para fines de auditoría.
Evite cargar toda la política empresarial en un único nodo central; divídala para que los fallos puedan atribuirse a algo específico.
Asocie cada tipo de incidente en producción con una característica del grafo: tiempos de espera → nodo de intentos repetidos, JSON incorrecto de la herramienta → nodo de validación, anulación por parte del operador → interrupción.
Los subgrafos ayudan a aislar las solicitudes de los especialistas sin perder ni un solo ID de hilo padre para fines de auditoría.
Evite cargar toda la política empresarial en un único nodo central; divídala para que los fallos puedan atribuirse a algo específico.
Asocie cada tipo de incidente en producción con una característica del grafo: tiempos de espera → nodo de intentos repetidos, JSON incorrecto de la herramienta → nodo de validación, anulación por parte del operador → interrupción.
Los subgrafos ayudan a aislar las solicitudes de los especialistas sin perder ni un solo ID de hilo padre para fines de auditoría.
Evite cargar toda la política empresarial en un único nodo central; divídala para que los fallos puedan atribuirse a algo específico.
Asigne a cada tipo de incidente en producción una característica del grafo: tiempos de espera → nodo de reintentos, JSON inválido de la herramienta → nodo de validación, anulación por el operador → interrupción.
Los subgrafos ayudan a aislar las solicitudes de especialistas sin perder ni un solo ID de hilo padre para auditorías.
Evite cargar toda la política empresarial en un único nodo central; divídala para que los fallos puedan atribuirse claramente.
Asigne a cada tipo de incidente en producción una característica del grafo: tiempos de espera → nodo de reintentos, JSON inválido de la herramienta → nodo de validación, anulación por el operador → interrupción.
Los subgrafos ayudan a aislar las solicitudes de especialistas sin perder ni un solo ID de hilo padre para auditorías.
Lecturas relacionadas
- Grafos de Delitos Financieros Multiagentes con LangChain, LangGraph y LangSmith — Enrutamiento por supervisor, verificaciones paralelas, subgrafos, interrupciones, evaluaciones y medidas de control para flujos de trabajo de casos a nivel de investigación.
- Descomponer mensajes humanos con múltiples intenciones en planes de subtareas LangGraph — Los supervisores principales deben analizar las solicitudes humanas complejas en subtareas tipadas para que los equipos de solicitud y búsqueda eviten heredar el tema incorrecto de un mensaje compartido.
- Persistencia de LangGraph: Puntos de control que permiten reanudar y usar HITL — Por qué un estado duradero hace posible las interrupciones, los intentos de repetición y la depuración con viajes en el tiempo.