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

发布时间:2026/11/11 22:01:44

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/11/10 13:46:01

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

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

2026/11/11 22:01:44

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

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

2026/11/10 22:16:35

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

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

2026/11/11 21:57:47

中国电工证多吗电子证书怎么查和转省

中国电工证多吗电子证书怎么查和转省 之前考的证在外省能不能转过来?这事儿可真让不少人头疼过,尤其是在周口市从事市政公用工程的朋友,很多人手里都有电工证,但一到换工作或者换个地方干,证书能不能用就成了大问题。别急,今天咱们就聊聊【中国电工证多…

2026/11/11 21:57:47

江门低压电工证价格怎么算,电子证书还能用吗

江门低压电工证价格怎么算,电子证书还能用吗 工地太忙根本没时间复习考试,很多人想考低压电工证,但担心时间和精力不够,更别提现在考证的门槛越来越高,价格也让人摸不着头脑。今天我们就围绕【江门低压电工证价格】这个关键词,结合郑州金水区劳务班组负…

2026/11/11 21:57:47

特种工工作职责含金量高吗?报考前必看的真实流程

特种工工作职责含金量高吗?报考前必看的真实流程 怕考不过白交培训费?特种工证书在业内一直是个热门话题,但很多人只听说含金量高,真正去考的时候才发现流程复杂、门槛不低、考试难度也高。别急,今天从济源劳务班组负责人的角度,把特种工工作职责含金量…

2026/11/11 21:57:47

ai电工证考场怎么考?全国通用证书怎么拿?济源从业者必看

ai电工证考场怎么考?全国通用证书怎么拿?济源从业者必看 你正被“急需特种作业证才能上岗找工作”这个问题逼得喘不过气?现在电工证已经从“可有可无”变成了“硬性门槛”,尤其是像你这样的济源水利工程从业者,没有全国通用的电工证,连项目入场都成问…

2026/11/11 21:52:46

建业低压电工证怎么考 郑州报考避坑指南

建业低压电工证怎么考 郑州报考避坑指南 证书过期了不知道怎么复审延期?别急,这事儿很多人遇到过,特别是咱们一线作业的兄弟,证书一过期就等于失去上岗资格,甚至可能被单位处罚或者被查出问题。今天就聊聊【建业低压电工证怎么考】,特别是郑州地区的报…

2026/11/11 12:42:59

电工证丢失还能补吗?千万别踩坑,丢了证等于失业

电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。…

2026/11/11 0:02:26

考低压电工证通过率考试真题与备考技巧

低压电工证通过率高不高?学历不高也能考,值不值得考? 你是不是总听说电工证能帮你找高薪工作,但又担心自己学历不够,考不上?其实,低压电工证考试门槛并没有你想象中那么高,关键是方法对不对。这篇文章就告诉你, 考低压电工证通过率到底有多高 ,…

2026/11/11 0:02:26

低压电工证学时千万别踩坑,濮阳毕业生怎么避坑报名

低压电工证学时千万别踩坑,濮阳毕业生怎么避坑报名 你是不是也和我一样,刚毕业就听说低压电工证学时必须达标才能上岗?可一打听,发现报名机构五花八门,价格参差不齐, 不知道去哪报名怕被中介坑…

2026/11/11 20:27:01

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/10 10:29:37

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

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

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

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