番外 2:LangGraph 深挖——框架到底帮你做了什么
番外 2LangGraph 深挖——框架到底帮你做了什么这是「Agent 工程化」系列的番外篇。番外 1 横评了四条框架路线这篇把生态最庞大、生产用得最多的 LangGraph 拆开它到底帮你做了什么和我手写的 50 行 ReAct 循环是什么关系答案会让你安心——框架没有魔法它只是把你已经学过的原理用更工程化的方式实现了一遍。先回到那个 50 行循环正片第二篇我们手写了一个最小 ReAct Agent核心骨架长这样while任务未完成:llm 输出{思考,要调用的工具,参数}执行工具调用 把结果放回对话历史 判断任务是否完成这个循环能跑通 Demo但作为生产系统它有三个欠账欠账具体问题状态裸奔对话历史是裸内存进程一重启就全没了对应第 9 篇断点恢复流程靠 prompt 撑“下一步做什么全靠 LLM 自觉无法强制必须经过审批节点”无从观测循环里发生了什么没有标准化的记录接口对应第 10 篇可观测这三笔账正好是 LangGraph 帮你还的部分。它不做新的事它把这三件事做成了框架内置能力。LangGraph 的四个核心概念全部对应你学过的原理LangGraph 的抽象只有四个词理解了它们你就读懂了 LangGraphLangGraph 概念是什么对应正片原理State状态一个结构化的会话档案记录 messages、工具结果、任务进度第 4 篇对话历史 上下文Node节点一个执行步骤可以是 LLM 调用、工具调用、或一段代码第 2 篇循环里的行动Edge边节点之间的流转条件谁执行完走到谁第 8 篇Plan-Execute / 状态机StateGraph状态图把所有节点和边组织成一张图编译后运行第 2 篇那个 while 循环一句话LangGraph 把while 循环换成了图。节点是循环里的步骤边是步骤间的转移State 是循环里不断更新的对话历史。仅此而已。同一个例子手写版 vs LangGraph 版拿第二篇的经典例子——“查北京明天天气下雨提醒带伞”——分别实现你就能直观看到差异。手写版第二篇约 50 行forstepinrange(max_steps):responsellm(messages)ifresponse.actionfinish:returnresponse.answer resulttools[response.action](**response.args)messages.append(result)# 结果手动拼回历史LangGraph 版fromlanggraph.graphimportStateGraph,ENDfromtypingimportTypedDictclassState(TypedDict):city:str# 用户输入weather:str# 工具结果answer:str# 最终回答defcheck_weather(state):# 节点1查天气return{weather:get_weather(state[city])}defdecide(state):# 节点2判断并收尾return{answer:下雨记得带伞if雨instate[weather]else晴天不用带伞}graphStateGraph(State)graph.add_node(check_weather,check_weather)graph.add_node(decide,decide)graph.add_edge(check_weather,decide)# 查完天气 → 判断graph.add_edge(decide,END)# 判断完 → 结束graph.set_entry_point(check_weather)# 入口appgraph.compile()print(app.invoke({city:北京}))两者解决问题的方式完全一样差异只在工程能力能力手写版LangGraph 版控制流程靠 if/else 手写图结构声明式表达断点恢复自己实现第 9 篇内置 checkpoint人工审批自己实现内置 interrupt/resume可视化没有图结构天然可视记录 trace自己实现第 10 篇配套 LangSmith依赖零框架 学习成本四个还账能力逐个看1. Checkpoint断点恢复是内置的正片第 9 篇讲断点恢复时我们手动把 messages 落库。LangGraph 把它做成了框架默认能力——每个节点执行完自动保存 State 快照进程崩溃后从最近的 checkpoint 恢复几乎零成本获得。2. Interrupt人工审批是原生节点正片第 9 篇讲写操作二次确认。LangGraph 里这是原生语法——在需要审批的边之前插入 interrupt执行流会暂停等人确认后继续graph.add_node(confirm_order,human_confirm)# 暂停等人点头graph.add_edge(book_ticket,confirm_order)graph.add_edge(confirm_order,END)不需要自己写暂停-恢复逻辑框架处理好了。3. 确定性控制流程可以写死手写循环里下一步全靠 LLM 自觉LangGraph 里边是代码写死的——“检查完必须走审批审批通过才下单”。LLM 只负责节点内部的事走哪条路由代码决定。这就是番外 1 说的状态图驱动的可控流程。4. 可观测LangSmith 开箱即用正片第 10 篇自己搭 trace 表LangGraph 配套的 LangSmith 直接给到——每一步的输入输出、token 消耗、耗时自动记录还能在线对比不同版本的运行轨迹。代价框架不是免费的上面全是好处但代价必须讲清楚这才叫理性对比代价说明学习曲线State / Node / Edge / 条件路由先过概念关才写得出像样的图抽象排障出了 bug得先分清是图的逻辑错了还是框架内部错了升级风险框架版本迭代快API 变化可能静默改变行为番外 1 的 AutoGen 教训简单任务过重查个天气这种两节点任务用图的仪式感远超收益所以理性结论是LangGraph 不是更好的手写循环而是更工程化的手写循环。场景复杂、需要可控和可观测它省下的工程成本很可观场景简单、要极致轻量手写 50 行反而更合适。小结LangGraph 没魔法Node循环里的步骤Edge转移条件State对话历史——都是你学过的原理它帮你还了三笔账断点恢复checkpoint、人工审批interrupt、可观测LangSmith外加流程可控代价也要看学习曲线、抽象排障、升级风险、简单任务过重理性结论它是更工程化的手写循环不是更好的手写循环——用不用取决于你的场景而不是它的名气下一篇番外我们把这套理性对比推到选型层面——真实生产团队的 Agent 框架到底怎么选结合一线团队的实际案例给出一套不偏激的决策框架什么时候自研、什么时候复用、怎么评估、怎么留迁移路径。本系列路线从 0 到 1Agent 是什么 → 手写最小 ReAct → Function Calling 与工具设计 → 上下文管理 → Memory 记忆系统 → RAG 知识库 → Skill 自学习 → 编排模式与多 Agent → 给 Agent 装护栏 → 生产部署与可观测 → 评测与回归 →番外框架横评 → LangGraph 深挖 → 框架选型决策

