iniciante35 minutosLección 8 de 10

Cadenas Secuenciales

Aprende patrones de ejecución secuencial en LangGraph, pasando estado entre nodos y usando reductores de estado para gestión avanzada de estado.

Cadenas Secuenciales

Aunque LangGraph soporta topologías de grafo complejas, muchas aplicaciones se construyen sobre cadenas secuenciales simples — una secuencia lineal de nodos donde cada paso construye sobre el anterior.


Ejecución Secuencial en LangGraph

Una cadena secuencial es un pipeline lineal: cada nodo se ejecuta después de que el anterior se completa, pasando estado a lo largo del camino.

python
from langgraph.graph import StateGraph, START, END from typing_extensions import TypedDict class PipelineState(TypedDict): input_text: str cleaned: str analyzed: str result: str def clean(state: PipelineState) -> dict: return {"cleaned": state["input_text"].strip().lower()} def analyze(state: PipelineState) -> dict: analysis = f"Análisis de '{state['cleaned']}': {len(state['cleaned'])} caracteres" return {"analyzed": analysis} def format(state: PipelineState) -> dict: return {"result": f"=== RESULTADO ===\n{state['analyzed']}\n=== FIN ==="} builder = StateGraph(PipelineState) builder.add_node("clean", clean) builder.add_node("analyze", analyze) builder.add_node("format", format) builder.add_edge(START, "clean") builder.add_edge("clean", "analyze") builder.add_edge("analyze", "format") builder.add_edge("format", END) app = builder.compile()
ℹ️Note

Cada nodo solo lee los campos que necesita del estado y escribe los campos que produce. La topología del pipeline garantiza que se ejecuten en el orden correcto.


Pasando Estado Entre Nodos

El estado fluye automáticamente. Cuando el nodo A escribe {"cleaned": valor}, el nodo B puede leer state["cleaned"].

python
def node_a(state: State) -> dict: return {"intermediate": "Procesado por A"} def node_b(state: State) -> dict: intermediate = state["intermediate"] return {"result": f"B recibió: {intermediate}"}

Reglas de Flujo de Estado

EscenarioComportamiento
A escribe clave X, B lee XB ve el valor de A
B escribe clave X después de AEl valor de A se sobrescribe
C escribe clave Y, D no toca YD ve el valor de C para Y
Ningún nodo escribe clave YY mantiene su valor inicial

Reductores de Estado

Por defecto, cuando un nodo escribe en una clave de estado, reemplaza el valor. Los reductores cambian este comportamiento.

python
from typing import Annotated from typing_extensions import TypedDict from operator import add class AccumState(TypedDict): messages: Annotated[list, add] total: int def step_1(state: AccumState) -> dict: return {"messages": ["Paso 1 completo"], "total": 10} def step_2(state: AccumState) -> dict: return {"messages": ["Paso 2 completo"], "total": state["total"] + 20} # Resultado: messages = ["Paso 1 completo", "Paso 2 completo"] # Resultado: total = 30
⚠️Warning

El reductor add solo funciona con listas. Usa el operador + de Python, así que ambos lados deben ser listas.


Fan-Out y Fan-In

python
def validate(state: State) -> dict: return {"validated": True} def search_web(state: State) -> dict: return {"web_results": "..."} def search_db(state: State) -> dict: return {"db_results": "..."} def merge(state: State) -> dict: combined = f"Web: {state['web_results']}\nDB: {state['db_results']}" return {"merged": combined} builder.add_edge(START, "validate") builder.add_edge("validate", "search_web") builder.add_edge("validate", "search_db") builder.add_edge("search_web", "merge") builder.add_edge("search_db", "merge") builder.add_edge("merge", END)
Success

Fan-out con ramas paralelas, luego fan-in para fusionar resultados. Este patrón combina el poder de cadenas secuenciales con procesamiento paralelo.


Comparación: LangChain vs LangGraph

AspectoLangChain ChainLangGraph Secuencial
Definiciónchain = A | B | Cadd_edge(A, B); add_edge(B, C)
Paso de estadoCada salida es la siguiente entradaObjeto de estado compartido
Acceso intermedioPerdido tras ejecutar la chainDisponible en el estado
DepuraciónDifícilFácil (streaming por nodo)
Añadir pasosRequiere reconstruir la chainSolo añadir edge
Recuperación de erroresLa chain falla completamenteManejo por nodo

Preguntas de Práctica

Practice Question

¿Cómo fluye el estado en una cadena secuencial de LangGraph?

Practice Question

¿Cuál es el comportamiento por defecto cuando dos nodos escriben en la misma clave de estado?

Practice Question

¿Cómo haces que un campo de lista se anexe en lugar de reemplazar?

Practice Question

¿Qué sucede cuando dos aristas apuntan al mismo nodo (fan-in)?

Practice Question

En una cadena secuencial, ¿cuándo comienza el siguiente nodo?

Practice Question

¿Qué ventaja tiene una cadena secuencial de LangGraph sobre una chain pipe de LangChain?

Practice Question

Si el nodo A escribe 'key1' y el nodo B escribe 'key2', ¿puede el nodo C leer ambos?

Practice Question

¿Qué operador usa el reductor 'add' para listas?


Success

Puntos Clave

  • Las cadenas secuenciales son pipelines lineales: cada nodo se ejecuta después del anterior
  • El estado pasa automáticamente entre nodos a través del objeto de estado compartido
  • La actualización de estado por defecto es reemplazar; usa Annotated[list, add] para anexar
  • Fan-out permite paralelización; fan-in sincroniza ramas paralelas
  • Las cadenas secuenciales en LangGraph ofrecen mejor depuración que las chains pipe de LangChain
  • Los reductores de estado controlan cómo se combinan múltiples escrituras en la misma clave
  • Añade puntos de enrutamiento condicional para injectar lógica de decisión
Progreso80%