LangChain 生态四件套关系与作用
前言
接触 LangChain 生态时,常见困惑是:LangChain 和 LangGraph 都要装吗?
Deep Agents 是不是又一套框架?
LangSmith 不开源能不能不用?
本文不展开具体 API,只说明四者在 Agent 开发栈 里的位置、各自解决什么问题,以及怎样组合选型。
下文示例依赖用 uv 管理 Python 环境与包;概念与版本以官方 2025~2026 文档为准。
总览
官方把 Agent 相关开源组件分为三层,LangSmith 作为横切平台叠在上面。
依赖方向可以概括为:
- LangGraph 负责「怎么跑、怎么存状态、怎么中断与恢复」。
- LangChain 怎么快速拼 Agent」的抽象与集成。
- Deep Agents 提供开箱即用的复杂 Agent 能力。
- LangSmith 不参与执行逻辑,贯穿开发与上线,负责可观测与质量保障。
分层说明
LangGraph
LangGraph 是 Agent Runtime(运行时 / 编排引擎),关注「工作流如何执行」,而不是「提示词怎么写」。
它提供的能力包括:
- 持久化执行:任务失败或中断后可从检查点恢复,适合长时运行。
- 流式输出:按节点或 token 推送中间结果。
- Human-in-the-loop:在任意节点暂停,人工审阅或改写状态后继续。
- 状态图编排:用
StateGraph把确定性步骤与 LLM 决策步骤混在同一张图里。
你可以 不依赖 LangChain 单独使用 LangGraph,直接定义节点与边。
但当需求只是标准「模型 + 工具循环」时,手写图往往成本偏高。
LangChain
LangChain 是 Agent Framework(框架层),关注「用什么抽象把模型、工具、提示词拼成应用」。
LangChain 1.x 主包已收敛到 Agent 构建所需核心能力,典型入口是 create_agent。
它封装了模型初始化(init_chat_model)、工具(@tool)、中间件(Middleware)等,让常见 Agent 不必从零画 LangGraph 图。
重要关系:LangChain 1.0 的 Agent 构建在 LangGraph 之上。
因此使用 create_agent 时,你已经在间接使用 LangGraph 的持久化、流式等运行时能力,只是不必手写图结构。
适合场景:
- 快速搭一个可调工具、可插 Middleware 的 Agent。
- 团队需要统一模型与工具接入方式。
- 编排逻辑相对标准,暂不需要完全自定义状态机。
Deep Agents
Deep Agents 是 Agent Harness(.harness / 开箱即用套件),在 LangGraph 与 LangChain Agent 之上,预置了复杂任务常见能力。
内置能力包括:
- 任务规划:可选 todo 列表,拆解多步目标。
- 子 Agent:把子任务委派给独立上下文窗口中的子 Agent。
- 虚拟文件系统:读写、检索大段工具结果,避免主上下文被撑爆。
- 上下文管理:摘要历史、卸载超大工具输出。
- Skills:按场景加载领域知识与操作指引。
入口是 create_deep_agent,API 形态与 create_agent 相近,但默认「电池更满」。
适合场景:
- 研究型、编码型、文档分析等 多步、非确定性 任务。
- 希望少写 Middleware 和文件管理逻辑,尽快跑通复杂 Agent。
- 需要子 Agent 并行、大结果落盘后再 grep / 分析。
若任务只是单次问答或简单工具调用,Deep Agents 可能过重;此时 LangChain create_agent 更轻。
LangSmith
LangSmith 是 平台层(Platform),由 LangChain 公司提供,与上面三个开源包 正交。
无论你用 LangChain、LangGraph 还是 Deep Agents,都可以(也建议在生产前)接入 LangSmith。
主要作用:
- Tracing(追踪):记录每次调用的输入、工具调用、状态迁移与延迟,便于调试「Agent 为什么选了这个工具」。
- Evaluation(评估):对数据集跑批量评测,对比不同提示词或模型版本。
- Prompt 管理:集中维护与版本化提示词(团队协同时有用)。
- Deployment(部署):将 Agent 部署到托管环境,配合监控与扩缩容。
接入方式通常只需环境变量,例如开启追踪:
1 | export LANGSMITH_TRACING=true |
LangSmith 不是运行 Agent 的必需依赖;本地开发可以完全不装。
但一旦进入联调、压测或上线,缺少可观测性会让 Agent 问题极难定位。
如何选型
按「控制粒度 vs 开箱能力」从低到高排列:
| 组件 | 抽象层级 | 典型诉求 |
|---|---|---|
| LangGraph | 最低 | 自定义编排、混合确定性步骤与 Agent 步骤、完全掌控状态机 |
| LangChain | 中等 | 标准 Agent 循环、Middleware 扩展、快速集成多厂商模型 |
| Deep Agents | 较高 | 长时复杂任务、规划与子 Agent、内置文件系统与上下文工程 |
| LangSmith | 横切 | 追踪、评测、监控,与选用哪一层框架无关 |
可参照下面的决策顺序:
- 只需聊天 + 少量工具 → LangChain
create_agent。 - 需要精细控制每一步流转、或工作流含大量非 LLM 节点 → LangGraph 直接构图。
- 任务步骤多、上下文大、常要拆子任务 → Deep Agents。
- 任何非玩具项目 → 尽早接 LangSmith(或同类 APM),至少打开 Tracing。
三者并非互斥:Deep Agents 内部用 LangChain Agent 与 LangGraph;LangChain Agent 内部用 LangGraph 运行时。
选型本质是「你愿意自己实现多少 harness 能力」。
依赖
跑下文示例前,在项目目录用 uv 初始化并安装对应包。
按需安装,不必一次装齐。
LangChain 与 LangGraph 示例:
1 | uv init |
Deep Agents 示例额外安装:
1 | uv add deepagents |
运行脚本时使用 uv run python your_script.py,会自动使用当前项目的虚拟环境与锁文件。
协作示例
下面用极简代码说明三层如何嵌套,以及 LangSmith 如何旁路接入。
示例省略 API 密钥,模型名请按环境替换;保存为 .py 文件后通过 uv run python 执行。
LangChain 层:最小 Agent,底层已是 LangGraph 运行时。
1 | from langchain.agents import create_agent |
Deep Agents 层:同样声明模型与工具,但 harness 自带规划、文件系统等能力。
1 | from deepagents import create_deep_agent |
LangGraph 层:完全手写状态图,适合自定义节点逻辑。
1 | from langgraph.graph import END, START, MessagesState, StateGraph |
LangSmith 层:在运行上述任意代码前设置环境变量,即可在控制台看到 Trace,无需改业务代码。
1 | export LANGSMITH_TRACING=true |
常见误解
LangChain 与 LangGraph 二选一?
不是。
LangChain 1.x Agent 已基于 LangGraph;选 LangChain 不等于抛弃 LangGraph,而是使用封装好的运行时。Deep Agents 替代 LangChain?
不是替代,是更高层的 harness。
Deep Agents 仍构建在 LangChain Agent 与 LangGraph 之上;简单场景用 LangChain 即可。不用 LangSmith 就不能用 LangChain?
可以。
LangSmith 是可选平台;开源三件套本地可独立运行。LangGraph 只能做 Agent?
不限于 Agent。
任何有状态、可持久化的 LLM 工作流(含纯链式、含人工审核节点)都适合用 LangGraph 编排。
总结
- LangGraph 管运行时:持久化、流式、中断、状态图编排,抽象层级最低。
- LangChain 管框架:模型 / 工具 / Middleware /
create_agent,适合标准 Agent 快速落地。 - Deep Agents 管复杂任务 harness:规划、子 Agent、文件系统与上下文工程,适合多步自主任务。
- LangSmith 管可观测与质量:追踪、评估、部署监控,与框架选型独立,上线前强烈建议接入。
- 实际项目常从 LangChain 或 Deep Agents 起步,需要精细控制时再下沉到 LangGraph;LangSmith 贯穿全程。