
LangChain框架入门手把手带你玩转LCEL表达LangChain 是当前大模型应用开发中最热门的框架之一而 LCELLangChain Expression LanguageLangChain 表达式语言则是其核心的“魔法棒”。它让我们能够用简洁、可读、可组合的方式将提示词、模型、输出解析器等组件“串联”成一条条强大的处理流水线。本文将带你从零开始循序渐进地掌握 LCEL 的核心概念与实战技巧。### 一、为什么需要 LCEL在 LCEL 出现之前我们通常需要编写大量的样板代码来调用模型、处理中间结果、解析输出。比如你需要手动管理 prompt 模板的填充、调用model.generate()、再手动提取文本。这种代码不仅冗长而且难以复用和扩展。LCEL 的核心设计理念是**“一切皆表达式”**。它提供了一种统一的管道操作符|让不同的组件像 Unix 管道命令一样无缝连接。数据流从左侧流向右侧每一步的输入就是上一步的输出。这种设计极大地简化了代码提升了可读性和可维护性。### 二、LCEL 基础三大核心组件LCEL 的三大核心组件是1.Prompt 模板负责将用户输入和固定指令组合成最终的提示词。2.模型Model通常是 ChatOpenAI 或其它大语言模型负责接收提示词并生成回复。3.输出解析器将模型的原始文本输出解析为结构化的数据如字典、列表、Pydantic 对象。我们来写第一个 LCEL 表达式完成一个最简单的“翻译官”功能。python# 导入必要的库from langchain.prompts import ChatPromptTemplatefrom langchain.chat_models import ChatOpenAIfrom langchain.schema import StrOutputParser# 1. 创建 Prompt 模板prompt ChatPromptTemplate.from_template( 请将以下英文翻译成中文{english_text})# 2. 初始化模型请设置你的 OPENAI_API_KEY 环境变量model ChatOpenAI(modelgpt-4o-mini, temperature0)# 3. 初始化输出解析器直接返回字符串parser StrOutputParser()# 4. 使用管道符构建 LCEL 链chain prompt | model | parser# 5. 调用链传入输入参数result chain.invoke({english_text: Hello, LangChain!})# 输出翻译结果print(result) # 输出你好LangChain代码解读-prompt是一个模板它接受一个变量english_text。-model是核心的语言模型。-parser将模型返回的AIMessage对象提取为纯字符串。-chain.invoke()是执行 LCEL 链的统一入口。数据流是输入字典 → prompt 生成完整提示词 → 模型生成回复 → 解析器输出字符串。### 三、进阶链式调用与 RunnablePassthroughLCEL 的强大之处在于它可以组合多个链并且可以在链中传递和变换数据。RunnablePassthrough允许我们直接传递未修改的输入或者配合itemgetter提取特定字段。下面我们构建一个更复杂的链它先进行关键词提取再进行回答同时保留原始输入。pythonfrom langchain.prompts import ChatPromptTemplatefrom langchain.chat_models import ChatOpenAIfrom langchain.schema import StrOutputParserfrom langchain.schema.runnable import RunnablePassthrough, RunnableParallel# 子链1提取关键词keyword_prompt ChatPromptTemplate.from_template(从以下文本中提取3个关键词用逗号分隔{text})keyword_chain keyword_prompt | ChatOpenAI(modelgpt-4o-mini) | StrOutputParser()# 子链2基于关键词和原文生成摘要summarize_prompt ChatPromptTemplate.from_template( 以下是用户输入{text}\n\n提取的关键词{keywords}\n\n请基于这些信息生成一份简洁的总结。)summarize_chain summarize_prompt | ChatOpenAI(modelgpt-4o-mini) | StrOutputParser()# 组合链并行执行关键词提取并保留原始输入chain ( RunnableParallel( { keywords: keyword_chain, text: lambda x: x[text] # 直接传递原始文本 } ) | summarize_prompt | ChatOpenAI(modelgpt-4o-mini) | StrOutputParser())# 执行result chain.invoke({text: LangChain 是一个强大的框架它简化了 LLM 应用的开发流程。})print(result)关键点-RunnableParallel可以并行执行多个子链例如keyword_chain并将结果组装成一个字典。- 我们使用lambda x: x[text]将原始输入传递给后续步骤而keywords则由子链生成。- 这样最终链能同时使用关键词和原文生成更高质量的总结。### 四、高级技巧条件分支与自定义函数LCEL 还支持条件逻辑和自定义函数这让它几乎可以处理任何复杂的业务逻辑。#### 1. 条件分支使用RunnableBranch可以根据输入内容动态选择不同的处理路径。pythonfrom langchain.schema.runnable import RunnableBranch, RunnableLambda# 定义一个函数判断文本长度def is_long(text: str) - bool: return len(text) 50# 定义两个分支long_chain RunnableLambda(lambda x: f处理长文本{x[:10]}...)short_chain RunnableLambda(lambda x: f处理短文本{x})# 构建分支链branch_chain RunnableBranch( (lambda x: is_long(x[text]), long_chain), # 如果条件为True执行long_chain short_chain # 否则执行short_chain)result branch_chain.invoke({text: 这是一个很短的文本})print(result) # 输出处理短文本这是一个很短的文本#### 2. 自定义函数通过RunnableLambda我们可以将普通 Python 函数无缝嵌入到 LCEL 链中。pythonfrom langchain.schema.runnable import RunnableLambdadef add_score(text: str) - str: 自定义函数给文本添加评分 score len(text) * 2 return f{text} (得分{score})chain ( RunnableLambda(lambda x: x[input_text]) # 提取输入 | RunnableLambda(add_score) # 应用自定义函数)print(chain.invoke({input_text: 你好})) # 输出你好 (得分4)### 五、与 LangSmith 集成调试与监控在实际开发中调试 LCEL 链非常方便。你可以使用chain.invoke()直接运行也可以通过chain.batch()批量处理。更重要的是LCEL 原生支持 LangSmith 追踪你可以查看每一步的输入输出快速定位问题。python# 开启 LangSmith 追踪需要环境变量 LANGCHAIN_TRACING_V2true# 然后你的链会自动记录所有运行日志# 批量调用示例results chain.batch([{input_text: 你好}, {input_text: 世界}])print(results)### 六、总结LCEL 是 LangChain 中极具革命性的设计它让复杂的大模型应用变得像拼积木一样简单。通过|管道符我们可以轻松组合 Prompt、模型、解析器、Runnable 等组件构建出可读性高、可扩展性强的 AI 应用。从简单的翻译到并行处理、条件分支、自定义函数LCEL 都提供了优雅的解决方案。掌握 LCEL 不仅提升了开发效率也为构建更复杂的 Agent、RAG 系统打下了坚实的基础。希望本文能为你打开 LangChain 世界的大门赶快动手试试吧