Método LCEL en LangChain

Después de ver los componentes de LangChain. Ahora toca entender cómo se conectan realmente para construir aplicaciones. Aquí entra el LangChain Expression Language (LCEL): el enfoque moderno y recomendado para diseñar flujos de trabajo con LLMs.

Construir una cadena con LCEL

LCEL es un patrón de construcción que permite conectar componentes mediante el operador de tubería (|). Es una forma declarativa de construir pipelines donde los datos fluyen de un componente a otro de forma explícita y legible.

LCEL aporta:

  • Mayor componibilidad
  • Flujo de datos más claro
  • Más flexibilidad
  • Código más mantenible

Un flujo típico sigue estos pasos:

  1. Definir una plantilla con variables ({})
  2. Crear una instancia de prompt
  3. Conectar componentes con |
  4. Ejecutar la cadena con inputs

El núcleo: el operador de tubería (|)

El operador | Conecta componentes en secuencia.

prompt | modelo | parser
  1. Se construye el prompt
  2. Se envía al modelo
  3. Se procesa la salida

Runnables: las piezas básicas

En LCEL todo se basa en runnables. Estas son interfaces que permiten que cualquier componente sea conectable dentro de un pipeline. Ejemplos:

  • Modelos (LLM)
  • Funciones
  • Parsers
  • Recuperadores

Tipos de composición

Ejecución secuencial (RunnableSequence)

Cada paso depende del anterior:

Entrada → Paso 1 → Paso 2 → Salida

En LCEL:

paso1 | paso2

Ejecución paralela (RunnableParallel)

Un mismo input se procesa en múltiples ramas al mismo tiempo.

{
  "summary": tarea1,
  "translation": tarea2,
  "sentiment": tarea3
}

Coerción automática de tipos

Una de las grandes ventajas de LCEL. Es que convierte automáticamente:

  • Diccionarios → RunnableParallel
  • Funciones → RunnableLambda

Por lo que no necesitas crear manualmente cada componente.

Ejemplo completo: pipeline simple

Caso: generar un contenido:

formatear_prompt | modelo | parser

Qué ocurre

  1. Una función formatea el prompt (RunnableLambda)
  2. El modelo genera la respuesta
  3. El parser limpia o estructura la salida

Ejemplo: procesamiento paralelo

Entrada:

"El producto es bueno pero llegó tarde"

Pipeline:

{
  "summary": prompt1 | modelo,
  "translation": prompt2 | modelo,
  "sentiment": prompt3 | modelo
}

Resultado

  • Resumen
  • Traducción
  • Sentimiento

Todo en una sola ejecución.

Flujo interno de datos

LCEL hace explícito el flujo:

Input → Transformación → Modelo → Output → Post-procesado

Esto mejora:

  • Debugging
  • Escalabilidad
  • Control

Ventajas clave de LCEL

  • Claridad: El flujo se entiende leyendo el código.
  • Reutilización: Puedes crear componentes reutilizables y pipelines estándar
  • Flexibilidad: secuencias, paralelismo y transformaciones
  • Capacidades avanzadas: LCEL permite ejecución paralela, soporte asíncrono, streaming y trazabilidad automática

Cuándo usar LCEL

Ideal para:

  • Flujos de prompts
  • Automatización de tareas
  • Sistemas modulares
  • Procesamiento de texto

No ideal para:

  • Flujos con lógica compleja (condicionales, estados, etc.). En ese caso, usar: LangGraph. Pero LCEL sigue siendo la base dentro de cada nodo.