LangGraph 失败恢复详解:为什么成功节点不会重复执行?
前面我们已经学习了 Checkpoint、get_state_history()、Replay 和 Fork。这一篇继续看一个更实用的问题如果同一个 SuperStep 中一个节点执行成功另一个节点执行失败修复后恢复运行时成功节点还会不会重新执行LangGraph 中已经成功的任务结果可以被检查点保存恢复时直接复用。1. 一个节点失败后LangGraph 保存了什么假设图结构是START | node_change_topic | ------ node_poem | ------ node_joke | v node_output | END其中node_poem和node_joke属于同一个 SuperStep。为了模拟失败可以故意让defnode_joke(state):raiseException(人为中断)第一次执行时node_change_topic 执行成功 ↓ node_poem 和 node_joke 并行执行 ↓ node_poem成功 node_joke失败 ↓ 图中断这时查看历史检查点historylist(graph.get_state_history(config))可以看到对应的tasks中PregelTask(namenode_poem,errorNone,result{poem:...})而失败节点PregelTask(namenode_joke,errorException(人为中断),resultNone)所以这里可以理解为result 节点已经成功产生的结果 error 节点执行失败时记录的异常2. 为什么 node_poem 不需要重新执行虽然node_poem和node_joke在同一个 SuperStep 中运行但其中一个失败并不会让另一个已经成功的结果全部丢失。检查点已经知道node_poem 成功 result 已保存 node_joke 失败 error 已保存因此恢复时LangGraph 可以复用 node_poem.result 重新执行 node_joke而不是node_poem 再执行一次 node_joke 再执行一次这对包含大模型调用、API 请求、数据库查询等昂贵操作的工作流尤其重要。3. 修复 BUG 后如何恢复先把node_joke修好defnode_joke(state):topicstate[topic]jokemodel.invoke([HumanMessage(f写一个关于{topic}的笑话)]).contentreturn{joke:joke}然后重新编译图new_graphbuilder.compile(checkpointercheckpointer)这里最重要的是必须继续使用之前那个 Checkpointer。因为历史 Checkpoint 就保存在它里面。如果重新创建checkpointerInMemorySaver()那就是一个新的空存储器原来的历史也就找不到了。恢复时resnew_graph.invoke(None,config{configurable:{thread_id:123}})这里inputNone表示不再提供新的输入 而是从当前 thread_id 已保存的状态继续实际恢复结果中node_joke 重新执行 node_output 继续执行 node_poem 没有重新执行最终输出中的诗仍然是第一次node_poem成功时生成的内容说明它的结果被复用了。4. 失败恢复和 Replay 有什么区别这两个概念看起来很像但目的不同。Replay我主动找到一个历史 Checkpoint 然后从那里重新执行例如graph.invoke(None,old_checkpoint.config)而失败恢复是上一次执行因为异常中断 ↓ 修复 BUG ↓ 继续使用原来的 Checkpointer ↓ 通过相同 thread_id 恢复 ↓ 接着未完成的任务继续执行可以简单记Replay 重新走一次 失败恢复 上次没走完现在接着走它还在解决任务执行到了哪里以及哪些计算已经完成。

相关新闻

率零降AI零基础教程!从上传论文到AI率降至25%完整操作!

率零降AI零基础教程!从上传论文到AI率降至25%完整操作!

AI率一开始90%多,用第一个工具降到50%左右,换第二个降到42%,再换第三个38%,然后再也降不动了。再怎么处理都在这个数字附近晃,钱花了不少,离学校要求还差一截。 这种情况在毕业季很常见,不是你运…

2026/11/4 9:58:02 阅读更多 →
Electron文件路径管理:app.getPath()核心参数详解与实战应用

Electron文件路径管理:app.getPath()核心参数详解与实战应用

1. 从一次文件保存失败说起:为什么你需要理解app.getPath()那天下午,我正在调试一个 Electron 应用的数据导出功能。用户点击“导出报告”,理论上应该弹出一个保存对话框,让用户选择位置,然后程序把生成的 JSON 数据写…

2026/11/1 16:55:24 阅读更多 →
GStack:基于Claude Code的AI虚拟软件工厂工作流实践

GStack:基于Claude Code的AI虚拟软件工厂工作流实践

1. 项目概述:从“单兵作战”到“虚拟军团”的进化最近在AI编程工具圈里,一个叫GStack的概念讨论度很高,特别是它那个“26种专家角色,一人成军”的提法,让不少独立开发者和中小团队的技术负责人眼前一亮。我自己也花了些…

2026/11/2 8:26:00 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/4 1:35:24 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/3 10:57:27 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/3 11:35:49 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/4 6:23:50 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/3 10:47:27 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/3 10:57:33 阅读更多 →

日新闻

周新闻

月新闻