别再背 Chain、Agent、Memory 了:用一条“智能流水线”学会 LangChain

适合读者:会写基础 Python,知道 LLM 能对话,但还没有真正用过 LangChain。

版本说明 :本文按照 LangChain v1 的现行思路编写,示例需要 Python 3.10 或更高版本。旧教程里的 LLMChainConversationChain 等已归入 langchain-classic,不要把新旧 API 混着抄。

一上来就被术语砸懵了?很正常 😵

刚接触 LangChain 时,我脑子里大概是这样的:

"Chain 是链,Agent 是智能体,Memory 是记忆......每个英文单词我都认识,为什么放在一起就看不懂了?"

更让人困惑的是,网上的示例还可能来自不同版本。同一个"记住聊天记录"的需求,有人使用旧式 Memory 类,有人使用消息历史,还有人直接上 LangGraph。代码越搜越多,脉络反而越来越乱。

这篇文章不打算带你背 API。我们先做一件更重要的事:建立一张全局地图。读完后,你应该能回答三个问题:

  1. Model、Chain、Agent、Memory、Tool 分别解决什么问题?
  2. 什么场景应该用固定 Chain,什么场景才需要 Agent?
  3. 如何写出第一条可以运行的 LangChain 文档问答流程?

图 1:LangChain 负责"编排",模型才负责理解与生成。

先给 LangChain 一句人话定义

假设你开了一家内容加工厂。用户送来一个问题,工厂需要查资料、整理提示词、请模型生成内容、检查输出格式,最后把结果交出去。

如果全靠手写代码,你当然也能完成。但步骤一多,模型一换,错误处理、状态保存、流式输出和监控都会变得麻烦。

LangChain 就是一套 LLM 应用编排工具:它把模型、提示词、数据、工具和状态接成可执行流程。

它不是新的大模型,也不会让模型凭空变聪明。它更像"胶水"和"流水线控制器"。LangChain 官方目前把它定位为构建 LLM 应用与 Agent 的开源框架;需要更底层、更可控的图式工作流时,则可以继续使用 LangGraph。

五个核心概念,一次翻译清楚

1. Model:负责思考的"大脑" 🧠

Model 就是应用调用的语言模型,例如 OpenAI、Anthropic 或 Google 提供的聊天模型。它负责理解输入并生成输出。

LangChain 在这里做的事情,是提供相对统一的调用接口。你可以把不同厂商的模型想成不同品牌的电器,而 LangChain 尽量给它们配上相似的插座。

python 复制代码
from langchain.chat_models import init_chat_model
​
model = init_chat_model("openai:gpt-4.1-mini")
response = model.invoke("用一句话解释什么是 LangChain")
print(response.content)

需要注意:统一接口不等于模型能力完全相同。上下文窗口、工具调用、结构化输出、价格和延迟仍然取决于具体模型。

2. Chain:固定路线的"工厂流水线" 🏭

Chain 把多个步骤按预定顺序串起来。上一站的输出,就是下一站的输入。

例如一条文档问答 Chain:

复制代码
用户问题
读取或检索文档
拼接 Prompt
调用 Model
解析输出
返回答案

在现代 LangChain 中,很多 Chain 本质上是 Runnable 的组合。最直观的写法是用 | 连接:

ini 复制代码
chain = prompt | model | output_parser

读起来就像:"提示词交给模型,模型结果再交给解析器。"它的最大优点是顺序明确、容易测试、成本可预测

3. Agent:自己决定路线的"现场主管" 🤖

Chain 的路线由开发者提前规定;Agent 则会根据目标,动态决定下一步做什么。

比如用户问:"北京现在的天气适合跑步吗?"Agent 可能会:

  1. 判断需要实时天气;

  2. 调用天气工具;

  3. 读取温度、降水和空气质量;

  4. 再让模型给出建议;

  5. 信息不足时继续调用其他工具。

    需要外部信息
    信息足够
    用户目标
    Agent
    Model 判断下一步
    调用 Tool
    返回观察结果
    最终回答

