LCEL — LangChain Expression Language

Compose chains with the pipe operator, use RunnableParallel for concurrent steps, add fallbacks, and stream outputs.

Intermediate · 16 min read

LangChain Expression Language (LCEL)

LCEL uses Python's | pipe operator to chain Runnables into pipelines with streaming, batching, parallelism, and fallbacks built in.

from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langchain_core.runnables import RunnableParallel, RunnablePassthrough

llm = ChatOpenAI(model="gpt-4o-mini")

# 1. Basic chain
chain = (
    ChatPromptTemplate.from_messages([("human", "Summarize: {text}")])
    | llm | StrOutputParser()
)

# 2. Streaming
for chunk in chain.stream({"text": "Python is great for data science..."}):
    print(chunk, end="", flush=True)

# 3. Batch
results = chain.batch([{"text": "Text 1..."}, {"text": "Text 2..."}])

# 4. Parallel — run multiple chains concurrently
summary_chain  = ChatPromptTemplate.from_messages([("human", "Summarize in 1 sentence: {text}")]) | llm | StrOutputParser()
keywords_chain = ChatPromptTemplate.from_messages([("human", "Extract 5 keywords: {text}")]) | llm | StrOutputParser()

parallel = RunnableParallel({"summary": summary_chain, "keywords": keywords_chain, "original": RunnablePassthrough()})
result = parallel.invoke({"text": "Machine learning is a subset of AI..."})
print(result["summary"])
print(result["keywords"])

Part of the LangChain, LangGraph & Vector DBs series on Tekivex. Browse all tutorials or explore our open-source products.