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

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,
http://www.jsqmd.com/news/684715/

相关文章:

  • 如何快速构建企业级Vue后台:终极架构设计指南
  • 防患于未然:从一次ClickHouse只读故障,聊聊Replicated表的日常维护与监控配置
  • 【5G异构网络中移动边缘计算的高效能卸载技术 】面向大规模移动用户的多无人机移动边缘计算联合部署与任务调度优化研究(Matlab代码、Python代码实现)
  • 生产级RAG系统架构设计与优化实践
  • 别再花钱买Figma了!手把手教你用Docker在NAS上部署开源设计神器Penpot
  • DownKyi:解锁B站视频收藏自由的全能下载助手
  • 20260422给万象奥科的开发板HD-RK3576-PI适配瑞芯微原厂的Buildroot时使用mpg123播放mp3音频
  • 量子计算基态求解:VQE算法与噪声校正技术
  • 数据分析怎么做?数据分析框架是什么?
  • 从游戏贴图到AI修图:深入浅出图解双线性插值在计算机图形学里的那些事儿
  • 2026醋酸氯己定消毒液可靠性技术解析与合规指南:含醇卫生湿巾,含醇消毒湿巾,抗菌消毒液,优选推荐! - 优质品牌商家
  • AutoSubs终极指南:5分钟学会AI自动字幕,让视频制作效率翻倍
  • TTS-Backup终极指南:3步保护你的桌游模拟器珍贵数据 [特殊字符]
  • 蜂窝物联网随机接入前导碰撞的机器学习检测方案
  • 深入 Vue 3 的 patch 流程:组件更新时到底发生了什么?
  • Android S 上如何用 adb 和 XML 文件模拟任意运营商 SIM 卡(附完整配置文件示例)
  • FPGA加速的轻量级1D-CNN振动手势识别技术
  • Flutter BLoC模式中的全局状态管理
  • 使用OpenClaw+Skill自动发布文章
  • 3分钟免费汉化Figma:设计师人工翻译校验的终极解决方案
  • 服务化技术API网关路由策略与限流熔断的实现机制
  • 吴恩达CNN课程解析:计算机视觉核心技术与实践
  • 【限时开源】车规级Docker守护进程加固包(已通过ASPICE L2认证):含17项车载专属健康检查、断电保护快照及CAN FD透传模块
  • 告别Python版本混乱:用Miniconda在树莓派上轻松管理多个项目环境
  • Renesas RZ/T2H工业MPU:异构架构与实时控制解析
  • Java Loom + Project Reactor实战部署:从本地验证到K8s灰度上线的7步标准化流程
  • S5P4418处理器停产影响与嵌入式系统迁移方案
  • 如何通过 USB 和无线方式将 iPad 照片传输到Mac
  • oCPC实战指南 | 出价、回传与成本调控的博弈艺术
  • 基于 Elasticsearch 与 OpenAI Embedding 构建智能语义搜索系统