这相当于给"大脑"配上手和眼睛。不过,自主性越高,路径越不确定,调试和成本控制也越难。

能用 Chain 解决的问题,先不要上 Agent。 固定流程适合稳定业务;只有步骤确实需要模型动态选择时,Agent 才有价值。

LangChain v1 中,create_agent 是创建 Agent 的标准入口。它底层使用 LangGraph 提供循环执行、状态和持久化等能力。

4. Memory:不是"无限记忆",而是可管理的状态 🗂️

模型 API 本身通常不会自动记住上一次请求。所谓 Memory,是应用把必要的历史或用户信息保存下来,并在后续调用时重新提供给模型。

现代 LangChain 把记忆分得更清楚:

  • 短期记忆:属于当前会话线程,例如最近几轮聊天和本轮工具结果;Agent 可通过 checkpointer 保存状态。
  • 长期记忆:跨会话保存,例如用户偏好、档案或长期事实;通常需要持久化存储。
python 复制代码
from langchain.agents import create_agent
from langgraph.checkpoint.memory import InMemorySaver
​
agent = create_agent(
    model="openai:gpt-4.1-mini",
    tools=[],
    checkpointer=InMemorySaver(),  # 仅适合本地演示
)
​
config = {"configurable": {"thread_id": "demo-user-1"}}

Memory 不是把全部聊天记录永远塞进 Prompt。上下文越长,成本越高,旧信息还可能干扰模型。生产环境通常需要裁剪、摘要、检索和数据库持久化。

5. Tool:给模型接上的"外部能力" 🛠️

LLM 擅长理解和生成语言,但它不知道今天的实时库存,也不应该靠猜完成精确计算。Tool 就是一个带有名称、说明和参数结构的可调用函数。

python 复制代码
from langchain.tools import tool
​
@tool
def query_inventory(product_id: str) -> int:
    """查询指定商品的实时库存数量。"""
    # 真实项目中,这里会调用数据库或业务 API
    return 42

函数说明非常重要,因为 Agent 会据此判断"什么时候该用这个工具"。工具可以查询搜索引擎、数据库和内部 API,也可以执行计算或触发业务动作。

但请记住:让 Agent 调用工具,等于授予它行动能力。 涉及付款、删除、发信等高风险操作时,应增加权限校验、参数验证和人工确认。

Chain 和 Agent,到底怎么选?

对比项 Chain Agent
执行路线 开发者预先规定 模型动态决定
可预测性 相对较低
调试难度 较低 较高,需要观察每一步
成本与延迟 容易估算 可能多轮调用
适合场景 摘要、分类、固定 RAG、结构化提取 多工具研究、开放式任务、动态排障

一个简单判断题:如果你能在画流程图时提前确定每一步,就优先使用 Chain;如果"下一步是什么"必须依赖模型刚刚看到的结果,再考虑 Agent。

最小可运行示例:做一条文档问答 Chain

我们先不引入向量数据库。目标很简单:把一小段内部文档和用户问题交给模型,并要求它只能依据文档回答。

图 2:代码中的 | 就是这条流水线的传送带。

第一步:准备环境

LangChain 当前要求 Python 3.10 或更高版本。创建虚拟环境并安装核心包与 OpenAI 集成:

python 复制代码
python -m venv .venv
​
# macOS / Linux
source .venv/bin/activate
​
# Windows PowerShell
# .venv\Scripts\Activate.ps1
​
python -m pip install -U langchain langchain-openai

设置 API Key。不要把密钥直接写进代码或提交到 Git:

python 复制代码
# macOS / Linux
export OPENAI_API_KEY="你的 API Key"
​
# Windows PowerShell
# $env:OPENAI_API_KEY="你的 API Key"

第二步:创建 app.py

python 复制代码
import os

