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,