目录一、前言二、什么是 LCEL三、为什么需要 LCEL四、LCEL 的核心语法五、第一个 LCEL 示例六、加入输出解析器七、LCEL 的本质八、RunnableLCEL 的核心接口九、RunnableLambda十、并行执行 RunnableParallel十一、RunnablePassthrough十二、LCEL 在 RAG 中的应用十三、构建聊天机器人十四、LCEL 与传统 LangChain 对比传统写法LCEL 写法十五、LCEL 与 LangGraph 的关系十六、LCEL 的优势可读性高扩展简单易于组合与 LangChain 深度融合十七、面试高频问题什么是 LCELLCEL 核心操作符是什么LCEL 底层依赖什么LCEL 和 LangGraph 有什么区别十八、总结一、前言随着大语言模型LLM的快速发展越来越多开发者开始构建自己的 AI 应用。例如智能客服 RAG知识库 AI助手 代码生成工具 数据分析助手在早期的 LangChain 开发中我们经常会写出这样的代码prompt PromptTemplate(...) llm ChatOpenAI(...) parser StrOutputParser() result parser.invoke( llm.invoke( prompt.invoke( {topic:人工智能} ) ) )虽然功能可以实现但存在明显问题代码嵌套严重 可读性差 维护困难 扩展复杂于是 LangChain 团队推出了LCEL全称LangChain Expression Language即LangChain 表达式语言它的目标只有一个用更简洁、更优雅的方式构建 LLM 应用。二、什么是 LCELLCEL 是 LangChain 官方推出的一套声明式编排语言。核心思想把多个组件像管道一样连接起来例如Prompt ↓ LLM ↓ OutputParser传统代码result parser.invoke( llm.invoke( prompt.invoke( {topic:AI} ) ) )LCELchain prompt | llm | parser直接变成流水线形式。三、为什么需要 LCEL在 AI 应用开发中一个请求往往需要经过多个步骤。例如用户问题 ↓ Prompt模板 ↓ 大模型 ↓ 结果解析 ↓ 输出架构如果使用传统方式每增加一步 就会多一层嵌套代码会越来越难维护。LCEL 则通过管道表达式解决这一问题。四、LCEL 的核心语法LCEL 最重要的操作符|即Pipe管道类似 Linuxcat log.txt | grep ERROR含义前一个组件的输出 作为下一个组件的输入五、第一个 LCEL 示例安装依赖pip install langchain pip install langchain-openai示例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代码from langchain_core.output_parsers import ( StrOutputParser ) chain ( prompt | llm | StrOutputParser() )执行result chain.invoke( {topic:深度学习} ) print(result)架构七、LCEL 的本质实际上prompt | llm | parser背后等价于parser.invoke( llm.invoke( prompt.invoke(input) ) )只是隐藏了复杂调用提高了可读性。八、RunnableLCEL 的核心接口LCEL 底层依赖Runnable几乎所有组件都实现了Runnable包括PromptTemplate ChatOpenAI OutputParser Retriever因此它们都可以|连接。九、RunnableLambda开发中经常需要自定义逻辑例如def upper(text): return text.upper()包装from langchain_core.runnables import ( RunnableLambda ) chain ( prompt | llm | StrOutputParser() | RunnableLambda(upper) )执行后全部转大写十、并行执行 RunnableParallel很多场景需要同时执行多个任务例如总结文章 翻译文章 提取关键词架构代码from langchain_core.runnables import ( RunnableParallel ) parallel RunnableParallel({ summary: summary_chain, translate: translate_chain, keywords: keyword_chain })执行result parallel.invoke(text)返回{ summary:..., translate:..., keywords:... }十一、RunnablePassthrough某些场景需要保留原始输入例如from langchain_core.runnables import ( RunnablePassthrough ) chain { question: RunnablePassthrough(), answer: prompt | llm }输出{ question:什么是AI, answer:... }十二、LCEL 在 RAG 中的应用经典 RAGLCELchain ( retriever | prompt | llm | StrOutputParser() )非常简洁。十三、构建聊天机器人示例chain ( ChatPromptTemplate.from_template( 你是一名Java专家 用户问题 {question} ) | llm | StrOutputParser() )调用result chain.invoke({ question:什么是Spring IOC })即可得到回答。十四、LCEL 与传统 LangChain 对比传统写法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协议。十七、面试高频问题什么是 LCELLangChain 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 应用开发的大门。