应用层 · Agent 框架
学习舱 / 应用层 / Agent 框架

Agent 框架:LangGraph / DeepAgents 与取舍

整理中 深度 · 应用 更新 2026-09-09

前置 Agent

Agent 框架:LangGraph / DeepAgents 与取舍

一句话定位:框架把 Agent 的循环、状态、持久化封装成库——LangChain 给标准件,LangGraph 给运行时,DeepAgents 给现成外壳;本文讲三层各给什么、怎么对号入座,以及框架什么时候是负资产。前置:Agent 基础——模型加循环加工具加刹车,那套「手搓」底盘。

先从一次选型的纠结说起

你把一个原型做成了正经项目:一个每天自动汇总项目进展、写日报的 Agent。本地跑通了,接下来是工程化——搜索选型,结果扑面而来:LangChain、LangGraph、DeepAgents、OpenAI Agents SDK、AgentScope……名字都带 Agent,宣传语一个比一个像。

麻烦在于它们长得像、层次完全不同。拿错层级,代价立现:想快速起步却从零手写主循环,等于重造标准件;想深度定制每一步的行为,却把底盘架在现成外壳上,自定义改不动;最常见的坑是把标准件库当运行时用——循环行为跟着库的版本走,库一升级你的 Agent 跟着抖。

这几层到底各管什么?什么时候该用框架,什么时候框架反而是负资产?

官方自己就把层次说清了(出处见文末参考):LangChain 是框架——标准件与集成层;LangGraph 是运行时——状态图与持久化;DeepAgents 是现成的 Agent 外壳(harness)——文件系统、计划能力、子代理预装。选型先对号入座,再谈取舍。

Agent 框架三层:越往上越省事,越往下越可控 ④ 你的业务代码 流程与规则始终在你手里 ③ DeepAgents · 现成外壳 文件系统记忆 · Skills · Subagent 委托 ② LangGraph · 运行时 StateGraph · Checkpoint 存档 · Interrupt 暂停 ① LangChain · 标准件 ChatModel 统一入口 · @tool 工具 · middleware 钩子 模型 API(供应商可换) ⑤ 手写路线 主循环自己写 存档自己造 百行起步 完全可控 无依赖债 ①②③全部自己实现

图: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 钩子(1.0 起挂循环每环节) 工具前人工审批 · 到上限压缩历史 · 敏感信息脱敏 store 长期记忆库 跨会话,按命名空间隔离 配套商业 SaaS LangSmith 管追踪、评测、监控——开源件管怎么搭,它管跑得怎么样

图:LangChain 标准件层——ChatModel、消息、@tool 由 create_agent 组装成循环,middleware 挂钩、store 记忆,LangSmith 管跑得怎么样

LangGraph:运行时层(②)

标准件拼出的是「一问一答再调个工具」,真实业务要的是有状态、能暂停、会分支的流程。LangGraph 把流程组织成 StateGraph(状态图):状态是唯一事实源,节点是动作,边是走向,条件边负责分支与循环;多个分支写同一个状态键时,由 reducer(归约函数)定合并规则。真正让它区别于手写循环的是三件套:

  • Checkpoint(存档,⑥):每走一步自动存档,thread_id 就是存档槽——不同用户、不同会话各占一槽互不干扰(⑦);服务器重启,从最近存档续跑,长任务不用从头再来。
  • Interrupt(暂停键,⑧):流程停在指定节点等人审批,通过后从存档恢复继续走——跨天的审批流也不在话下。
  • time travel(读旧档,⑨):回到历史任意存档,改状态重跑——调试时按步复现问题,不用整段重放。
Checkpoint:像游戏存档一样跑长任务 存档槽:thread_id = daily-09-05(⑦ 一会话一槽,互不干扰) 起草 模型写初稿 审核(⑧ 暂停) 停在这里等人拍板 发布 存档收尾 初稿完成 审批通过 ⑥ 每走一步自动存档:起草一档、审核一档,审批结果也入档 存档库(Checkpoint) 最近一档 = 恢复点,服务器重启也从这续跑 ⑨ time travel:读任意旧档改状态重跑,调试按步复现 读法:存档粒度 = 每一步;恢复语义 = 从最近档继续

图:Checkpoint 三件套——⑥⑦存档(每步自动存档 + 槽位隔离)、⑧暂停审批、⑨读档回滚兜住调试

多 Agent 时的组装件:子图

把一张图封装成父图里的一个节点,就是子图——多 Agent 协作时每个 Agent 管一张小图,主图的 supervisor(派工)节点负责分派与汇总;recursion_limit 给整个循环上保险(默认上限 25 步),是②里的步数刹车,防止两个 Agent 互相踢皮球转不停。

