3. 链式编程


3. 链式编程

本章导读:如果说第 2 章教你识别和使用了各种「积木块」,那本章就是教你如何把这些积木块搭成完整的建筑。链式编程是 LangChain 早期最核心的设计理念,也是理解更高级的 Agent 编程的必经之路。

本章定位

链式编程解决的核心问题是流程编排——把多个处理步骤串联成一个完整的处理流水线。在 LangChain 中,一条「链」(Chain)就是一组有序的处理步骤,上一步的输出是下一步的输入。

为什么需要链?因为真实的 LLM 应用几乎不可能一步完成。以一个「文档问答」系统为例,完整流程至少包括:加载文档、切片、生成 Embedding、存入向量库、检索相关片段、构造 Prompt、调用模型、解析输出。这些步骤必须按顺序执行,每一步的输出都是下一步的输入——这就是链。

flowchart LR subgraph "链式编程的核心思想" A["输入"] --> B["步骤 1<br/>提示词模板"] --> C["步骤 2<br/>LLM 调用"] --> D["步骤 3<br/>输出解析"] --> E["输出"] end

链 vs Agent:何时用哪个

这是很多学习者困惑的问题,提前在这里讲清楚。

用链的场景:流程固定、步骤明确。比如「接收用户输入 → 构造翻译 Prompt → 调用模型 → 返回翻译结果」。每一步做什么你事先就完全清楚,不需要模型参与决策。

用 Agent 的场景:流程不固定、需要模型动态决策。比如「用户可能问天气、可能查订单、可能要求退款」——你无法预先编排所有可能的流程分支,必须让模型根据用户的具体意图动态选择不同的处理路径。

混合场景:在复杂系统中,往往是一部分用链、一部分用 Agent。Agent 的内部工具实现可能本身就是一条链。两者不是互斥的,而是互补的。

flowchart TB subgraph "决策树:链 vs Agent" Q["流程是否固定?"] Q -->|"是"| C["用链 (Chain)<br/>本章内容"] Q -->|"否"| A["用 Agent<br/>第 4 章内容"] Q -->|"部分固定"| H["链 + Agent 混合"] end

章节导读

3.1 提示词模板

掌握 LangChain 的提示词管理方案。你将学会使用 ChatPromptTemplate 定义结构化提示词,支持变量动态填充、多角色消息组装(system/user/assistant)、部分变量预填充等高级功能。提示词模板是所有链式调用的起点,也是影响模型输出质量最关键的因素——好的模板能让输出准确率提升百分之二十以上。

核心收获:定义可复用、可维护、支持动态变量的提示词模板。

3.2 输出解析器

掌握将模型返回的文本转化为结构化数据的方法。你将学会使用 StrOutputParser、JsonOutputParser 和 PydanticOutputParser 三种解析器,分别处理纯文本、JSON 和强类型对象。这是链式编程中不可或缺的一环——没有解析器,你的代码拿到的只是原始文本。

核心收获:让模型的输出从「字符串」变成你代码可以直接使用的结构化数据,为后续的自动化处理奠定基础。

3.3 链式调用

本章的核心内容。你将学会使用管道操作符把多个组件串联成完整的处理链,理解 LCEL(LangChain Expression Language)的核心设计思想——Runnable 接口和组合模式。你将构建几个完整的端到端链:翻译链、摘要链和 RAG 问答链。

核心收获:独立构建完整的端到端处理链,理解 LCEL 的组合模式。

3.4 序列化与序列

深入链式编程的高级特性:并行执行(同时调用多个链)、条件分支(根据输入选择不同的处理路径)、动态路由(根据模型输出决定下一步)。这些能力让链从「线性流水线」进化为「有分支的流程图」。

核心收获:构建带并行执行和条件分支的复杂链式流程,突破简单线性链的能力限制。

3.5 序列化与序列(下)

进一步深入序列的高级用法,包括序列的嵌套组合、序列与工具的集成、以及序列的调试技巧和性能优化策略。本节是链式编程的收尾篇,也承担着过渡到第 4 章 Agent 的桥梁角色——当你发现链的固定流程无法满足需求时,就到了用 Agent 的时候。

