LangChain 表达式语言 (LCEL):从序列链接到并行执行

发布时间:2026/9/15 0:44:30

LangChain 表达式语言 (LCEL):从序列链接到并行执行 LangChain 表达式语言 (LCEL)从序列链接到并行执行引言什么是 LCELLangChain 表达式语言LangChain Expression Language简称 LCEL是 LangChain 框架中的一种声明式编程方式它允许开发者通过直观的管道运算符|来组合各种组件如模型、提示模板、输出解析器、检索器等从而构建复杂的 AI 工作流。LCEL 的核心优势在于它让代码变得简洁、可读性强同时天然支持并行执行、流式输出和错误处理等高级特性。## 基础概念管道运算符与链式调用LCEL 最基础的概念就是管道运算符|它类似于 Unix 中的管道命令将前一个组件的输出作为后一个组件的输入。这种设计模式被称为链式调用Chaining它让代码的流程一目了然。### 一个简单的序列链示例让我们从一个最基础的例子开始创建一个简单的问答链包含提示模板、语言模型和输出解析器。python# 示例 1基础序列链from langchain_core.prompts import ChatPromptTemplatefrom langchain_openai import ChatOpenAIfrom langchain_core.output_parsers import StrOutputParser# 1. 创建提示模板定义用户输入和系统指令prompt ChatPromptTemplate.from_messages([ (system, 你是一位精通科技的助手请用简洁的语言回答问题。), (human, {question})])# 2. 初始化语言模型这里使用 OpenAI实际使用时需设置 API Keymodel ChatOpenAI(modelgpt-3.5-turbo, temperature0)# 3. 创建输出解析器将模型输出转换为字符串output_parser StrOutputParser()# 4. 使用 LCEL 的管道运算符组合组件chain prompt | model | output_parser# 5. 执行链式调用result chain.invoke({question: 什么是 LangChain 表达式语言})print(链式调用结果)print(result)在这个例子中prompt | model | output_parser形成了一条数据流用户输入的question首先被填入提示模板生成完整的消息然后传递给模型得到原始输出最后经过解析器转换为纯文本字符串。整个过程清晰简洁避免了传统编程中繁琐的中间变量和函数调用嵌套。## 中级应用添加条件逻辑与记忆功能当我们需要更复杂的逻辑时LCEL 提供了RunnablePassthrough、RunnableBranch等工具来实现条件判断和数据传递。### 添加会话记忆的问答链下面的代码展示了如何结合记忆组件Memory和 LCEL 构建一个能记住对话上下文的聊天机器人。python# 示例 2带记忆的对话链from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholderfrom langchain_openai import ChatOpenAIfrom langchain_core.runnables import RunnablePassthroughfrom langchain_core.output_parsers import StrOutputParserfrom langchain.memory import ConversationBufferMemoryfrom langchain_core.messages import HumanMessage, AIMessage# 1. 初始化记忆组件用于存储对话历史memory ConversationBufferMemory(return_messagesTrue)# 2. 创建提示模板包含对话历史和当前输入prompt ChatPromptTemplate.from_messages([ (system, 你是一位友好的助手根据对话历史回答用户的问题。), MessagesPlaceholder(variable_namehistory), # 动态插入历史消息 (human, {input})])# 3. 初始化模型model ChatOpenAI(modelgpt-3.5-turbo, temperature0.7)# 4. 定义输出解析器output_parser StrOutputParser()# 5. 使用 LCEL 构建链并嵌入记忆功能chain ( RunnablePassthrough.assign(historylambda x: memory.chat_memory.messages) | prompt | model | output_parser)# 6. 模拟多轮对话def chat_with_memory(user_input): # 调用链 response chain.invoke({input: user_input}) # 更新记忆保存用户输入和模型回复 memory.chat_memory.add_user_message(user_input) memory.chat_memory.add_ai_message(response) return response# 测试对话print(第一轮对话)resp1 chat_with_memory(你好我是小明。)print(f用户你好我是小明。\n助手{resp1})print(\n第二轮对话记忆测试)resp2 chat_with_memory(你还记得我的名字吗)print(f用户你还记得我的名字吗\n助手{resp2})这个例子中RunnablePassthrough.assign()用于动态注入历史消息到提示模板中而记忆组件则负责维护对话历史。LCEL 的管道设计让这个原本复杂的记忆集成变得异常简洁。## 高级用法并行执行与合并结果LCEL 最强大的特性之一是其对并行执行的天然支持。通过RunnableParallel或RunnableMap我们可以同时执行多个独立的任务然后将结果合并输出。### 并行处理多个数据源假设我们想要同时从两个不同角度分析一个文本总结内容和提取关键词。这两个任务可以并行执行最后将结果合并。python# 示例 3并行执行与结果合并from langchain_core.prompts import ChatPromptTemplatefrom langchain_openai import ChatOpenAIfrom langchain_core.runnables import RunnableParallel, RunnablePassthroughfrom langchain_core.output_parsers import StrOutputParser# 初始化模型model ChatOpenAI(modelgpt-3.5-turbo, temperature0.3)# 定义两个并行任务的任务链# 任务1文本总结summary_prompt ChatPromptTemplate.from_template( 请用一句话总结以下内容\n{text})summary_chain summary_prompt | model | StrOutputParser()# 任务2关键词提取keyword_prompt ChatPromptTemplate.from_template( 请从以下内容中提取3个关键词用逗号分隔\n{text})keyword_chain keyword_prompt | model | StrOutputParser()# 使用 RunnableParallel 并行执行两个任务parallel_chain RunnableParallel( summarysummary_chain, keywordskeyword_chain)# 组合成完整的工作流先传递文本再并行处理full_chain ( RunnablePassthrough.assign(textlambda x: x[article]) | parallel_chain)# 测试并行执行test_article LangChain 是一个用于开发基于大语言模型LLM的应用程序的框架。它提供了模块化组件和表达式语言帮助开发者快速构建复杂的 AI 工作流。LCEL 支持链式调用、并行执行和流式输出大大简化了开发过程。result full_chain.invoke({article: test_article})print(并行执行结果)print(f总结{result[summary]})print(f关键词{result[keywords]})在这个例子中RunnableParallel同时启动了summary_chain和keyword_chain它们各自独立处理相同的输入文本。模型调用是并行进行的如果底层 API 支持并发最终结果以字典形式返回包含了两个任务的输出。这种方式特别适合需要多维度分析的场景如文档分类、情感分析和信息抽取的组合应用。## 总结LCEL 作为 LangChain 的核心表达方式从基础的序列链接到高级的并行执行为 AI 应用开发提供了强大而优雅的解决方案。通过本文的三个示例我们看到了1.序列链用|运算符构建简单的数据流适合问答、翻译等线性任务。2.条件与记忆结合RunnablePassthrough和记忆组件实现有状态的对话系统。3.并行执行利用RunnableParallel同时处理多个任务提升效率并简化代码结构。LCEL 的核心理念是组合优于继承它让开发者能够像搭积木一样构建复杂的 AI 工作流同时保持代码的可读性和可维护性。随着 LangChain 生态系统的发展LCEL 将会支持更多高级特性成为 AI 应用开发不可或缺的工具。
延伸阅读

