跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonAI算法

LangChain 核心概念:Chain 与 LCEL 实战解析

LangChain Chain 机制通过串联组件实现多步骤任务流程。对比旧版 LLMChain 与新式 LCEL 范式,详解管道符语法、流式支持及适用场景,帮助开发者构建更灵活的大模型应用链路。

无尘发布于 2026/2/12更新于 2026/10/26113 浏览
LangChain 核心概念:Chain 与 LCEL 实战解析

LangChain 核心概念:Chain 与 LCEL 实战解析

1. 引言:为什么需要「Chain」?

在 LangChain 中,单个组件(如 PromptTemplate、ChatOpenAI)通常只能解决单一问题:提示模板负责格式化输入,大模型负责生成内容。但实际 AI 应用往往需要多步骤协作——比如'接收用户问题→填充提示模板→调用大模型→解析输出结果→存储到数据库'。

「Chain(链)」正是为解决这一需求而生:它像一条'流水线',将多个独立组件按逻辑顺序串联,形成可复用、可扩展的任务流程。类比 Java 中的责任链模式或工作流引擎,Chain 让复杂 AI 任务的开发从'零散拼接'变成'标准化组装'。

Chain 流程图

2. 核心概念:什么是 Chain?

2.1 Chain 的定义

Chain 是 LangChain 构建语言模型应用的核心组件,本质是「多个处理单元(模型/工具/逻辑)的有序组合」,用于实现端到端的任务流程。

2.2 用 Java 责任链模式类比理解

如果你熟悉 Java,可以通过以下代码快速 get Chain 的设计思想:

// 1. 定义处理单元接口(类似 LangChain 的 Runnable)
public interface Handler {
    void handle(Request request);
}

// 2. 实现具体处理单元(类似 LangChain 的 Prompt、LLM、Parser)
class ValidationHandler implements Handler {
    // 第一步:验证用户输入合法性
    @Override
    public void handle(Request request) {
        if (request.getContent() == null) {
            throw new IllegalArgumentException("输入不能为空");
        }
    }
}

class LLMProcessingHandler implements Handler {
    
    
       {
           llmClient.generate(request.getContent());
        request.setLlmResult(result); 
    }
}

    {
    
    
       {
        dbClient.save(request.getLlmResult());
    }
}


   {
        {
        List<Handler> chain = Arrays.asList(
             (),
             (),
             ()
        );
            ();
         (Handler handler : chain) {
            handler.handle(request); 
        }
    }
}
// 第二步:调用大模型处理
@Override
public
void
handle
(Request request)
String
result
=
// 传递结果给下一个单元
class
DatabaseSaveHandler
implements
Handler
// 第三步:存储结果到数据库
@Override
public
void
handle
(Request request)
// 3. 构建 Chain 并执行(类似 LangChain 的链组装)
public
class
ChainDemo
public
static
void
main
(String[] args)
new
ValidationHandler
new
LLMProcessingHandler
new
DatabaseSaveHandler
Request
request
=
new
Request
"如何学习 AI 大模型?"
for
// 按顺序执行

2.3 Chain 的核心价值

  • 解耦组件:每个单元只负责单一职责(验证/生成/存储),便于维护和替换;
  • 流程复用:定义好的 Chain 可在多个场景中重复调用(如'问答→存储'链);
  • 扩展灵活:可随时新增/删除处理单元(如在'生成'后加'结果脱敏'单元)。

3. 基础链实战:LLMChain

LLMChain 是 LangChain 中最基础的链,专门用于'提示模板 + 大模型'的简单组合,负责'填充模板→调用模型→返回结果'的单步流程。

注意:LLMChain 是旧版(LangChain 0.2 及之前)的核心链,目前 LangChain 0.3+ 已推荐使用 LCEL,但 LLMChain 仍被保留,适合入门理解链的本质。

3.1 LLMChain 的核心构成

LLMChain 由 3 个核心部分组成,参数说明如下表:

参数名作用类比 Java 场景示例值
llm依赖的大模型实例注入的第三方服务客户端ChatOpenAI(model_name="qwen-plus")
prompt预定义的提示词模板(含动态变量)带占位符的 String 模板PromptTemplate(input_variables=["product"], template="列举{product} 的 3 个卖点")
output_parser(可选)模型输出的后处理器JSON 解析工具(如 Jackson)CommaSeparatedListOutputParser()

3.2 LLMChain 完整实战案例

3.2.1 环境准备

需先安装 LangChain 相关依赖:

pip install langchain langchain-openai
3.2.2 代码实现(含详细注释)
# 1. 导入依赖
from langchain_openai import ChatOpenAI
from langchain.chains import LLMChain
from langchain_core.prompts import PromptTemplate