DeepAgents:现成外壳层(③)

官方对它的称呼是「现成的 Agent 外壳」:在 create_agent 之上预装了五样东西。

  1. 计划工具——开工前先把目标拆成待办清单,干到哪、还剩多少,清单上见。
  2. 文件系统——一组读、写、改、搜的文件工具,后端可插拔:默认存在会话状态里,也能换成本地磁盘、远程沙箱,或按路径组合路由。
  3. 文件化记忆——Agent 写给自己的工作笔记,跨轮累积,「文件系统即记忆」。
  4. Skills(技能包)——可复用的行为,按需加载且加载是渐进式的:先看名字和描述,判定相关才展开正文,省得全部塞进上下文(这条机制的完整形态,后续 Claude Code 的 Skills 一篇细讲)。
  5. Subagent 委托——主 Agent 把一块活分给子代理,子代理的中间过程不回灌主上下文、只交回结论——这正是 Context 工程说的注意力预算最划算的花法。

五样预装叠在底座上的样子,一张图看清:

DeepAgents 现成外壳:create_agent 之上预装五样 1 计划工具 开工前把目标拆成待办清单 干到哪、还剩多少,清单上见 2 文件系统 读、写、改、搜的文件工具 默认会话状态,可换磁盘、沙箱 3 文件化记忆 Agent 写给自己的工作笔记 跨轮累积——文件系统即记忆 4 Skills · 技能包 渐进式加载:先看名字和描述 判定相关才展开正文 5 Subagent 委托 中间过程不回灌主上下文、只交回结论 注意力预算最划算的花法 预装 create_agent 底座(① 标准件的组装函数) 同一家的货,越往上越省事,越往下越可控

图: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 / LangGraphcreate_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 概览里「载体」之争的另一端。

选型决策树:两问定路线 要做一个 Agent 第一问:要存档、 审批、回滚吗? ⑤ 手写主循环 百行起步 全可控 第二问:要文件记忆、 Skills、子代理吗? ③ DeepAgents 整盒套装,开箱即走 ② LangGraph 运行时 只取存档与流程,配①标准件 否 是 是 否 读法:先问恢复语义要不要,再问预装要多全;第一问就是否,别引依赖

图:选型两问——第一问卡「恢复语义」,第二问卡「预装多全」;第一问即否,手写反而是最优解

别为了新潮上框架,也别为了「可控」的执念拒绝框架——先跑通价值,再谈控制权。坏味道预警:当你发现自己写的路由胶水代码比业务逻辑还长,那就是控制流该收回来的信号;手写路线的完整展开,见 Harness 概览与后续的 Harness 各专篇。

自测

合上文章先自己答,再展开对照:

LangGraph 的 Checkpoint 模型和手写状态机各适合什么场景?

判据是恢复语义标不标准。Checkpoint 模型赢在四样标准能力开箱即得:thread_id 会话隔离、断点续跑、Interrupt 审批暂停、time travel 读档回滚——多用户产品、长任务、带人工审批的流程直接受益。手写状态机赢在状态形状完全领域特化:状态键少、转移逻辑一眼看穿、每个转移可单测,且不欠依赖债——适合状态简单又要求极致可控可测的场景。一句话:恢复语义越标准越该用 Checkpoint,越特化越值得手写。

DeepAgents「文件系统即记忆」与向量库记忆的取舍是什么?

两者是分工不是对手。文件记忆是显式的:可读、可改、可 diff,Agent 自己决定写什么、读什么、何时整理,适合工作笔记、项目档案这类少而精的长期材料;它的风险是堆成乱麻,所以要渐进披露、挑着读,避免上下文腐烂。向量库记忆是隐式的:语义检索自动召回,适合海量历史里大海捞针;它的风险是召回到似是而非的近邻。成熟系统两者并存:文件当书架,向量当图书管理员。

参考与延伸

下一站:Claude Code 全景与日常使用——框架之外另一个极端:不搭轮子,把别人造好的外壳用成生产力。

本节点大纲与自测题(5 个子点 · 2 问)

大纲

  • LangGraph:StateGraph、条件分支与循环、Checkpoint、Interrupt、子图
  • LangChain 基座:四大组件、store 长期记忆、middleware
  • DeepAgents:文件系统记忆、可插拔 Backend、Skills 渐进披露、Subagent 委托
  • 框架定位对比:LangGraph vs OpenAI Agents SDK vs AgentScope
  • 框架 vs 手写的决策:什么时候框架是负资产

自测——答不上来就是缺口

  • LangGraph 的 Checkpoint 模型和手写状态机各适合什么场景?
  • DeepAgents「文件系统即记忆」与向量库记忆的取舍是什么?