相关新闻

【RT-DETR涨点改进】CVPR 2025 | 独家创新、损失函数改进篇| 引入MALoss目标检测涨点损失函数,提升密集型一对一匹配的效果,适合实时目标检测、小目标检测和密集目标检测任务,有效涨点

【RT-DETR涨点改进】CVPR 2025 | 独家创新、损失函数改进篇| 引入MALoss目标检测涨点损失函数,提升密集型一对一匹配的效果,适合实时目标检测、小目标检测和密集目标检测任务,有效涨点

一、本文介绍 🔥本文给大家介绍 目标检测 MALoss损失函数 优化RT-DETR模型!将预测框与真实框的匹配质量直接融入类别置信度监督,重点增强对低重叠、低质量但仍具有学习价值的正匹配的惩罚,解决原有VFL更加偏向高质量匹配、低质量预测框监督不足的问题,从而减少“定位较差…

2026/9/21 19:36:57 阅读更多 →
六自由度导弹弹道仿真系统设计与实现

六自由度导弹弹道仿真系统设计与实现

1. 项目概述:空地导弹弹道仿真系统设计 这个六自由度弹道仿真项目,本质上是在构建一个高保真的导弹动力学数字孪生环境。我花了三个月时间完整实现了这套代码,核心目标是模拟空地导弹攻击低空飞行器的全过程行为特征。不同于简单的质点运动模…

2026/9/23 16:15:18 阅读更多 →
苏州本土产业与GEO的深度适配:好客搜的本地化运营实践

苏州本土产业与GEO的深度适配:好客搜的本地化运营实践

GEO(生成式引擎优化)虽是通用技术框架,但不同行业的企业在AI搜索中的“最佳呈现方式”截然不同。好客搜总部位于苏州,在服务本地企业过程中,逐步形成了针对制造业、生物医药、跨境电商三大主导产业的差异化GEO方案。 制…

2026/9/23 5:38:06 阅读更多 →

最新新闻

Type-C母座Pin数怎么选?24Pin、16Pin、12Pin、6Pin区别与选型指南

Type-C母座Pin数怎么选?24Pin、16Pin、12Pin、6Pin区别与选型指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 7:30:04 阅读更多 →
DAP调试接口全解析:从引脚定义到实战设计要点

DAP调试接口全解析:从引脚定义到实战设计要点

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 7:30:04 阅读更多 →
Formily Vue 自定义组件开发:useField Hook 读取与操作字段状态完全指南

Formily Vue 自定义组件开发:useField Hook 读取与操作字段状态完全指南

前端UI组件 【免费下载链接】formily 📱🚀 🧩 Cross Device & High Performance Normal Form/Dynamic(JSON Schema) Form/Form Builder -- Support React/React Native/Vue 2/Vue 3 项目地址: https://gitcode.com/gh_mirrors…

2026/9/24 7:29:04 阅读更多 →
CANTP六大时间参数配置原理与实战调优

CANTP六大时间参数配置原理与实战调优

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 7:29:04 阅读更多 →
一段语音是如何进入人工神经网络的?

一段语音是如何进入人工神经网络的?

一段语音是如何进入人工神经网络的?语音人工神经网络的前端处理是语音识别、语音合成、语音增强等任务中的关键环节。前端处理包括:语音预处理 特征提取图1、语音输入到Transformer中语音预处理大致总流程如图:图2、语音预处理框架一&#xf…

2026/9/24 7:29:04 阅读更多 →
自动修音软件推荐:录完歌后,如何把人声修得更稳、更自然?

自动修音软件推荐:录完歌后,如何把人声修得更稳、更自然?

很多人第一次在家录歌都会遇到类似问题:旋律大体是对的,情绪也有,但回放时发现几个尾音偏高或偏低,换气处节奏不够稳,人声还显得干、薄、贴不进伴奏。没有专业录音棚,也不熟悉混音流程,这时就会…

2026/9/24 7:29:04 阅读更多 →

日新闻

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为…

2026/9/24 0:00:19 阅读更多 →
单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

简介:一份基于单细胞RNA测序数据的细胞类型注释算法研究Python毕业设计源码,针对计算机相关专业正在做毕设或需要项目实战的学习者,可用于课程设计与期末大作业。项目代码完整、经导师指导评审通过,可直接运行,覆盖数据…

2026/9/24 0:00:19 阅读更多 →
C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

第一次在项目里被反射卡住,是在一个老旧的WinForms模块里:几十个类依赖PropertyChanged通知,运行时反射读属性、发通知,每次启动慢半拍不说,一上.NET Native/AOT裁剪模式几乎全面崩盘。后来我把这段逻辑全部改成C#源生…

2026/9/24 0:00:19 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/23 4:55:02 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/23 4:49:06 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/23 9:53:41 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/23 9:53:40 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/23 9:53:40 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/23 9:53:40 阅读更多 →