# 2.1 定义提示词模板(动态变量为 product)
# 类似 Java 的 String.format("列举%s 的 3 个卖点", product)
prompt_template = PromptTemplate(
    input_variables=["product"], # 声明动态变量
    template="你是文案高手,请列举{product} 的 3 个核心卖点,每个卖点用简短短语描述:"
)

# 2.2 初始化大模型(以阿里通义千问为例,需替换为自己的 api_key)
model = ChatOpenAI(
    model_name='deepseek-r1:7b', # 本地模型名称,根据实际情况填写
    base_url="http://127.0.0.1:11434/v1", # 本地模型 API 地址
    api_key="none", # 本地模型通常不需要真实 API 密钥
    temperature=0.7 # 可根据需要调整温度参数
)

# 3. 构建 LLMChain(组装模板和模型)
llm_chain = LLMChain(
    llm=model, # 注入模型
    prompt=prompt_template # 注入提示模板
)

# 4. 调用链(注意:需传递包含动态变量的字典)
# 旧版 run() 方法已淘汰,LangChain 0.3+ 统一用 invoke()
result = llm_chain.invoke({"product": "大模型"}) # 变量 product 赋值为'大模型'

# 5. 输出结果
print("LLMChain 输出结果:")
print(result["text"]) # result 是字典,key 为'text'(默认输出键)
3.2.3 运行结果示例
LangChainDeprecationWarning: The class `LLMChain` was deprecated in LangChain 0.1.17 and will be removed in 1.0. Use :meth:`~RunnableSequence, e.g., `prompt | llm`` instead.
LLMChain 输出结果:

1. **数据驱动** 大模型基于海量数据,提供准确、可靠的内容生成与分析。
2. **自然流畅的输出** 支持多种语言,精准理解用户意图,生成自然地道的语言内容。
3. **轻松应对复杂任务** 灵活处理多种应用场景,快速响应专业或创意需求,满足多领域应用需求。
Process finished with exit code 0

运行结果截图

3.3 LLMChain 的适用场景

LLMChain 仅适合简单的单步任务,例如:

  • 生成某产品的文案/卖点;
  • 翻译指定文本(模板为'将{text}翻译成英文');
  • 给文章起标题(模板为'给{article_content} 起 3 个标题')。

局限性:无法实现多步骤流程(如'生成卖点→存储到 Excel'),需用更复杂的链(如 SequentialChain)或新版 LCEL。

4. 新范式实战:LCEL(LangChain Expression Language)

LCEL 是 LangChain 0.3+ 推出的声明式编程语言,核心思想是用「管道符|」串联组件,替代旧版的类继承式链,解决了 LLMChain 的灵活性不足问题。

4.1 为什么需要 LCEL?

旧版 Chain(如 LLMChain)存在以下痛点:

  • 多组件组合繁琐(如'模板 + 模型 + 解析器'需手动封装);
  • 不支持流式响应(无法实现 ChatGPT 的'逐字输出'效果);
  • 同步/异步调用不统一(需分别处理同步 run() 和异步 arun())。

LCEL 的核心优势正是解决这些痛点:

  1. 代码极简:用|串联组件,如 prompt | model | parser;
  2. 原生支持流式:可直接返回迭代器,实现'逐字输出';
  3. 标准化接口:所有组件均实现 Runnable 协议,输入输出均为字典,无缝衔接;
  4. 高级功能内置:支持调试、重试、并行调用(如同时调用两个模型对比结果)。

4.2 LCEL 的核心语法

LCEL 的核心是「管道符|」,规则如下:

  • 左侧组件的输出 → 作为右侧组件的输入;
  • 所有组件的输入/输出均为字典格式(键为变量名,值为数据);
  • 链的最终调用用 invoke()(同步)、ainvoke()(异步)或 stream()(流式)。

语法结构示例:

# 组件 1:提示模板(输入:question;输出:格式化后的 prompt)
prompt = ChatPromptTemplate.from_template("回答问题:{question}")
# 组件 2:大模型(输入:格式化后的 prompt;输出:模型原始响应)
model = ChatOpenAI(...)
# 组件 3:输出解析器(输入:模型原始响应;输出:纯文本)
parser = StrOutputParser()
# 用 | 串联成链
chain = prompt | model | parser
# 调用链(输入字典需包含 question 变量)
result = chain.invoke({"question":"如何学习 AI 大模型?"})

4.3 LCEL 完整实战案例(对比旧版 LLMChain)

4.3.1 案例需求

实现'接收用户问题→生成格式化提示→调用模型→解析纯文本输出'的流程,对比 LCEL 与 LLMChain 的代码差异。

4.3.2 代码实现(LCEL 版 vs LLMChain 版)
# 导入依赖(LCEL 需额外导入输出解析器)
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI
from langchain.chains import LLMChain

