目录
[二、什么是 LCEL](#二、什么是 LCEL)
[三、为什么需要 LCEL](#三、为什么需要 LCEL)
[四、LCEL 的核心语法](#四、LCEL 的核心语法)
[五、第一个 LCEL 示例](#五、第一个 LCEL 示例)
[七、LCEL 的本质](#七、LCEL 的本质)
[八、Runnable:LCEL 的核心接口](#八、Runnable:LCEL 的核心接口)
[十、并行执行 RunnableParallel](#十、并行执行 RunnableParallel)
[十二、LCEL 在 RAG 中的应用](#十二、LCEL 在 RAG 中的应用)
[十四、LCEL 与传统 LangChain 对比](#十四、LCEL 与传统 LangChain 对比)
[LCEL 写法](#LCEL 写法)
[十五、LCEL 与 LangGraph 的关系](#十五、LCEL 与 LangGraph 的关系)
[十六、LCEL 的优势](#十六、LCEL 的优势)
[与 LangChain 深度融合](#与 LangChain 深度融合)
[什么是 LCEL?](#什么是 LCEL?)
[LCEL 核心操作符是什么?](#LCEL 核心操作符是什么?)
[LCEL 底层依赖什么?](#LCEL 底层依赖什么?)
[LCEL 和 LangGraph 有什么区别?](#LCEL 和 LangGraph 有什么区别?)
一、前言
随着大语言模型(LLM)的快速发展,越来越多开发者开始构建自己的 AI 应用。
例如:
智能客服
RAG知识库
AI助手
代码生成工具
数据分析助手
在早期的 LangChain 开发中,我们经常会写出这样的代码:
python
prompt = PromptTemplate(...)
llm = ChatOpenAI(...)
parser = StrOutputParser()
result = parser.invoke(
llm.invoke(
prompt.invoke(
{"topic":"人工智能"}
)
)
)
虽然功能可以实现,但存在明显问题:
代码嵌套严重
可读性差
维护困难
扩展复杂
于是 LangChain 团队推出了:
LCEL
全称:
LangChain Expression Language
即:
LangChain 表达式语言
它的目标只有一个:
用更简洁、更优雅的方式构建 LLM 应用。
二、什么是 LCEL
LCEL 是 LangChain 官方推出的一套声明式编排语言。
核心思想:
把多个组件像管道一样连接起来
例如:
Prompt
↓
LLM
↓
OutputParser
传统代码:
python
result = parser.invoke(
llm.invoke(
prompt.invoke(
{"topic":"AI"}
)
)
)
LCEL:
chain = prompt | llm | parser
直接变成:
流水线
形式。
三、为什么需要 LCEL
在 AI 应用开发中,一个请求往往需要经过多个步骤。
例如:
用户问题
↓
Prompt模板
↓
大模型
↓
结果解析
↓
输出
架构:

如果使用传统方式:
每增加一步
就会多一层嵌套
代码会越来越难维护。
LCEL 则通过:
管道表达式
解决这一问题。
四、LCEL 的核心语法
LCEL 最重要的操作符:
|
即:
Pipe(管道)
类似 Linux:
cat log.txt | grep ERROR
含义:
前一个组件的输出
作为下一个组件的输入
五、第一个 LCEL 示例
安装依赖:
bash
pip install langchain
pip install langchain-openai
示例:
python
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
llm = ChatOpenAI()
prompt = ChatPromptTemplate.from_template(
"请介绍一下{topic}"
)
chain = prompt | llm
result = chain.invoke(
{"topic":"机器学习"}
)
print(result.content)
执行流程:

六、加入输出解析器
默认返回:
AIMessage(...)
很多时候我们只需要:
字符串
此时可以加入:
StrOutputParser
代码:
python
from langchain_core.output_parsers import (
StrOutputParser
)
chain = (
prompt
| llm
| StrOutputParser()
)
执行:
python
result = chain.invoke(
{"topic":"深度学习"}
)
print(result)
架构:

七、LCEL 的本质
实际上:
prompt | llm | parser
背后等价于:
python
parser.invoke(
llm.invoke(
prompt.invoke(input)
)
)
只是:
隐藏了复杂调用
提高了可读性。
八、Runnable:LCEL 的核心接口
LCEL 底层依赖:
Runnable
几乎所有组件都实现了:
Runnable
包括:
PromptTemplate
ChatOpenAI
OutputParser
Retriever
因此它们都可以:
|
连接。
九、RunnableLambda
开发中经常需要:
自定义逻辑
例如:
python
def upper(text):
return text.upper()
包装:
python
from langchain_core.runnables import (
RunnableLambda
)
chain = (
prompt
| llm
| StrOutputParser()
| RunnableLambda(upper)
)
执行后:
全部转大写
十、并行执行 RunnableParallel
很多场景需要:
同时执行多个任务
例如:
总结文章
翻译文章
提取关键词
架构:

代码:
python
from langchain_core.runnables import (
RunnableParallel
)
parallel = RunnableParallel({
"summary": summary_chain,
"translate": translate_chain,
"keywords": keyword_chain
})
执行:
python
result = parallel.invoke(text)
返回:
{
"summary":"...",
"translate":"...",
"keywords":"..."
}
十一、RunnablePassthrough
某些场景:
需要保留原始输入
例如:
python
from langchain_core.runnables import (
RunnablePassthrough
)
chain = {
"question":
RunnablePassthrough(),
"answer":
prompt | llm
}
输出:
{
"question":"什么是AI",
"answer":"..."
}
十二、LCEL 在 RAG 中的应用
经典 RAG:

LCEL:
python
chain = (
retriever
| prompt
| llm
| StrOutputParser()
)
非常简洁。
十三、构建聊天机器人
示例:
python
chain = (
ChatPromptTemplate.from_template(
"""
你是一名Java专家
用户问题:
{question}
"""
)
| llm
| StrOutputParser()
)
调用:
python
result = chain.invoke({
"question":"什么是Spring IOC"
})
即可得到回答。
十四、LCEL 与传统 LangChain 对比
传统写法
python
prompt_result =
prompt.invoke(data)
llm_result =
llm.invoke(prompt_result)
result =
parser.invoke(llm_result)
LCEL 写法
chain = prompt | llm | parser
代码量减少:
50%以上
十五、LCEL 与 LangGraph 的关系
很多人容易混淆:
LCEL
LangGraph
实际上:
LCEL
负责:
单条执行链
而:
LangGraph
负责:
复杂状态流转
关系:

可以理解为:
LCEL是积木
LangGraph是建筑图纸
十六、LCEL 的优势
可读性高
prompt | llm | parser
一眼就能看懂流程。
扩展简单
增加一步:
prompt
| llm
| parser
| custom_step
即可。
易于组合
支持:
串行
并行
分支
动态路由
等模式。
与 LangChain 深度融合
几乎所有官方组件都支持:
Runnable
协议。
十七、面试高频问题
什么是 LCEL?
LangChain Expression Language
用于声明式构建 LLM 工作流
LCEL 核心操作符是什么?
|
管道操作符。
LCEL 底层依赖什么?
Runnable
接口体系。
LCEL 和 LangGraph 有什么区别?
LCEL:
链式编排
LangGraph:
图编排
十八、总结
LCEL 的出现,让 LangChain 开发从:
invoke(
invoke(
invoke()
)
)
变成:
prompt | llm | parser
极大降低了开发复杂度。
可以这样理解:
Prompt
是流水线起点
LLM
是核心加工厂
Parser
是结果处理器
LCEL
则是连接这一切的传送带
对于现代 AI 应用开发来说:
LangChain 负责组件
LCEL 负责连接组件
LangGraph 负责管理复杂流程
掌握 LCEL 后,你将能够更加高效地构建:
RAG系统
Agent系统
知识库问答
企业级AI应用
真正进入现代 LLM 应用开发的大门。