当前位置: 首页 > news >正文

LangChain框架入门:手把手带你玩转LCEL表达

LangChain框架入门:手把手带你玩转LCEL表达

LangChain 是当前大模型应用开发中最热门的框架之一,而 LCEL(LangChain Expression Language,LangChain 表达式语言)则是其核心的“魔法棒”。它让我们能够用简洁、可读、可组合的方式,将提示词、模型、输出解析器等组件“串联”成一条条强大的处理流水线。本文将带你从零开始,循序渐进地掌握 LCEL 的核心概念与实战技巧。### 一、为什么需要 LCEL?在 LCEL 出现之前,我们通常需要编写大量的样板代码来调用模型、处理中间结果、解析输出。比如,你需要手动管理 prompt 模板的填充、调用model.generate()、再手动提取文本。这种代码不仅冗长,而且难以复用和扩展。LCEL 的核心设计理念是**“一切皆表达式”**。它提供了一种统一的管道操作符|,让不同的组件像 Unix 管道命令一样无缝连接。数据流从左侧流向右侧,每一步的输入就是上一步的输出。这种设计极大地简化了代码,提升了可读性和可维护性。### 二、LCEL 基础:三大核心组件LCEL 的三大核心组件是:1.Prompt 模板:负责将用户输入和固定指令组合成最终的提示词。2.模型(Model):通常是 ChatOpenAI 或其它大语言模型,负责接收提示词并生成回复。3.输出解析器:将模型的原始文本输出,解析为结构化的数据(如字典、列表、Pydantic 对象)。我们来写第一个 LCEL 表达式,完成一个最简单的“翻译官”功能。python# 导入必要的库from langchain.prompts import ChatPromptTemplatefrom langchain.chat_models import ChatOpenAIfrom langchain.schema import StrOutputParser# 1. 创建 Prompt 模板prompt = ChatPromptTemplate.from_template( "请将以下英文翻译成中文:{english_text}")# 2. 初始化模型(请设置你的 OPENAI_API_KEY 环境变量)model = ChatOpenAI(model="gpt-4o-mini", temperature=0)# 3. 初始化输出解析器(直接返回字符串)parser = StrOutputParser()# 4. 使用管道符构建 LCEL 链chain = prompt | model | parser# 5. 调用链,传入输入参数result = chain.invoke({"english_text": "Hello, LangChain!"})# 输出翻译结果print(result) # 输出:你好,LangChain!代码解读:-prompt是一个模板,它接受一个变量english_text。-model是核心的语言模型。-parser将模型返回的AIMessage对象提取为纯字符串。-chain.invoke()是执行 LCEL 链的统一入口。数据流是:输入字典 → prompt 生成完整提示词 → 模型生成回复 → 解析器输出字符串。### 三、进阶:链式调用与 RunnablePassthroughLCEL 的强大之处在于它可以组合多个链,并且可以在链中传递和变换数据。RunnablePassthrough允许我们直接传递未修改的输入,或者配合itemgetter提取特定字段。下面我们构建一个更复杂的链,它先进行关键词提取,再进行回答,同时保留原始输入。pythonfrom langchain.prompts import ChatPromptTemplatefrom langchain.chat_models import ChatOpenAIfrom langchain.schema import StrOutputParserfrom langchain.schema.runnable import RunnablePassthrough, RunnableParallel# 子链1:提取关键词keyword_prompt = ChatPromptTemplate.from_template("从以下文本中提取3个关键词,用逗号分隔:{text}")keyword_chain = keyword_prompt | ChatOpenAI(model="gpt-4o-mini") | StrOutputParser()# 子链2:基于关键词和原文生成摘要summarize_prompt = ChatPromptTemplate.from_template( "以下是用户输入:{text}\n\n提取的关键词:{keywords}\n\n请基于这些信息生成一份简洁的总结。")summarize_chain = summarize_prompt | ChatOpenAI(model="gpt-4o-mini") | StrOutputParser()# 组合链:并行执行关键词提取,并保留原始输入chain = ( RunnableParallel( { "keywords": keyword_chain, "text": lambda x: x["text"] # 直接传递原始文本 } ) | summarize_prompt | ChatOpenAI(model="gpt-4o-mini") | StrOutputParser())# 执行result = chain.invoke({"text": "LangChain 是一个强大的框架,它简化了 LLM 应用的开发流程。"})print(result)关键点:-RunnableParallel可以并行执行多个子链(例如keyword_chain),并将结果组装成一个字典。- 我们使用lambda x: x["text"]将原始输入传递给后续步骤,而keywords则由子链生成。- 这样,最终链能同时使用关键词和原文,生成更高质量的总结。### 四、高级技巧:条件分支与自定义函数LCEL 还支持条件逻辑和自定义函数,这让它几乎可以处理任何复杂的业务逻辑。#### 1. 条件分支使用RunnableBranch,可以根据输入内容动态选择不同的处理路径。pythonfrom langchain.schema.runnable import RunnableBranch, RunnableLambda# 定义一个函数判断文本长度def is_long(text: str) -> bool: return len(text) > 50# 定义两个分支long_chain = RunnableLambda(lambda x: f"处理长文本:{x[:10]}...")short_chain = RunnableLambda(lambda x: f"处理短文本:{x}")# 构建分支链branch_chain = RunnableBranch( (lambda x: is_long(x["text"]), long_chain), # 如果条件为True,执行long_chain short_chain # 否则执行short_chain)result = branch_chain.invoke({"text": "这是一个很短的文本"})print(result) # 输出:处理短文本:这是一个很短的文本#### 2. 自定义函数通过RunnableLambda,我们可以将普通 Python 函数无缝嵌入到 LCEL 链中。pythonfrom langchain.schema.runnable import RunnableLambdadef add_score(text: str) -> str: """自定义函数:给文本添加评分""" score = len(text) * 2 return f"{text} (得分:{score})"chain = ( RunnableLambda(lambda x: x["input_text"]) # 提取输入 | RunnableLambda(add_score) # 应用自定义函数)print(chain.invoke({"input_text": "你好"})) # 输出:你好 (得分:4)### 五、与 LangSmith 集成:调试与监控在实际开发中,调试 LCEL 链非常方便。你可以使用chain.invoke()直接运行,也可以通过chain.batch()批量处理。更重要的是,LCEL 原生支持 LangSmith 追踪,你可以查看每一步的输入输出,快速定位问题。python# 开启 LangSmith 追踪(需要环境变量 LANGCHAIN_TRACING_V2=true)# 然后你的链会自动记录所有运行日志# 批量调用示例results = chain.batch([{"input_text": "你好"}, {"input_text": "世界"}])print(results)### 六、总结LCEL 是 LangChain 中极具革命性的设计,它让复杂的大模型应用变得像拼积木一样简单。通过|管道符,我们可以轻松组合 Prompt、模型、解析器、Runnable 等组件,构建出可读性高、可扩展性强的 AI 应用。从简单的翻译,到并行处理、条件分支、自定义函数,LCEL 都提供了优雅的解决方案。掌握 LCEL 不仅提升了开发效率,也为构建更复杂的 Agent、RAG 系统打下了坚实的基础。希望本文能为你打开 LangChain 世界的大门,赶快动手试试吧!

