LangChain Chains 详解:释放现代 AI 工作流的威力
Updated on
LangChain 仍在快速演进,而 chain 依然是其中最核心的概念之一。本文将从 2025 的视角,系统讲清楚:LangChain 中的 Chain 到底是什么意思、它如何基于全新的 LCEL(LangChain Expression Language) 工作,以及它如何帮助开发者构建可靠的多步骤 AI 应用。
文章中的示例全部更新为当前推荐写法,用 Runnables、PromptTemplate、ChatModels 和 顺序流水线 替代过时的 LLMChain 等旧类。
什么是 LangChain?(2025 总览)
LangChain 是一个强大的 Python / JavaScript 框架,用来帮助开发者构建 AI 应用,它主要围绕以下能力:
- 大语言模型(LLMs)
- Prompt 模板
- Memory
- Tools & Agents
- Retrieval(RAG)
- Workflow graphs(LangGraph)
在这些概念中,最具代表性的就是 Chain:
一条可复用、可组合的流水线,把数据在多个步骤之间逐步传递:经过 prompts、models、tools、transformations 和 output parsers 等组件。
📘 想先了解基础概念?可以阅读我们的 LangChain 入门文章。
什么是 LangChain Chains?
在 2023 年,chains 通常通过 LLMChain 或自定义 Python 类来创建。
到了 2025 年,推荐的方式是使用 LCEL,它采用简洁、函数式的流水线语法:
chain = prompt | model | output_parser一个 Chain 本质上就是:
- 一串按顺序执行的步骤
- 被组合成一个可以直接调用的单元
- 前一步的输出会作为后一步的输入
现在的 LangChain 提供了:
- Simple Chains(单个 model + prompt)
- Sequential Chains(多步骤顺序执行)
- Parallel Chains(分支并行工作流)
- Agents(可以动态选择工具的 chain)
下面通过现代写法的示例来逐步拆解。
基础 Chains(2025 版)
一个最基础的 chain,只是用一个 prompt 调用一个 model。
from langchain.prompts import PromptTemplate
from langchain_openai import ChatOpenAI
prompt = PromptTemplate.from_template(
"Describe a perfect day in {city}."
)
model = ChatOpenAI(model="gpt-4o-mini")
chain = prompt | model
chain.invoke({"city": "Paris"})这里发生了什么?
- PromptTemplate 把模板格式化为
"Describe a perfect day in Paris." - LLM 根据这个 prompt 生成描述
- 结果会作为 ChatMessage 或字符串返回(取决于配置)
这是现代 LangChain 中最简单的一种 chain。
进阶 Chains:多步骤流水线
多步骤 chain 会把多个操作组合起来。
示例:用 LCEL 完成
总结 → 翻译 的两步任务:
from langchain.prompts import PromptTemplate
from langchain_openai import ChatOpenAI
summarize_prompt = PromptTemplate.from_template(
"Summarize this text:\n\n{text}"
)
translate_prompt = PromptTemplate.from_template(
"Translate this into Spanish:\n\n{summary}"
)
model = ChatOpenAI(model="gpt-4o-mini")
summarize_chain = summarize_prompt | model
translate_chain = translate_prompt | model
full_chain = summarize_chain | (lambda x: {"summary": x.content}) | translate_chain
full_chain.invoke({"text": "Climate change is causing rapid ocean warming..."})为什么这很重要?
这体现了 现代 LangChain 的最佳实践:
- 使用 Runnables,而不是旧的 chain 类
- 用
|做函数式组合 - 用普通 Python 函数在中间做数据映射和整理
不带 LLM 的 Chains(纯 Transform / 清洗流水线)
并不是所有 chain 都必须包含 LLM。你可以用 chain 来做各种 预处理 或 后处理 流水线。
示例:去空格 → 转小写 → 再交给 LLM:
def cleanup(text):
return text.strip().lower()
chain = cleanup | model
chain(" WHAT is the WEATHER LIKE? ")只要是接收并返回可序列化数据的 Python 函数,都可以直接放进 chain 里。
顺序 Chains(取代 SimpleSequentialChain)
SimpleSequentialChain 和 SequentialChain 都已经被弃用。
在 LCEL 中,它们的等价写法就是简单的:
chain = step1 | step2 | step3示例:清洗问题 → 重写问题 → 回答问题
from langchain_openai import ChatOpenAI
clean = lambda x: x.strip()
rewrite_prompt = PromptTemplate.from_template(
"Rewrite this more clearly: {text}"
)
answer_prompt = PromptTemplate.from_template(
"Answer this question: {question}"
)
model = ChatOpenAI(model="gpt-4o-mini")
rewrite_chain = rewrite_prompt | model
answer_chain = answer_prompt | model
chain = clean | (lambda x: {"text": x}) | rewrite_chain | (lambda x: {"question": x.content}) | answer_chain
chain.invoke(" What is LangChain used for? ")这就是现代写法中对 SimpleSequentialChain 的直接替代。
Agent 在 LangChain 中的角色(2025 版)
Agent 允许 LLM 动态选择工具,比如:
- 搜索引擎
- 代码执行
- 计算器
- 各类 API
- Retrievers
- 自定义函数
示例(现代语法):
from langchain.agents import AgentExecutor, load_tools, create_react_agent
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model="gpt-4o-mini")
tools = load_tools(["llm-math"], llm=llm)
agent = create_react_agent(llm, tools)
executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
executor.invoke({"input": "If I'm half my dad's age and he'll be 60 next year, how old am I?"})Agent 尤其适合下面这些场景:
- 需要复杂推理
- 需要在多种工具间做选择
- 包含多轮决策步骤
如果任务流程是固定的,简单的 chain 反而更清晰。
实战示例:电影推荐工作流(现代化版本)
下面用 LCEL 把经典的 “两个 LLM 的 chain” 示例现代化。
步骤 1 — 询问用户喜欢的电影类型
from langchain.prompts import PromptTemplate
from langchain_openai import ChatOpenAI
ask_prompt = PromptTemplate.from_template(
"Ask the user about their favorite movie genres."
)
ask_chain = ask_prompt | ChatOpenAI(model="gpt-4o-mini")步骤 2 — 给出电影推荐
recommend_prompt = PromptTemplate.from_template(
"Based on these genres: {genres}, recommend 5 movies."
)
recommend_chain = recommend_prompt | ChatOpenAI(model="gpt-4o-mini")组合两个步骤
chain = ask_chain | (lambda x: {"genres": x.content}) | recommend_chain
chain.invoke({})加入 Memory(现代写法)
from langchain.memory import ConversationBufferMemory
memory = ConversationBufferMemory(return_messages=True)
# pipelines can load memory before passing to next step你可以在 pipeline 中把 memory 注入到 prompt 输入中,或者按照自己的设计在各步骤之间传递。
总结
在 2024–2025 的版本中,LangChain 通过 LCEL pipelines、Runnables 和 Agents,让构建可扩展的 AI 工作流变得更加简单、清晰:
无论你是在:
- 做文本预处理
- 构建多步骤工作流
- 集成各种工具
- 搭建具备决策能力的 Agent
LangChain 都为你提供了可以自由拼装的基础积木,帮助你把一切有条理地连接起来。
大胆实验吧——很多强大的 AI 应用,都是从一个简单的 chain 逐步演化而来的。
FAQ(更新版)
-
什么是 LangChain?
LangChain 是一个用于构建 AI 应用的框架,围绕 prompts、models、tools、memory 和 workflow graphs 等组件来搭建系统。 -
SimpleSequentialChain 被什么取代了?
使用基于 LCEL 的流水线,用|运算符把各个 Runnable 依次连接起来。 -
我该如何在 chain 中加入 memory?
使用ConversationBufferMemory、SummaryMemory或自定义 memory,然后在 chain 的输入中注入它们。 -
Agent 现在还重要吗?
依然重要。当需要动态选择工具时,Agent 是合适方案;如果流程完全固定,使用 chain 会更简洁。 -
我可以去哪里深入学习?
可以查看 LangChain 官方文档,或者探索 LangGraph,了解基于工作流图的 Agent 编排方式。