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 应用开发不可或缺的工具。

相关新闻

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

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

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

2026/7/27 23:58:42 阅读更多 →
AI驱动消费者行为分析:提升商业预测准确率42%

AI驱动消费者行为分析:提升商业预测准确率42%

1. AI驱动的消费者行为分析概述 在商业决策领域,准确预测未来收入一直是企业管理者面临的核心挑战。传统预测方法主要依赖线性回归、时间序列分析等统计技术,这些方法虽然简单易用,但难以捕捉消费者行为中的非线性关系和复杂模式。我在为多家…

2026/7/27 23:58:42 阅读更多 →
[Java/OracleJDK/OpenJDK] JDK厂商的识别与替换

[Java/OracleJDK/OpenJDK] JDK厂商的识别与替换

[Java/OracleJDK/OpenJDK] JDK厂商的识别与替换 引言:JDK的“身世之谜”在Java开发者的日常工作中,我们经常会遇到一个看似简单却暗藏玄机的问题:我当前使用的JDK到底是哪个厂商的? 是Oracle JDK、OpenJDK,还是其他发行…

2026/7/27 23:58:42 阅读更多 →

最新新闻

开发商售楼处数字化升级怎么做?

开发商售楼处数字化升级怎么做?

房企的数字化转型投入正在快速增长,据行业数据显示,2025年房企数字化投入规模已突破800亿元,年复合增长率达35%。售楼处的数字化升级不是单一环节的改造,而是从“获客-展示-成交-服务”全链路的系统升级。数字化升级四步法第一步&…

2026/7/28 0:03:44 阅读更多 →
学术论文研究创新点梳理与核心价值提炼指南

学术论文研究创新点梳理与核心价值提炼指南

本科毕业论文是大学四年最大的坎。开题报告憋一周写不出三页,找文献翻遍十几个网站还是缺关键资料,写正文卡壳半天憋不出一句话,降重改到凌晨三点结果逻辑全乱,答辩前一天PPT还没做完。别慌,亲测这四个工具能让你少熬半…

2026/7/28 0:03:44 阅读更多 →
批量文献提炼方法与应用实践指南

批量文献提炼方法与应用实践指南

本科毕业论文是大学四年最大的坎。开题报告憋一周写不出三页,找文献翻遍十几个网站还是缺关键资料,写正文卡壳半天憋不出一句话,降重改到凌晨三点结果逻辑全乱,答辩前一天PPT还没做完。别慌,亲测这四个工具能让你少熬半…

2026/7/28 0:03:44 阅读更多 →
期房项目怎么提前展示给客户看?

期房项目怎么提前展示给客户看?

期房销售的核心难题是“看不见”。客户付了几百万,却只能对着图纸想象未来的家。行业数据显示,“卖家秀”和“买家秀”的差距太大,交房即维权几乎成了常态。数字展示工具的价值正在于此——它能把“图纸上的期房”变成“屏幕上的现房”。五大…

2026/7/28 0:03:44 阅读更多 →
Web前端入门第 问:JavaScript 中的 Web Worker 为什么能提升代码性能?

Web前端入门第 问:JavaScript 中的 Web Worker 为什么能提升代码性能?

Web前端入门第 3 问:JavaScript 中的 Web Worker 为什么能提升代码性能? 作为一名前端开发者,你是否遇到过这样的场景:网页加载了一个复杂的计算任务,结果整个页面卡顿得像“死机”一样,点击按钮没反应&…

2026/7/28 0:03:44 阅读更多 →
函数里改了变量,外面为什么纹丝不动?——指针初探,Day11学习记录

函数里改了变量,外面为什么纹丝不动?——指针初探,Day11学习记录

1. 从“传值传址”的困惑说起 Day09 学函数的时候&#xff0c;我遇到了一个让人抓狂的问题。写了一个 change 函数想把外部变量改成 100&#xff0c;结果外面的变量纹丝不动。代码长这样&#xff1a; #include <stdio.h>void change(int x) {x 100; // 我把 x 改成了…

2026/7/28 0:02:44 阅读更多 →

日新闻

告别臃肿!3步让你的暗影精灵笔记本重获新生

告别臃肿!3步让你的暗影精灵笔记本重获新生

告别臃肿&#xff01;3步让你的暗影精灵笔记本重获新生 【免费下载链接】OmenSuperHub Control Omen laptop performance, fan speeds, and keyboard lighting, and unlock power limits. 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub 你是否也曾为官方Om…

2026/7/28 0:00:43 阅读更多 →
RAG必踩坑!财报法规检索不准?这款开源工具让答案浮出水面,准确率飙升98.7%!

RAG必踩坑!财报法规检索不准?这款开源工具让答案浮出水面,准确率飙升98.7%!

做 RAG 的人应该都踩过这个致命的坑&#xff1a;把几百页的财报、法规、技术手册扔给向量库&#xff0c;问一个具体问题&#xff0c;搜出来的全是沾边但没用的内容 —— 关键信息要么被硬切块拆碎了&#xff0c;要么藏在几十条结果的最下面。语义相似≠真正相关&#xff0c;这个…

2026/7/28 0:00:43 阅读更多 →
抖音视频文案提取工具全指南:免费2026版、手机App、在线工具一网打尽

抖音视频文案提取工具全指南:免费2026版、手机App、在线工具一网打尽

2026年做短视频运营&#xff0c;从抖音上扒文案早就不是偷偷抄笔记的事了。我刚开始做内容的时候&#xff0c;每天刷半小时抖音&#xff0c;手动把爆款视频的口播敲进备忘录&#xff0c;一条2分钟的视频得花十来分钟&#xff0c;碰到语速快的还要反复回听。后来试了一圈工具&am…

2026/7/28 0:00:43 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档&#xff0c;可以直接使用&#xff01;系统支持图片、视频、摄像头等多种方式检测裂缝&#xff0c;功能强大实用。 1数据集6000张 8各类别

2026/7/27 4:33:59 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像&#xff01; pubg绝地求生目标检测数据集 1分类&#xff1a;e_body&#xff0c;14905个标签&#xff0c;txt格式 共计14244张图&#xff0c;99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/27 6:31:56 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别&#xff1a; allies enemy tag图片总量&#xff1a;7247张训练集&#xff1a;5139张验证集&#xff1a;1425张测试集&#xff1a;683张标注状态&#xff1a;全部已标注&#xff0c;即拿即用数据格式&#xff1a;支持YOLO格式及其他格式&#…

2026/7/27 4:01:12 阅读更多 →

月新闻