http://www.jsqmd.com/news/1307037/

相关文章:

  • 2026年无锡FEM认证代办公司实力榜单:专业合规与高效出证服务优选推荐 - 优企名品
  • 实时AI音效生成性能瓶颈全解析,实测17种模型在Unreal Engine 5.3中的FPS损耗对比数据
  • 从“异常流量”弹窗解析计算机网络核心:协议、NAT与安全实战
  • Proteus仿真入门:从二极管到桥式整流滤波电路全解析
  • 2026上海青浦拆除回收公司推荐:从资质、价格、服务3个维度择优选择 - geo交流
  • 大模型训练中断在升级后?Keras→TF 2.15迁移失败率骤升47%——我们用eBPF追踪到根本原因
  • 2kg超轻板卡部署指南:边缘计算与移动AI开发实战
  • Modbus RTU功能码详解:从协议帧到实战调试避坑指南
  • DeepSeek、豆包、Kimi、千问、文心一言、……到底用哪个?2026年主流AI工具深度横评
  • 问卷调查设计有什么注意事项
  • 仁怀甲醛检测治理深度体验分享:多家对比之后,家装业主一致认可这家本地公司 - 专注室内空气检测治理
  • 2026年南京大平层装修公司推荐:优质家装企业实力评测与选择指南 - 优质品牌商家
  • 【仅限首批200家开放】AI日报生成私有化部署套件V3.2发布:支持离线运行、审计日志溯源、国产芯片适配
  • Jetson边缘AI设备集成5G模块:从硬件连接到网络调优全攻略
  • 2026年08月 PET膜贴合包覆供应厂家:专业生产制造企业综合能力解析 - 优企名品
  • 顺丰同城:具备强劲增长势能的第三方即时配送头部平台 - 服务品牌热点
  • Simulink中14自由度车辆模型构建与优化实践
  • 终极WebP解决方案:如何在Photoshop中完美处理WebP格式图像
  • 广州精装房白蚁消杀找青林白蚁防治,无损施工保护墙面地板原有装修 - 产业评测参考
  • DeepSeek-V4正式版终于上线,但它真正想说的不是“我更强了“
  • Realtek WiFi 7网卡Linux驱动完整指南:轻松解锁8922AE极速体验
  • PyAutoGUI桌面自动化入门:从鼠标键盘控制到图像识别实战
  • 2026年贵阳经济纠纷律师事务所怎么找,民间借贷产生欠款争议怎么走法律程序 - 法度笔记
  • 2026毕业生必备:6款论文降重工具深度评测
  • 《顺丰同城盈利深度测评:从扭亏到持续高增,彰显成熟商业模式价值》 - 服务品牌热点
  • AI异常检测告警响应SLA达标率不足61%?这8个被头部云厂商内部封存的校准checklist首次公开
  • C#与Vue+ElementUI构建现代化登录系统实战
  • 北京二大渠道横向测评:老凤祥、周大福VS回收金店,回收差价4元/克 - 一日一测评
  • STM32驱动0.71英寸双目IPS LCD模块:双SPI同步与DMA刷新优化实践
  • 2026甄选:五家专业矿用裂岩机品牌机构综合能力解析 - 优企名品