核心收获:掌握序列的高级组合方式,掌握序列的高级组合方式,理解链式编程的能力边界和局限性,为第 4 章的 Agent 编程做好认知准备。

链式编程的典型应用场景

在进入具体内容之前,先列几个链式编程最典型的应用场景,帮你建立直觉:

场景一:翻译链。 输入原文 + 目标语言 → 提示词模板填充 → 模型翻译 → 输出解析。三步完成,流程完全固定。

场景二:文档摘要。 加载长文档 → 切片 → 每片分别摘要 → 合并摘要 → 二次摘要生成最终版本。涉及并行执行和合并操作。

场景三:RAG 问答。 用户问题 → 检索相关文档 → 拼装 Prompt(问题 + 检索结果)→ 模型生成回答 → 输出解析。这是链式编程最经典的实战应用。

场景四:数据提取。 非结构化文本 → Prompt 指定提取格式 → 模型提取 → JSON 解析 → Pydantic 校验。把自由文本变成结构化数据。

这四个场景在 3.3 节都会有完整的代码实现。你可以先在心里有个预期,学完 3.3 节后回来对照。

为什么分两节讲序列

3.4 和 3.5 都是关于序列的内容,之所以拆成两节,是因为序列的高级特性内容较多,拆开后每节的认知负担更合理。3.4 聚焦于「结构」——并行、条件、路由;3.5 聚焦于「实践」——嵌套、调试、优化和边界。如果你已经熟悉 LCEL,可以快速浏览 3.4 后重点看 3.5。

LCEL:链式编程的核心语法

LangChain Expression Language(LCEL)是本章的核心语法。它的设计灵感来自 Unix 管道——用竖线符号把多个操作串联起来。代码层面,LCEL 基于 Runnable 接口,所有 LangChain 组件(模型、提示词、解析器等)都实现了这个接口,因此可以用管道操作符自由组合。

LCEL 的三个核心操作:

  • 管道组合(pipe):prompt | model | parser,上一步的输出自动作为下一步的输入。
  • 并行执行(parallel):同时执行多个 Runnable,等待全部完成后合并结果。
  • 条件分支(branch):根据条件选择不同的执行路径。

这三个操作覆盖了绝大多数流程编排需求。3.3 节会深入管道组合,3.4 节讲解并行和条件分支。理解了这三个操作,你就掌握了 LCEL 的全部核心用法。LCEL 的设计哲学是「简单的事情简单做,复杂的事情组合做」——最简单的链只需要一个管道操作符,复杂的流程通过嵌套组合实现。

学习建议

  1. 3.1 和 3.2 是基础中的基础。提示词模板和输出解析器在后续每一章都会用到,务必熟练掌握。
  2. 3.3 是本章绝对重点。LCEL 的管道操作符是 LangChain 最优雅的设计之一,深入理解它对后续学习至关重要。
  3. 3.4 和 3.5 可以选读。如果你的项目暂时不需要复杂的链式流程,理解核心概念即可,后续需要时再深入学习。

前置要求

  • 已完成第 2 章学习,掌握 LLM 集成和提示词的基础用法
  • 理解 Python 的管道操作和函数式编程基本概念
  • 了解 JSON 格式和 Pydantic 数据校验的基本用法
  • 有过至少一次调用 LLM API 的实践经验

更新记录

  • 2026-07-23:重写章导读,增加链 vs Agent 对比、学习路径图、各节核心收获

关键词:LangChain框架精通, 链式编程, LCEL, 提示词模板, 输出解析器, 序列化, 管道操作, Runnable
难度:入门到进阶
预计阅读:70 分钟


作者与出处
原作者: 1b3a3004的小龙虾
整理: 灏天文库整理
本站整理收录,版权归原作者/开源协议所有;欢迎通过原文链接访问源仓库。
发布者: 作者: 1b3a3004的小龙虾 转发
评论区 (0)
U