LangChain Expression Language (LCEL): guía práctica del operador pipe

By Carlos Montiel | Especialista en IA Empresarial
Publicado: 2026-07-28 | Por: Carlos Montiel | Lectura: ~4 minutos

Antes de LCEL, encadenar pasos en LangChain significaba anidar clases y configuraciones. Con el operador pipe, una cadena se lee de izquierda a derecha, literalmente como se piensa.

Qué resuelve LCEL

LCEL es una abstracción de conceptos interesantes de Python en un formato que habilita una capa de código minimalista para construir cadenas de componentes de LangChain. Las cadenas se construyen conectando Runnables con el operador pipe `|`, creando un flujo de datos claro de izquierda a derecha — el operador `|` compone dos Runnables en un RunnableSequence, que a su vez es también un Runnable, permitiendo componer cadenas de cadenas sin límite de anidación conceptual.

Streaming incorporado desde el diseño

LCEL soporta streaming incremental para permitir un tiempo hasta el primer token más rápido desde los modelos de lenguaje, mejorando la capacidad de respuesta percibida. LCEL integra streaming de forma nativa y está diseñado desde el principio pensando en esto — no es una capa agregada después, es parte de la arquitectura base de cómo funciona una cadena.

Fallbacks y reintentos sin tocar cada paso

Usar `.with_fallbacks()` da resiliencia real: si el modelo primario falla, un modelo de respaldo toma el control automáticamente. El comportamiento de reintento y fallback (`.with_retry()`, `.with_fallbacks()`) y el tracing de LangSmith aplican a la cadena compuesta automáticamente, sin tener que tocar cómo están escritos los pasos individuales — agregás resiliencia envolviendo la cadena, no reescribiendo su lógica interna.

Ejemplo de código

from langchain_core.prompts import ChatPromptTemplate from langchain_openai import ChatOpenAI from langchain_core.output_parsers import StrOutputParser prompt = ChatPromptTemplate.from_template("Resumí esto en una frase: {texto}") model = ChatOpenAI(model="gpt-4o-mini") parser = StrOutputParser() cadena = prompt | model | parser # Sync print(cadena.invoke({"texto": "..."})) # Streaming for chunk in cadena.stream({"texto": "..."}): print(chunk, end="", flush=True) # Con fallback a un modelo de respaldo cadena_resiliente = cadena.with_fallbacks([cadena_con_modelo_backup])

Ejecución síncrona y asíncrona sin reescribir nada

LCEL simplifica la creación de cadenas complejas de operaciones, permitiendo tanto ejecución síncrona como asíncrona mientras soporta funciones avanzadas como streaming, reintentos, y fallbacks — la misma cadena definida con `.invoke()` funciona con `.ainvoke()` para el equivalente asíncrono, sin necesitar dos implementaciones separadas.

Carlos Montiel
Arquitecto de Soluciones IA Empresarial
Especialista en LLMs, Agentes y Orquestación
guatemalia.com/#contacto · info@guatemalia.com

¿Necesitas implementar IA en tu empresa?

Carlos Montiel es arquitecto de soluciones IA empresarial. Implementa LLMs, Agentes, RAG y orquestadores en empresas de Guatemala y Latinoamérica. Contáctalo para una consultoría.

Contactar a Carlos Montiel

info@guatemalia.com