news 2026/4/23 1:13:22

LCEL深度解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LCEL深度解析

LangChain Expression Language (LCEL) 深度解析

从链式调用到流式输出,全面掌握 LangChain 的声明式编程范式,构建高性能 LLM 应用。

一、LCEL 是什么?

LangChain Expression Language(LCEL)是 LangChain 推出的声明式语言,用于轻松组合各种组件构建 LLM 应用。它借鉴了 Unix 管道的思想,让组件之间通过|操作符串联。

1.1 传统方式 vs LCEL

传统方式:手动管理数据流转

# 传统方式:繁琐且容易出错prompt=ChatPromptTemplate.from_template("告诉我关于{topic}的笑话")model=ChatOpenAI()output_parser=StrOutputParser()# 手动调用每一步chain_input={"topic":"程序员"}prompt_value=prompt.invoke(chain_input)message=model.invoke(prompt_value)result=output_parser.invoke(message)print(result)

LCEL 方式:声明式组合

# LCEL 方式:简洁优雅chain=prompt|model|output_parser result=chain.invoke({"topic":"程序员"})print(result)

1.2 LCEL 的核心优势

特性说明
流式输出自动支持,无需额外代码
异步支持同步/异步 API 自动生成
并行执行自动优化并行调用
重试机制内置错误重试
可观测性无缝集成 LangSmith
类型安全完整的类型提示

二、核心组件详解

2.1 Runnable 接口

所有 LCEL 组件都实现了Runnable接口,这是 LCEL 的基石:

fromlangchain_core.runnablesimportRunnableclassRunnable:# 同步调用definvoke(self,input,config=None)->Output:...# 异步调用asyncdefainvoke(self,input,config=None)->Output:...# 批量调用defbatch(self,inputs,config=None)->List[Output]:...# 流式输出defstream(self,input,config=None)->Iterator[Output]:...# 链式组合def__or__(self,other)->RunnableSequence:...

2.2 RunnableSequence:链式调用

使用|操作符创建链:

fromlangchain_openaiimportChatOpenAIfromlangchain_core.promptsimportChatPromptTemplatefromlangchain_core.output_parsersimportStrOutputParser# 创建组件prompt=ChatPromptTemplate.from_template("你是一个{role},请用专业角度分析:{question}")model=ChatOpenAI(model="gpt-4-turbo")parser=StrOutputParser()# 组合成链chain=prompt|model|parser# 调用result=chain.invoke({"role":"资深架构师","question":"微服务架构的优缺点"})

执行流程

输入 {"role": "...", "question": "..."} ↓ PromptTemplate → 生成 PromptValue ↓ ChatOpenAI → 生成 AIMessage ↓ StrOutputParser → 输出字符串

2.3 RunnableParallel:并行执行

当多个分支可以并行时,使用RunnableParallel

fromlangchain_core.runnablesimportRunnableParallel# 定义多个并行分支chain=RunnableParallel(# 分支1:生成摘要summary=prompt_summary|model|parser,
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 1:09:34

跨越JDK17兼容鸿沟:ButterKnife编译报错深度解析与实战修复

1. 当JDK17遇上ButterKnife:问题根源全解析 最近在Android Studio升级到最新版本后,不少开发者遇到了一个棘手的编译错误。错误信息大致是这样的:"superclass access check failed: class butterknife.compiler.ButterKnifeProcessor$RS…

作者头像 李华
网站建设 2026/4/23 1:06:02

如何通过 USB 和无线方式将 iPad 照片传输到Mac

您想将大量照片从 iPad 传输到Mac吗?如果是这样,您可能想知道最好的方法是什么。无论是使用 USB 电缆还是 WiFi 连接,都有多种方法可以将图像从 iPad 移动到Mac 。这篇文章将展示如何通过 USB 和无线方式将 iPad 照片传输到Mac 。现在让我们开…

作者头像 李华
网站建设 2026/4/23 1:04:34

告别整流桥!用Boost电路组合法,手把手教你推导无桥PFC家族拓扑

从Boost到无桥PFC:组合法拓扑推导实战指南 在电源设计领域,功率因数校正(PFC)电路一直是提升能效的关键环节。传统有桥PFC虽然结构简单,但整流桥带来的导通损耗始终是效率提升的瓶颈。而无桥PFC技术通过巧妙的结构设计…

作者头像 李华
网站建设 2026/4/23 1:00:12

Redis Lua 脚本的性能分析

Redis Lua脚本性能分析:解锁高效缓存的关键 Redis作为高性能内存数据库,其内置的Lua脚本功能通过原子化操作和减少网络开销,成为复杂业务逻辑的高效解决方案。不当的脚本设计可能导致性能瓶颈。本文将从脚本复杂度、内存管理、复用机制三个核…

作者头像 李华