起因:一个关于DeepAgents的疑问
最近研究AI Agent开发时,接触到了LangChain团队开源的deepagents框架。官方介绍里提到它基于"图编排"实现,能处理复杂长周期任务。这让我产生了一连串的追问:
图编排是什么?和传统工作流的分支有什么区别?我自己写while循环加if分支不也能实现吗?这不就是ReAct范式吗?
经过一番研究,我发现了一个真相:这些花哨的新词,本质上都是在给朴素的分支、循环、状态管理穿上一层学术外衣。
一层层剥开这些新词
图编排:带存档功能的while循环
当框架说"图编排"时,翻译成人话就是:
把程序拆成节点(函数)和边(跳转条件),运行时允许在节点之间来回跳跃。
从代码层面看,LangGraph的"图"长这样:
graph = StateGraph()
graph.add_node("agent", 调用LLM思考)
graph.add_node("tools", 执行具体工具)
graph.add_conditional_edges("agent", 根据LLM输出决定去哪)
graph.add_edge("tools", "agent") # 这行是关键:允许回头
如果是传统工作流引擎,add_edge("tools", "agent")这行会直接报错——因为工作流要求DAG(有向无环图),不允许循环。而LangGraph允许,所以叫"图编排"而不叫"工作流编排"。
但如果你自己写代码,这就是一个while循环:
while True:
action = llm.think(messages)
if action == "END":
break
result = tools.execute(action)
messages.append(result)
为什么还要用LangGraph? 因为框架帮你做了三件自己写很烦的事:
- 断点续传:任务跑了几小时中断了,能自动从断点恢复
- 人工介入:需要确认时释放CPU,等人响应后再继续
- 可视化调试:把循环过程画成图,方便排查问题
DeepAgents:配齐装备的ReAct豪华版
ReAct是Agent开发的经典范式,核心就是思考→行动→观察→再思考的循环。
deepagents没有发明新范式,它只是给ReAct加了四个开箱即用的工具:
| 内置工具 | 作用 | 对应ReAct的哪个环节 |
|---|---|---|
规划工具 write_todos |
把思考过程写成待办清单 | 把隐式的Thought显式化 |
| 文件系统 | 处理长文本时自动存文件 | 给Observation加存储能力 |
| 子智能体 | 把子任务派发给独立Agent | Action的并行化 |
| 持久化记忆 | 跨会话记住用户偏好 | 扩展Observation的时间范围 |
其中最有意思的是write_todos。传统ReAct的"思考"是存在模型上下文里的,窗口一满就丢了。deepagents把它变成了工具调用的结果,写在"纸上",断了能续、错了能改。
所以deepagents = ReAct + 四个内置工具 + 图编排引擎。
规划范式:从替代品变成插件
你可能听过"Plan-and-Execute"这种独立的Agent架构——先规划好完整步骤,再逐步执行,过程绝不修改计划。
deepagents没有采用这种死板的方式,而是把"规划"降级成了一个工具。模型可以在执行过程中随时调用write_todos更新计划——发现某步做完了就划掉,遇到阻碍就重写后半部分。
这种设计更务实:规划从"一成不变的圣旨"变成了"可以随时改的草稿"。
新词速查表:翻译成朴素技术
把这些AI框架的营销词汇翻译一下:
| 新词 | 朴素翻译 |
|---|---|
| 图编排 | 带存档和可视化的 while + if |
| 智能体 (Agent) | 能自己调工具的 LLM 程序 |
| 认知架构 | 循环调 LLM 的流程设计 |
| 工具调用 | 解析 LLM 输出,执行对应的函数 |
| 状态管理 | 一个 dict 变量,每步自动存盘 |
| 多智能体协作 | 多个 while 循环,互相发消息 |
为什么要造这么多词?
学术圈的论文压力:不发论文就评不上职称,发论文必须有"创新点"。while循环不叫创新,叫"基于图的状态机编排"才算。
工程圈的品牌需求:框架融了几个亿,不能说"我们做了一个好用的while循环封装",得说"我们发明了认知架构"。
抽象层的命名困境:框架确实比原生代码多了自动存档、可视化、断点续传这些能力,需要一个名字来概括。"图编排"确实比"带存档功能的循环跳转管理器"好记。
保持清醒
这些框架确实有用——自动存档、断点续传、可视化调试,自己从零写确实累。但穿透词汇看本质,它们的核心技术就是你早就知道的:
分支、循环、状态、函数调用。
理解这一点后,再去学任何新框架,思路都很清晰:先找它底层是while还是for,再看它帮你存了什么状态,最后看它加了哪些语法糖。
剩下听不懂的词,一半是营销,一半是学术八股,不用太当真。