news 2026/5/11 21:53:15

007-LCEL-Syntax

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
007-LCEL-Syntax

LangChain LCEL:用管道符串联你的 AI 工作流

💡摘要:LCEL 是 LangChain 的表达式语言,通过管道符|将多个 AI 组件串联成数据流水线,让复杂的工作流定义变得像搭积木一样简单。

引言

在使用 LangChain 时,你可能会看到这样的代码:

chain=prompt|llm|output_parser result=chain.invoke({"topic":"AI"})

第一次看到可能会困惑:Python 里的|不是"按位或"运算符吗?怎么还能串联 AI 组件了?

这正是 LCEL(LangChain Expression Language)的魔法所在。2 行代码就能构建一个完整的 AI 流水线,今天就带你读懂它。

核心概念

什么是 LCEL?

LCEL 可以理解为 LangChain 的"乐高语言"——用一种极简的方式把 AI 组件拼在一起。

核心思想:一切皆Runnable

类比理解:把 AI 工作流想象成工厂流水线

类比LCEL 组件
原料用户的输入参数
加工站 1Prompt(格式化提示词)
加工站 2Model(调用大模型)
加工站 3Parser(提取结果)
传送带管道符
启动按钮.invoke()

|管道的原理

虽然你不需要完全理解底层,但知道原理能帮你更好地使用:

Python 的"操作符重载":LangChain 重写了__or__方法,当两个 Runnable 用|连接时,内部会创建一个RunnableSequence对象,把两个组件串联起来。

延迟执行:管道搭好后,组件并不会立即运行。只有调用.invoke()时,数据才会在流水线中流动。

构建阶段:prompt | llm | parser → 只搭好了流水线,没执行 执行阶段:chain.invoke(...) → 数据开始流动,逐步执行

数据如何流动?

当调用chain.invoke({"topic": "太空探索"})时:

  1. Prompt接收到{"topic": "太空探索"},格式化为消息列表
  2. Model接收消息列表,调用大模型生成回答
  3. Parser提取回答中的文本内容,返回最终字符串

整个过程像一个接力赛——前一个的输出自动成为下一个的输入。

代码示例

基础示例:3 行构建链条

fromlangchain_core.promptsimportChatPromptTemplatefromlangchain_core.output_parsersimportStrOutputParserfromlangchain_openaiimportChatOpenAI# 定义组件prompt=ChatPromptTemplate.from_template("写一个关于{topic}的短篇故事")llm=ChatOpenAI(temperature=0.7)parser=StrOutputParser()# 串联组件chain=prompt|llm|parser# 执行result=chain.invoke({"topic":"AI 觉醒"})print(result)

|vs.pipe():两种写法

# 管道符写法(推荐)chain=prompt|llm|parser# .pipe() 写法(等价)chain=prompt.pipe(llm).pipe(parser)

何时用.pipe():当需要在循环中动态构建链条时,.pipe()更方便:

chain=promptforprocessorin[step1,step2,step3]:chain=chain.pipe(processor)

stream():实现打字机效果

# invoke():等全部生成完,一次性返回result=chain.invoke({"topic":"AI"})# stream():逐字逐句输出,像 ChatGPT 打字一样forchunkinchain.stream({"topic":"AI"}):print(chunk,end="",flush=True)

选 invoke() 还是 stream()?

场景推荐
短回答(分类、标签)invoke()
长文本(故事、报告)stream()
聊天机器人stream()
批处理invoke()+batch()

最佳实践

  1. 优先用|:简洁直观,官方推荐
  2. 动态构建用.pipe():循环或条件分支时更灵活
  3. 短任务用invoke():简单直接
  4. 长输出用stream():提升用户体验

总结

核心要点回顾:

  • LCEL= 管道符|+ Runnable 组件 = 声明式工作流
  • 核心机制:一切皆 Runnable,前一个输出是后一个输入
  • 延迟执行:构建时不运行,调用.invoke()才触发
  • invoke()适合短任务,stream()适合长文本和实时交互

LCEL 让你告别繁琐的函数嵌套,用最简洁的语法构建强大的 AI 工作流。


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/11 21:47:36

UU远程端口映射

UU远程端口映射作为一个经常远程办公的人,我用过frp、搭过VPN、申请过内网访问权限。最后发现,最香的还是UU远程自带的这个功能。先说说我的痛点 相信很多远程办公的同学都遇到过这种情况: 人在家里,公司内网有台MySQL想连一下调数…

作者头像 李华
网站建设 2026/5/11 21:45:35

3分钟上手163MusicLyrics:免费歌词下载工具全面指南

3分钟上手163MusicLyrics:免费歌词下载工具全面指南 【免费下载链接】163MusicLyrics 云音乐歌词获取处理工具【网易云、QQ音乐】 项目地址: https://gitcode.com/GitHub_Trending/16/163MusicLyrics 还在为喜欢的歌曲找不到歌词而烦恼吗?今天我要…

作者头像 李华
网站建设 2026/5/11 21:41:21

2026年必看!这几家AI大模型接口代理网站,助你轻松解锁智能新体验

随着AI技术在各领域的广泛应用,大模型接口代理网站成为企业快速接入先进智能能力、降低技术难度的关键途径。当前市场上此类网站众多,企业在选择时往往会考虑稳定性、合规性和接入成本等因素。为帮助企业解决这一难题,本文将对当下主流的几家…

作者头像 李华
网站建设 2026/5/11 21:39:43

005、LVGL源码获取与版本选择

005、LVGL源码获取与版本选择 上周帮一个朋友调他的智能家居面板项目,他用的LVGL 7.11,跑在ESP32上,界面卡得不行,触摸响应延迟超过200ms。我一看代码,他用了大量lv_anim做连续动画,还开了双缓冲——但问题是,LVGL 7.x的动画调度器在双缓冲模式下有个已知的调度优先级b…

作者头像 李华