from langchain.chat_models import init_chat_model
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate


# 1. 提前检查环境,避免请求发出后才发现没有密钥
if not os.getenv("OPENAI_API_KEY"):
    raise RuntimeError("请先设置 OPENAI_API_KEY 环境变量")


# 2. 这就是我们的"小文档";真实项目可替换为文件内容
document = """
《团队差旅手册》
1. 工作日出差的餐费补贴为每天 120 元。
2. 酒店费用上限为每晚 600 元;一线城市可上浮 20%。
3. 所有报销应在行程结束后的 30 天内提交。
""".strip()


# 3. Prompt 负责定义规则,并为文档和问题预留插槽
prompt = ChatPromptTemplate.from_messages(
    [
        (
            "system",
            "你是企业制度问答助手。只能依据给定文档回答;"
            "若文档没有答案,请明确说'文档中未说明'。\n\n"
            "文档:\n{document}",
        ),
        ("human", "问题:{question}"),
    ]
)


# 4. Model 是流水线中的"大脑"
# 如账号不可用该模型,可通过 LANGCHAIN_MODEL 替换为可用模型
model = init_chat_model(
    os.getenv("LANGCHAIN_MODEL", "openai:gpt-4.1-mini"),
    temperature=0,
)


# 5. Parser 把模型返回的消息对象转换成普通字符串
parser = StrOutputParser()


# 6. 用 | 把三个 Runnable 串成一条 Chain
chain = prompt | model | parser


# 7. invoke 会让输入依次经过 Prompt、Model 和 Parser
answer = chain.invoke(
    {
        "document": document,
        "question": "上海出差时,每晚酒店费用最高可以报销多少元?",
    }
)

print(answer)

运行:

python 复制代码
python app.py

预期输出

模型措辞可能略有差异,但结果应接近:

erlang 复制代码
上海属于一线城市,酒店费用上限可在 600 元基础上上浮 20%,
因此每晚最高可以报销 720 元。

这段代码到底发生了什么?

  1. ChatPromptTemplate 把制度、限制和问题组织成消息;
  2. init_chat_model 创建统一模型对象;
  3. StrOutputParser 把模型消息转换成便于程序使用的字符串;
  4. prompt | model | parser 生成一个 RunnableSequence
  5. invoke() 触发整条流水线。

这还不是完整 RAG,因为文档被整体放进了 Prompt。文档很小时,这种做法最容易理解;当资料变多,再升级为:

文档加载 → 文本切分 → Embedding → 向量存储 → 检索相关片段 → 生成回答

不要一开始就把所有组件装满。先跑通最小闭环,再逐步替换其中一站。

新手最容易踩的 5 个坑

坑 1:照抄旧教程,导入路径全部报错

LangChain v1 精简了主包,旧式 Chain 等能力被移到 langchain-classic。学习时先看文章发布日期和目标版本,优先使用当前官方文档。

坑 2:什么需求都做成 Agent

Agent 看起来更"智能",但多轮决策会增加延迟、费用和不确定性。分类、摘要、固定文档问答等任务通常用 Chain 更稳。

坑 3:把 Memory 当成无限聊天记录

上下文窗口有限,历史越长不一定越聪明。应根据业务做消息裁剪、摘要和长期信息检索,并用 thread_id 隔离不同会话。

坑 4:认为接入文档就不会胡说

Prompt 注入、不相关检索和文档冲突仍会导致错误。重要答案应显示来源,并建立测试问题集,而不是只看一次演示效果。

坑 5:只看最终答案,不看中间过程

Agent 出错时,问题可能来自模型决策、工具参数、工具结果或状态。使用 LangSmith 等追踪工具观察每一步,定位效率会高很多。

三阶段学习路线:从会调用到能交付

阶段一:入门------先把固定流程跑通