# 初始化大模型(两版共用)
model = ChatOpenAI(
    model_name='deepseek-r1:7b', # 本地模型名称,根据实际情况填写
    base_url="http://127.0.0.1:11434/v1", # 本地模型 API 地址
    api_key="none", # 本地模型通常不需要真实 API 密钥
    temperature=0.7 # 可根据需要调整温度参数
)

# --------------------------
# 方式 1:新版 LCEL 实现(推荐)
# --------------------------
print("=== LCEL 版输出 ===")
# 1. 定义提示模板(用 ChatPromptTemplate,支持多轮对话格式)
lcel_prompt = ChatPromptTemplate.from_template("你是 AI 学习顾问,请用 3 个步骤回答:{question}")
# 2. 定义输出解析器(将模型响应转为纯文本)
parser = StrOutputParser()
# 3. 用管道符串联组件(prompt → model → parser)
lcel_chain = lcel_prompt | model | parser
# 4. 调用链(输入为字典,key 与模板变量一致)
lcel_result = lcel_chain.invoke({"question":"零基础如何学习 AI 大模型?"})
print(lcel_result)

# --------------------------
# 方式 2:旧版 LLMChain 实现
# --------------------------
print("\n=== LLMChain 版输出 ===")
# 1. 定义提示模板
llmchain_prompt = ChatPromptTemplate.from_template("你是 AI 学习顾问,请用 3 个步骤回答:{question}")
# 2. 构建 LLMChain(需显式传入 llm 和 prompt)
llm_chain = LLMChain(
    llm=model,
    prompt=llmchain_prompt
)
# 3. 调用链(需传递字典参数)
llmchain_result = llm_chain.invoke({"question":"零基础如何学习 AI 大模型?"})
print(llmchain_result["text"])
4.3.3 运行结果对比

两者输出逻辑一致,但 LCEL 代码更简洁(少了显式的 LLMChain 封装):

=== LCEL 版输出 ===

学习人工智能大模型可以从以下三个步骤开始:
1. **建立基础知识**:
 - 学习数学:从基础的代数、微积分和统计学入手,理解线性代数、微积分和概率论在 AI 中的应用。
 - 掌握编程:选择 Python 作为学习语言,掌握数据结构、算法和基础编程概念。可以通过在线课程或书籍逐步学习。
2. **了解机器学习与深度学习**:
 - 学习概念:研究监督学习、无监督学习和强化学习的基本原理,理解神经网络和深度学习的运作机制。
 - 实践操作:尝试构建一个简单的分类模型,使用 TensorFlow 或 PyTorch 进行数据处理和模型训练。
3. **实践与应用**:
 - 开发项目:利用开源库构建和训练模型,如训练一个分类器或生成式 AI 工具。
 - 关注前沿:追踪 AI 研究进展,了解大模型的最新发展和应用案例,确保理解和应用符合伦理规范。
