W
AI-Wiki
CONCEPT

LangChain表达式语言(LCEL)

基本定义

LangChain表达式语言(LangChain Expression Language,简称LCEL)是LangChain Core层内置的核心声明式工作流编排语言,核心定位为解决LangChain生态内AI应用的组件组合、工作流调度问题,是LangChain链(Chain)构建的底层核心机制。

LCEL采用声明式编程范式,开发者仅需定义工作流的组成组件、流转规则,无需手动编写组件调用、参数传递、异常处理等重复逻辑,即可快速完成可复用AI工作流的搭建,同时支持Python和Typescript双语言环境。

核心运行机制

LCEL的核心设计基于Runnable协议,所有可参与编排的组件(包括LLMLangChain消息对象体系|ChatModel、提示词模板、输出解析器、检索器、自定义函数等)均需实现Runnable接口,提供统一的标准化调用方法:

  1. invoke/ainvoke:单输入同步/异步调用,将单个输入转换为输出
  2. batch/abatch:多输入批量并行调用,通过线程池高效处理批量请求
  3. stream/astream:单输入同步/异步流式输出,支持大模型生成结果的逐块返回
  4. astream_log:异步流式返回输出结果及中间步骤日志,便于调试与可观测性实现

基础语法

LCEL默认使用竖杠|作为组件连接符,实现顺序调用逻辑,前一个组件的输出将自动作为后一个组件的输入,典型基础链示例如下:

from langchain_core.prompts import PromptTemplate
from langchain_openai import ChatOpenAI
from langchain_core.output_parsers import StrOutputParser

# 定义独立组件
prompt = PromptTemplate.from_template("将以下文本翻译为{lang}:{text}")
model = ChatOpenAI(model="gpt-3.5-turbo")
output_parser = StrOutputParser()

# LCEL编排顺序执行工作流
chain = prompt | model | output_parser

# 统一调用执行
chain.invoke({"lang": "英文", "text": "我爱编程"})

核心高级特性

LCEL内置多种高级编排组件,满足除基础顺序调用外的复杂业务需求:

  1. ConfigurableField:支持为组件配置可动态调整的参数,同一组件可在不同环境、不同调用条件下按预设规则运行,无需重复定义组件实例。
  2. RunnableLambda:可将普通Python/Typescript函数转换为标准Runnable组件,实现自定义业务逻辑嵌入工作流,功能类同低代码平台中的自定义代码节点。
  3. RunnableBranch:内置路由机制,支持根据前置步骤的输出结果动态选择后续执行分支,实现简单条件判断逻辑。
  4. RunnablePassthrough:用于工作流中的变量绑定、值透传,可作为中继站或占位符保留输入参数,供后续步骤调用,无需手动传递变量。
  5. RunnableParallel:支持并行执行逻辑,将同一输入同时传递给多个不同的Runnable组件同时执行,最后聚合所有组件的输出结果,适用于多路径检索、多模型对比等场景。
  6. with_fallbacks:降级容错机制,可为指定组件配置备选执行逻辑,当组件调用失败(如大模型接口超时、返回异常)时自动触发备选方案,提升工作流稳定性。

使用边界与局限性

LCEL原生设计仅支持基础顺序调度逻辑,虽然可通过RunnableBranch实现简单条件分支,但对于复杂的多分支嵌套、循环调度、状态持久化、多角色智能体交互等高级编排需求,原生LCEL无法支持,需要搭配LangGraph补充实现。

典型应用场景

  1. 基础LangChain RAG能力框架|RAG工作流编排:整合文档加载、检索、重排、生成全链路流程
  2. 简单智能问答链构建:封装提示词、大模型调用、输出格式化全流程
  3. 批量数据处理工作流:结合batch方法实现大批量文本的分类、摘要、翻译等处理
  4. 大模型输出格式化流水线:串联多轮输出解析、校验逻辑,确保输出符合下游业务格式要求

相关条目