Agent 框架:LangGraph / DeepAgents 与取舍
一句话定位:框架把 Agent 的循环、状态、持久化封装成库——LangChain 给标准件,LangGraph 给运行时,DeepAgents 给现成外壳;本文讲三层各给什么、怎么对号入座,以及框架什么时候是负资产。前置:Agent 基础——模型加循环加工具加刹车,那套「手搓」底盘。
先从一次选型的纠结说起
你把一个原型做成了正经项目:一个每天自动汇总项目进展、写日报的 Agent。本地跑通了,接下来是工程化——搜索选型,结果扑面而来:LangChain、LangGraph、DeepAgents、OpenAI Agents SDK、AgentScope……名字都带 Agent,宣传语一个比一个像。
麻烦在于它们长得像、层次完全不同。拿错层级,代价立现:想快速起步却从零手写主循环,等于重造标准件;想深度定制每一步的行为,却把底盘架在现成外壳上,自定义改不动;最常见的坑是把标准件库当运行时用——循环行为跟着库的版本走,库一升级你的 Agent 跟着抖。
这几层到底各管什么?什么时候该用框架,什么时候框架反而是负资产?
官方自己就把层次说清了(出处见文末参考):LangChain 是框架——标准件与集成层;LangGraph 是运行时——状态图与持久化;DeepAgents 是现成的 Agent 外壳(harness)——文件系统、计划能力、子代理预装。选型先对号入座,再谈取舍。
图:Agent 框架三层——①标准件 ②运行时 ③现成外壳,逐层加码、逐层让渡控制;④你的代码始终在顶上;右侧是⑤手写路线的对照
渐进拆解:从标准件到整盒套装
类比:三个框架是一套乐高体系
LangChain 是标准积木块——凸点尺寸全行业统一,任何底板都通插,换模型供应商时调用代码不用动;LangGraph 是你自己画的传动结构——每个齿轮(节点)怎么转、哪里装离合器(暂停)、哪里允许倒带(回滚),图纸上说了算;DeepAgents 则是整盒套装——按说明书预拼好的成品车,开箱就能跑,想改也随时能拆。同一家出品,越往上拼得越全,越往下留给你的自由度越大。
LangChain:标准件层(①)
它解决的是「每家模型 API 长得都不一样」的碎片化。四大组件各管一摊:
- ChatModel:模型调用收进统一入口,换供应商不改代码。
- 消息:按角色分格装,人设、对话、工具结果各有其位。
- @tool 装饰器:登记工具,名字、描述、参数格式三件套齐了就能被模型调用。
- create_agent:一个函数把「模型在循环里调工具」组装起来。
1.0 版(2025 年 10 月)把这套循环的每个环节都挂上了 middleware(中间件)钩子,官方内置三种:工具调用前先过人工审批(这是工具级的把关,区别于后文流程节点级的暂停)、对话快到上限时自动压缩历史、敏感信息自动脱敏。
另有 store(长期记忆库)管跨会话的记忆,按命名空间隔离——它承载的是常驻区的记忆,与会话内的短期记忆分工,正好呼应Context 工程里「常驻 / 本任务 / 机动」的三区分法。
另有配套的商业 SaaS LangSmith——调用追踪、数据集评测、线上监控;三层开源件管「怎么搭」,它管「跑得怎么样」。
把这一层的零件与组装关系画在一起:
图:LangChain 标准件层——ChatModel、消息、@tool 由 create_agent 组装成循环,middleware 挂钩、store 记忆,LangSmith 管跑得怎么样
LangGraph:运行时层(②)
标准件拼出的是「一问一答再调个工具」,真实业务要的是有状态、能暂停、会分支的流程。LangGraph 把流程组织成 StateGraph(状态图):状态是唯一事实源,节点是动作,边是走向,条件边负责分支与循环;多个分支写同一个状态键时,由 reducer(归约函数)定合并规则。真正让它区别于手写循环的是三件套:
- Checkpoint(存档,⑥):每走一步自动存档,thread_id 就是存档槽——不同用户、不同会话各占一槽互不干扰(⑦);服务器重启,从最近存档续跑,长任务不用从头再来。
- Interrupt(暂停键,⑧):流程停在指定节点等人审批,通过后从存档恢复继续走——跨天的审批流也不在话下。
- time travel(读旧档,⑨):回到历史任意存档,改状态重跑——调试时按步复现问题,不用整段重放。
图:Checkpoint 三件套——⑥⑦存档(每步自动存档 + 槽位隔离)、⑧暂停审批、⑨读档回滚兜住调试
多 Agent 时的组装件:子图
把一张图封装成父图里的一个节点,就是子图——多 Agent 协作时每个 Agent 管一张小图,主图的 supervisor(派工)节点负责分派与汇总;recursion_limit 给整个循环上保险(默认上限 25 步),是②里的步数刹车,防止两个 Agent 互相踢皮球转不停。
DeepAgents:现成外壳层(③)
官方对它的称呼是「现成的 Agent 外壳」:在 create_agent 之上预装了五样东西。
- 计划工具——开工前先把目标拆成待办清单,干到哪、还剩多少,清单上见。
- 文件系统——一组读、写、改、搜的文件工具,后端可插拔:默认存在会话状态里,也能换成本地磁盘、远程沙箱,或按路径组合路由。
- 文件化记忆——Agent 写给自己的工作笔记,跨轮累积,「文件系统即记忆」。
- Skills(技能包)——可复用的行为,按需加载且加载是渐进式的:先看名字和描述,判定相关才展开正文,省得全部塞进上下文(这条机制的完整形态,后续 Claude Code 的 Skills 一篇细讲)。
- Subagent 委托——主 Agent 把一块活分给子代理,子代理的中间过程不回灌主上下文、只交回结论——这正是 Context 工程说的注意力预算最划算的花法。
五样预装叠在底座上的样子,一张图看清:
图:DeepAgents 外壳五样预装——计划、文件系统、文件化记忆、Skills 渐进披露、子代理只交结论,全部叠在 create_agent 底座上
大白话:零件、底盘与整车
LangChain 给零件,LangGraph 给底盘和变速箱,DeepAgents 给整车。零件通配、底盘可改、整车开箱即走——同一家的货,越往上越省事,越往下越可控。
演进史与口碑
- 2022 年 10 月:Harrison Chase 开源 LangChain,最初只是把 Prompt、模型、输出解析器「链」起来的库——名字里的 Chain 由此而来。
- 2023 年:ChatGPT 应用潮把它推上风口,4 月即公司化,Benchmark 千万美元种子轮、红杉领投逾两千万美元接连落定。
- 0.x 还债期:爆火与恶名同步累积,批评集中在三点——抽象太重、包的表面积失控、偏离预置用法时定制困难;0.1 到 0.3 的连续重构、拆出 langchain-core,都是在给这段野蛮生长期还债。
- 1.0 收敛定版:三点批评后来全部被官方认领,1.0 公告原话「抽象有时太重,包的表面积涨到难以驾驭」,并称这是听了三年的「一致反馈」。
技术定义与业界现状
2025 年 10 月 22 日,LangChain 与 LangGraph 同日发布 1.0,官方承诺「2.0 之前不做破坏性变更」,旧功能整体移入 langchain-classic 兼容包;LangGraph 1.0 对既有代码完全向后兼容,唯一显著变更是弃用 langgraph.prebuilt 旧入口。
2026 年 8 月官方博客把三层定位说成一句话:LangGraph 是 Agent 运行时,LangChain 是 Agent 框架,Deep Agents 是 Agent 外壳——并给了一根确定性光谱:运行时确定性最强、外壳自主性最强,建议从外壳起步,需要控制时再下沉。
同赛道常被一起对比的还有两个名字:OpenAI Agents SDK 走轻量路线,靠交接(handoffs)、护栏(guardrails)等少量原语组合,2026 年 9 月 GitHub 约 2.9 万 star;AgentScope 是阿里系开源、已迁入独立组织,定位「看得见、可理解、可信任」的多 Agent 框架,约 3.1 万 star(两处 star 数均为 2026 年 9 月查询)。
动手:十二行搭一个可暂停的日报 Agent
用 LangGraph 的运行时(②)搭「起草 → 人工审核 → 发布」的流程,模型调用部分交给标准件(①)。伪代码(不可直接运行,省略了入口边与导入),重点看编号对应的机制:
graph = StateGraph(ReportState) # ② 状态是唯一事实源
graph.add_node("draft", call_model) # ② 节点:一步动作(内部用①的 ChatModel)
graph.add_node("review", human_review)
graph.add_node("publish", publish_report)
graph.add_edge("review", "publish") # ② 普通边:审核过就发布
graph.add_conditional_edges("draft", route) # ② 条件边:不合格就循环回起草
app = graph.compile(checkpointer=InMemorySaver(), # ⑥ 每步自动存档(生产换持久化后端)
interrupt_before=["review"]) # ⑧ 静态断点:审核前等人拍板
cfg = {"configurable": {"thread_id": "daily-09-05"}} # ⑦ 存档槽:这份日报一个槽
app.invoke(messages, cfg) # 跑到审核前自动停下
app.update_state(cfg, values={"审核意见": "通过"}) # 人工结果写进状态、落入存档
app.invoke(None, cfg) # ⑧ 从存档恢复,一路走到发布
注意业务代码(④)里你只写了「流程长什么样」——循环怎么执行、状态怎么存、暂停怎么恢复,全是运行时(②)的事。这就是「控制流归库」的具象:省下的恰好是手写路线(⑤)里最容易出 bug 的部分。
同一层位还有哪些选择,一张表对齐(定位均以官方仓库描述为准):
| 层位 | 框架 | 一句话锚点 |
|---|---|---|
| 标准件 + 运行时 | LangChain / LangGraph | create_agent 组装循环;StateGraph + Checkpoint + Interrupt |
| 现成外壳 | DeepAgents | 文件系统、记忆、计划、Skills、子代理预装的开箱外壳 |
| 轻量运行时 | OpenAI Agents SDK | 交接(handoffs)、护栏(guardrails)等轻量原语,自带会话与追踪 |
| 多 Agent 平台向 | AgentScope | 定位「看得见、可理解、可信任」的多 Agent 框架 |
边界与取舍:框架什么时候是负资产
Checkpoint 模型和手写状态机,各领一块地
框架的存档模型赢在恢复语义是标准的:会话隔离、断点续跑、审批暂停、读档回滚,四样开箱即得——多用户产品、长任务、带人工审批的流程,直接受益。手写状态机赢在状态形状完全领域特化:状态键就三五个、转移逻辑一眼看穿、每个转移都能写成单元测试,还不欠任何依赖债。判据一句话:恢复语义越「标准」,越该用 Checkpoint;越「特化」,越值得手写。
「文件系统即记忆」与向量库记忆,不是对手是分工
文件记忆是显式的:可读、可改、可 diff,Agent 自己决定写什么、读什么、何时整理——适合工作笔记、项目档案这类「少而精」的长期材料。向量库是隐式的:语义检索自动召回,适合从海量历史里大海捞针。前者怕堆成一团乱麻——所以 DeepAgents 的 Skills 才做渐进披露,读文件也要挑着读,不然就是 Context 工程警告过的上下文腐烂;后者怕召回到似是而非的近邻。成熟的系统两者并存:文件当书架,向量当图书管理员。
框架是负资产的四个信号
- 循环行为和库抽象打架——你要的控制流库不给你,绕库的钩子比实现功能还费劲。
- 调试要穿透库栈——问题埋在框架第三层回调里,看不懂栈就看不了病。
- 升级随库走——1.0 把旧功能整体挪进兼容包,可见 0.x 时代版本迁移的包袱之重。
- 学习成本倒挂——主循环本身百来行,吃透框架的抽象却要按周算。
四个信号中了两个以上,认真考虑手写路线(⑤):把控制流收回自己手里,模型降级为可替换的插件——这正是 Harness 概览里「载体」之争的另一端。
图:选型两问——第一问卡「恢复语义」,第二问卡「预装多全」;第一问即否,手写反而是最优解
别为了新潮上框架,也别为了「可控」的执念拒绝框架——先跑通价值,再谈控制权。坏味道预警:当你发现自己写的路由胶水代码比业务逻辑还长,那就是控制流该收回来的信号;手写路线的完整展开,见 Harness 概览与后续的 Harness 各专篇。
自测
合上文章先自己答,再展开对照:
LangGraph 的 Checkpoint 模型和手写状态机各适合什么场景?
判据是恢复语义标不标准。Checkpoint 模型赢在四样标准能力开箱即得:thread_id 会话隔离、断点续跑、Interrupt 审批暂停、time travel 读档回滚——多用户产品、长任务、带人工审批的流程直接受益。手写状态机赢在状态形状完全领域特化:状态键少、转移逻辑一眼看穿、每个转移可单测,且不欠依赖债——适合状态简单又要求极致可控可测的场景。一句话:恢复语义越标准越该用 Checkpoint,越特化越值得手写。
DeepAgents「文件系统即记忆」与向量库记忆的取舍是什么?
两者是分工不是对手。文件记忆是显式的:可读、可改、可 diff,Agent 自己决定写什么、读什么、何时整理,适合工作笔记、项目档案这类少而精的长期材料;它的风险是堆成乱麻,所以要渐进披露、挑着读,避免上下文腐烂。向量库记忆是隐式的:语义检索自动召回,适合海量历史里大海捞针;它的风险是召回到似是而非的近邻。成熟系统两者并存:文件当书架,向量当图书管理员。
参考与延伸
- LangChain 官方博客《LangChain and LangGraph Agent Frameworks Reach v1.0》(2025-10-22):1.0 发布公告,middleware 机制与「2.0 前不破坏性变更」承诺的原始出处;官方自认 0.x「抽象有时太重」亦出自此文 — langchain.com/blog/langchain-langgraph-1dot0
- Wikipedia「LangChain」条目(2026 年 9 月查询):2022 年 10 月开源、创始人 Harrison Chase、2023 年融资时间线的出处 — en.wikipedia.org/wiki/LangChain
- LangSmith 产品页:配套商业 SaaS 的追踪、评测与监控能力 — smith.langchain.com
- LangChain 官方博客《Deep Agents vs LangChain vs LangGraph》(2026-08-06):三层定位与确定性光谱的官方口径 — langchain.com/blog/deep-agents-vs-langchain-vs-langgraph
- LangGraph 仓库(MIT):运行时文档、StateGraph 与 Checkpoint 示例 — github.com/langchain-ai/langgraph
- DeepAgents 仓库:外壳能力清单与「运行时 / 框架 / 外壳」分层 FAQ — github.com/langchain-ai/deepagents
- OpenAI Agents SDK 仓库:轻量路线的官方 SDK — github.com/openai/openai-agents-python
- AgentScope 仓库:多 Agent 平台向框架 — github.com/agentscope-ai/agentscope
下一站:Claude Code 全景与日常使用——框架之外另一个极端:不搭轮子,把别人造好的外壳用成生产力。