更多相关文章

2026/9/14 15:16:42

AI Agent动态知识管理:原理、实现与优化

1. 为什么AI Agent需要动态知识管理 在真实业务场景中部署的AI系统,常常面临一个根本性矛盾:一方面需要持续吸收新数据来保持相关性,另一方面又受限于计算资源和模型容量。去年我们团队为某电商平台构建的推荐系统就遇到了典型问题——经过半…

2026/9/13 21:01:25

云南瓦猫文化符号提取与非遗活化设计研究

云南瓦猫文化符号提取与非遗活化设计研究技术说明:本文围绕云南瓦猫文化元素的提取与非遗活化设计进行方法复盘,重点整理文化符号分析、用户调研、造型提炼、结构推演、系列化方案和传播设计等研究过程。文章聚焦非物质文化遗产创新设计与文化传播方法。…

2026/9/14 7:41:30

TVA数字小脑:具身智能商业化落地的关键支撑(7)

前沿技术探索:AI智能体视觉(TVA,Transformer-based Vision Agent)是依托Transformer架构与“因式智能体”理论所构建的颠覆性工业视觉技术,是集深度强化学习(DRL)、卷积神经网络(CNN…

2026/9/15 0:41:18

中国地形三级阶梯GIS数据工作流解析与ArcGIS实操指南

简介:本资源是一套面向地理信息科学、遥感制图与GIS教学科研人员的中国地形三级阶梯标准化空间数据包,解决地形分阶可视化表达、高程分析与专题制图中基础底图缺失问题。资源共18个文件,包含标准Shapefile(shp/shx/dbf/prj等&…

2026/9/15 0:41:18

Mac mini部署大模型:SwiftData与Metal协同开发实战

1. 标题里的“价格不再 mini”到底在说啥:一场被误读的硬件叙事“当 Mac mini 的价格不再 mini”——这句标题乍看像一句调侃,实则藏着三层真实信息:第一层是物理事实,M2 Ultra 版 Mac mini 官方起售价 19999 元,比上一…

2026/9/15 0:41:18

西门子S7-1500 PLC智能物流分拣系统仿真实践

1. 项目概述:西门子S7-1500智能物流分拣系统仿真最近在工业自动化领域,用西门子S7-1500 PLC搭建智能物流分拣系统成为热门实践。这个项目的独特之处在于,完全通过TIA博图软件实现硬件在环仿真,不需要实际PLC设备就能体验真实的分拣…

2026/9/15 0:41:18

V2V通信仿真在智能交通中的应用与Simulink实现

1. 项目概述:V2V通信仿真在智能交通中的核心价值车与车通信(V2V)作为V2X技术的关键组成部分,正在彻底改变传统交通系统的运作方式。通过DSRC(专用短程通信)或C-V2X(蜂窝车联网)技术&…

2026/9/15 0:41:18

AI流程图工具如何重构业务流程设计效率

1. 为什么“手搓流程图”正在成为职场隐形加班黑洞?你有没有过这样的经历:周五下午三点,需求评审刚结束,产品经理甩来一张密密麻麻的业务逻辑描述,末尾加了一句:“麻烦今天下班前出个流程图,我们…

2026/9/15 0:36:18

博弈论视角下的善良边界与策略优化

1. 善良与博弈论的关系解析"善良"这个词在日常生活中常被视作美德,但在博弈论的框架下,纯粹的善良往往意味着被动和脆弱。博弈论作为研究决策主体间互动行为的数学理论模型,揭示了人际关系中一个残酷的真相:缺乏制约能力…

2026/9/14 2:17:50

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/15 0:01:16

AI英语单词APP开发:自适应学习算法与移动端优化实践

1. 项目概述 作为一名在移动应用开发领域摸爬滚打多年的老手,我最近完成了一个AI英语单词APP的开发项目。这个项目将传统单词记忆方法与现代AI技术相结合,打造了一款能够智能适应不同用户学习习惯的英语学习工具。 市面上大多数单词APP都存在一个通病&a…

2026/9/15 0:01:16

Flutter与OpenHarmony结合开发手语学习APP实战

1. 项目背景与核心价值作为一名同时接触过Flutter和OpenHarmony的开发者,最近我完成了一个基于Flutter for OpenHarmony的手语学习APP实战项目。这个项目最大的特点在于实现了跨平台框架与国产操作系统深度结合的创新实践——用Flutter开发的应用能完美运行在OpenHa…

2026/9/15 0:01:16

六个月成为机器人工程师:从ROS2到SLAM的实战路径

1. 六个月的紧迫感从哪来:先搞清楚你要成为哪种机器人工程师说实话,六个月的期限并不是一个宽松的时间线。市面上任何一本正经的机器人学教材都超过五百页,ROS2的官方文档可以翻到你怀疑人生,再加上ABB、KUKA这些工业机器人厂家动…

2026/9/14 11:59:31

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/14 13:53:59

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/14 11:22:57

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码