目标是理解 Model、Prompt、Parser 和 Runnable。

  • 完成一个摘要 Chain、一个分类 Chain、一个文档问答 Chain;
  • 练习 invokebatchstream
  • 学会通过环境变量切换模型,不在代码里硬编码密钥;
  • 能解释输入和输出在每一步是什么类型。

阶段二:进阶------让应用接触外部世界

目标是掌握 Retrieval、Tool、Agent 和 Memory。

  • 用文本切分、Embedding 和向量存储完成 2-Step RAG;
  • 写两个真实工具,例如天气查询和数据库只读查询;
  • 使用 create_agent,观察模型如何选择工具;
  • 用 checkpointer 保存短期状态,并理解短期与长期记忆的边界。

阶段三:实战------从 Demo 走向可靠系统

目标不是"功能能跑",而是"结果可控"。

  • 为关键问题建立输入、期望答案和评判标准;
  • 增加超时、重试、限流、权限校验与人工确认;
  • 记录延迟、Token、工具调用和失败原因;
  • 对高风险动作采用确定性代码,Agent 只负责建议或受控决策;
  • 需要复杂循环、分支和人工介入时,再深入 LangGraph。

推荐学习资源

  1. LangChain 官方文档:先看 Overview、Models、Tools、Agents 和 Memory。
  2. LangChain Retrieval 指南:系统理解检索流程与 2-Step RAG、Agentic RAG 的区别。
  3. LangChain Academy:官方课程,适合从基础 Agent 逐步过渡到 LangGraph 与 LangSmith。
  4. LangChain 官方 GitHub:查看源码、版本说明和真实 Issue,遇到 API 差异时尤其有用。
  5. DeepLearning.AI:LangChain for LLM Application Development:面向新手的短课程。课程中的部分 API 可能早于 v1,建议把它用于理解概念,并用官方迁移指南核对代码。

结语:LangChain 的价值,不在"Chain"这个名字

现在再看这五个概念:

  • Model 提供理解和生成能力;
  • Chain 执行预先规定的步骤;
  • Tool 把外部世界接进来;
  • Agent 动态选择下一步;
  • Memory 保存并管理状态。

LangChain 真正的价值,是把它们编排成一个可替换、可观察、可演进的系统。它不是模型本身,而是模型与真实业务之间的"胶水"。

如果你刚入门,今天只做一件事:把上面的最小示例跑起来,然后亲手增加一个问题。等你能清楚解释每一步的输入和输出,再去接向量数据库、Agent 和长期记忆,会轻松很多。

最后留一个问题:你在学习 LangChain 时,最先被哪个概念或版本差异卡住了?欢迎在评论区分享你的坑,也许正好能帮到下一位读者。


参考资料

相关推荐
晚安code12 分钟前
LangChain4j 入门:ChatModel 第一个 AI 对话实战
langchain
Lambert28117 分钟前
Spring AI 2.0 vs LangChain4j 1.19:MCP 新规范竞速,Spring AI 慢在哪
langchain·ai编程
晚安code24 分钟前
LangChain4j AiService 实战:会话记忆与结构化输出
java·langchain
Zane199429 分钟前
你以为的性能瓶颈,未必是真的瓶颈:用 cProfile 找到真凶
后端·python
晚安code30 分钟前
LangChain4j 实战:RAG、工具调用、护轨与 SSE 流式输出
java·langchain
DigitalOcean33 分钟前
GLM 5.3 已上线 DigitalOcean AI 推理云平台:Agent 任务的高性价比底座来了
llm·agent·chatglm (智谱)
铁手飞鹰1 小时前
VSCode Python .embed 嵌入式环境黄色波浪线问题
ide·vscode·python
辰辉创聚1 小时前
重组蛋白表达不出来怎么办?蛋白表达失败、低表达及异常原因解析
python·oracle·eclipse·重组蛋白·蛋白·western blot
淼澄研学1 小时前
基于Docker与iptables的AI智能体网络隔离实操指南
开发语言·python