学习 LCEL 表达式:降低 LLM 应用开发难度

目录

一、前言

[二、什么是 LCEL](#二、什么是 LCEL)

[三、为什么需要 LCEL](#三、为什么需要 LCEL)

[四、LCEL 的核心语法](#四、LCEL 的核心语法)

[五、第一个 LCEL 示例](#五、第一个 LCEL 示例)

六、加入输出解析器

[七、LCEL 的本质](#七、LCEL 的本质)

[八、Runnable:LCEL 的核心接口](#八、Runnable:LCEL 的核心接口)

九、RunnableLambda

[十、并行执行 RunnableParallel](#十、并行执行 RunnableParallel)

十一、RunnablePassthrough

[十二、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 应用开发的大门。

相关推荐
知识燃料13 分钟前
企业级生成式 AI 云平台推荐,哪些平台更适合从 Agent 原型走向生产?
大数据·人工智能
oioihoii16 分钟前
我用 Seed Evolving 做了个 AI 小说写作工具
人工智能
龙虾PRO19 分钟前
破解变异 OLLVM 混淆新思路:基于 Angr 动态执行自动化还原控制流完整实操方案
人工智能
@Mr_LiuYang20 分钟前
《深入理解 AI Agent:设计原理与工程实践 》实验1-1上下文的关键作用
人工智能
大模型丫丫24 分钟前
MCP协议开发实战:从零搭建AI Agent工具链
人工智能
wangxin20825 分钟前
大模型稀疏注意力和MoE的宽度丢失与多智能体的维度补充
人工智能·ai·多智能体·管理学·组织管理·coordclaw·稀释注意力
ZEB110625 分钟前
深耕矿山智能赛道 长沙迪迈科技以持续技术创新赋能矿业高质量转型
人工智能·科技·制造
一碗白开水一26 分钟前
入门实践工程四:基于 PyTorch 的手写数字识别(MNIST 图像分类)|附:环境依赖环境及工程源码
人工智能·pytorch·分类
A153625531 分钟前
2026 电商物流系统推荐:多渠道仓配履约数字化选型指南
大数据·数据库·人工智能
SEO_juper41 分钟前
2026年Schema自动注入实战:用Python批量给1000个页面加上JSON-LD,AI引用率实测提升38%
人工智能·python·json·seo·独立站