=== LLMChain 版输出 ===
D:\a-pythonProject\ai-langchain\main.py:355: LangChainDeprecationWarning: The class `LLMChain` was deprecated in LangChain 0.1.17 and will be removed in 1.0. Use :meth:`~RunnableSequence, e.g., `prompt | llm`` instead.
llm_chain = LLMChain(

零基础学习 AI 大模型可以分为以下三个步骤:
1. **打好数学和编程基础**
 - 学习线性代数、概率统计、微积分等数学知识。
 - 掌握 Python 编程,了解数据结构、算法和库如 NumPy、Pandas 的使用。
2. **实践操作,搭建 AI 模型项目**
 - 利用开源框架(如 TensorFlow、PyTorch)开始小规模项目,如文本分类或图像识别。
 - 参考教程和案例,逐步学习构建和优化模型。
3. **持续学习与优化模型**
 - 关注新技术如大语言模型进展、模型压缩等。
 - 不断优化模型性能,并将新知识应用到实际项目中,提升模型效果。
Process finished with exit code 0

5. 旧版 Chain vs 新版 LCEL 核心差异

为了帮助大家快速选择,整理两者的关键差异如下表:

对比维度旧版 Chain(如 LLMChain)新版 LCEL(LangChain 0.3+)
构建方式类继承(需实例化 Chain 子类)声明式管道(`
代码简洁度繁琐(需显式封装 Chain)极简(一行串联多个组件)
流式响应不支持原生支持(stream() 方法)
异步调用需用 arun(),接口不统一原生支持(ainvoke()/astream())
组件兼容性仅支持 Chain 子类支持所有实现 Runnable 协议的组件
高级功能无(需手动实现重试、并行)内置调试、重试、并行调用
适用场景入门学习、简单单步任务生产级应用、复杂多步骤流程

6. 总结

6.1 核心总结

  1. Chain 的本质:组件的有序串联,解决多步骤 AI 任务的流程化问题;
  2. LLMChain 定位:基础入门链,适合理解'模板 + 模型'的简单组合,已逐步被 LCEL 替代;
  3. LCEL 优势:LangChain 0.3+ 的推荐范式,用 | 简化组装,支持流式、异步,适合生产场景。

目录

  1. LangChain 核心概念:Chain 与 LCEL 实战解析
  2. 1. 引言:为什么需要「Chain」?
  3. 2. 核心概念:什么是 Chain?
  4. 2.1 Chain 的定义
  5. 2.2 用 Java 责任链模式类比理解
  6. 2.3 Chain 的核心价值
  7. 3. 基础链实战:LLMChain
  8. 3.1 LLMChain 的核心构成
  9. 3.2 LLMChain 完整实战案例
  10. 3.2.1 环境准备
  11. 3.2.2 代码实现(含详细注释)
  12. 1. 导入依赖
  13. 2.1 定义提示词模板(动态变量为 product)
  14. 类似 Java 的 String.format("列举%s 的 3 个卖点", product)
  15. 2.2 初始化大模型(以阿里通义千问为例,需替换为自己的 api_key)
  16. 3. 构建 LLMChain(组装模板和模型)
  17. 4. 调用链(注意:需传递包含动态变量的字典)
  18. 旧版 run() 方法已淘汰,LangChain 0.3+ 统一用 invoke()
  19. 5. 输出结果
  20. 3.2.3 运行结果示例
  21. 3.3 LLMChain 的适用场景
  22. 4. 新范式实战:LCEL(LangChain Expression Language)
  23. 4.1 为什么需要 LCEL?
  24. 4.2 LCEL 的核心语法
  25. 组件 1:提示模板(输入:question;输出:格式化后的 prompt)
  26. 组件 2:大模型(输入:格式化后的 prompt;输出:模型原始响应)
  27. 组件 3:输出解析器(输入:模型原始响应;输出:纯文本)
  28. 用 | 串联成链
  29. 调用链(输入字典需包含 question 变量)
  30. 4.3 LCEL 完整实战案例(对比旧版 LLMChain)
  31. 4.3.1 案例需求
  32. 4.3.2 代码实现(LCEL 版 vs LLMChain 版)
  33. 导入依赖(LCEL 需额外导入输出解析器)
  34. 初始化大模型(两版共用)
  35. --------------------------
  36. 方式 1:新版 LCEL 实现(推荐)
  37. --------------------------
  38. 1. 定义提示模板(用 ChatPromptTemplate,支持多轮对话格式)
  39. 2. 定义输出解析器(将模型响应转为纯文本)
  40. 3. 用管道符串联组件(prompt → model → parser)
  41. 4. 调用链(输入为字典,key 与模板变量一致)
  42. --------------------------
  43. 方式 2:旧版 LLMChain 实现
  44. --------------------------
  45. 1. 定义提示模板
  46. 2. 构建 LLMChain(需显式传入 llm 和 prompt)
  47. 3. 调用链(需传递字典参数)
  48. 4.3.3 运行结果对比
  49. 5. 旧版 Chain vs 新版 LCEL 核心差异
  50. 6. 总结
  51. 6.1 核心总结

更多推荐文章

查看全部
  • C++量子计算内存优化实战与关键技术
  • Node.js 安装指南(Windows 版本)
  • RAG 系统实战:Langchain 框架与纯手搓实现对比
  • 腾讯 RecSys'24:基于行为微调 LLM 初始化物品 Embedding 的高效推荐方法
  • SQL 语言全面详解
  • 开源机器人 AI 框架 LeRobot 入门与实践
  • Claude Skills 技能详解与最佳实践
  • SpringBoot 整合 LangChain4j 实现 RAG 检索实战
  • IntelliJ IDEA Python 开发环境配置与实战
  • 网络安全从业者常用术语与行话解析
  • 大模型提示工程核心技巧与实战应用
  • 基于 YOLO11 的无人机航拍小目标检测系统实战
  • RocketMQ 与 RabbitMQ 深度对比:架构、性能与选型
  • VSCode 远程 SSH 连接下 Copilot 无法使用 Claude 及 Agent 模式的解决方案
  • Docker Desktop + WSL2 安装配置与核心应用实战
  • 归并排序非递归实现详解:自底向上策略
  • MySQL MGR 集群部署实战:基于 InnoDB Cluster 与 MySQL Router
  • 英文大语言模型中文指令微调实战指南
  • 深度学习基础与图像识别系统开发
  • 2026 年十大 AI 编程工具实测与选型指南

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online