当前位置: 首页 > article >正文

【LangGraph】持久化实现的三大能力——时间旅行

【LangGraph】新篇章LangGraph 持久化的三大应用能力*重点*前言一、什么是时间旅行二、为什么需要时间旅行三、核心前提必须启用 Checkpointer四、时间旅行四步法详解4.1 初始执行工作流4.2 查看历史检查点4.3 修改状态创建分支4.4 从检查点恢复执行五、完整示例AI笑话生成器的时间旅行调试5.1 定义状态结构5.2 定义工作流节点5.3 构建工作流图5.4 第一次执行5.5 时间旅行调试案例六、核心API速查表七、总结7.1 核心能力7.2 工作流示意图7.3 小细节7.4 优势上一章- 【LangGraph】持久化实现的三大能力——人机交互前言AI 工作流具有不确定性同样的输入大模型可能产生不同的结果当复杂任务需要多个 AI 调用协同完成时错误可能出现在任何步骤定位问题变得非常困难LangGraph 的时间旅行Time Travel能力 让你可以重放过去的每一次执行检查和修改中间状态甚至尝试不同的决策路径本文带你掌握这项调试神器一、什么是时间旅行LangGraph 的工作方式每个节点执行后都会自动“存档”生成一个检查点checkpoint时间旅行允许你查看历史上任意一个检查点的状态从某个检查点恢复执行重放修改某个检查点的状态然后继续执行分支探索这相当于给你的 AI 工作流装上了一台“时光机”二、为什么需要时间旅行场景说明分析推理过程理解 AI 如何得出最终结果学习成功的决策路径定位和修复错误精确找到错误发生的节点测试修复方案而不影响原始流程探索替代方案尝试不同的输入或中间状态比较不同路径的效果举个例子假设你构建了一个三步 Agent先生成搜索关键词 → 调用搜索引擎 → 总结网页内容 最终答案不理想时你无法直接知道是关键词生成出了问题 还是搜索引擎返回了垃圾信息还是总结模型跑偏了有了时间旅行我们就可以回溯到第一步查看生成的关键词也可以回溯到第二步查看搜索引擎的原始返回甚至可以修改关键词后重新执行后两步快速定位问题所在三、核心前提必须启用 Checkpointer时间旅行依赖持久化机制。在编译图时必须传入checkpointer如InMemorySaver、PostgresSaverfromlanggraph.checkpoint.memoryimportInMemorySaver graphbuilder.compile(checkpointerInMemorySaver())为什么必须要有 checkpointer因为 LangGraph 需要将每个节点执行后的状态自动保存到检查点中没有 checkpointer图不会记录任何历史状态自然也就无法回溯或重放四、时间旅行四步法详解4.1 初始执行工作流importuuid# 创建唯一线程ID确保执行隔离config{configurable:{thread_id:str(uuid.uuid4())}}# 传入空字典作为初始状态config包含线程配置resultgraph.invoke({},config)4.2 查看历史检查点# 获取完整状态历史按时间倒序排列stateslist(graph.get_state_history(config))forstateinstates:print(f检查点ID:{state.config[configurable][checkpoint_id]})print(f下⼀步节点:{state.next})print(f当前状态:{state.values})print(-*50)举个例子【检查点 1/3】ID: 1f0d4d2b-bdc2-6f06-8002-9b67bb1d3867待执行节点: 流程结束状态值: {‘topic’: ‘程序员’, ‘joke’: ‘为什么程序员总是分不清万圣节和圣诞节因为 Oct 31 Dec 25’}【检查点 2/3】ID: 1f0d4d2b-9506-6bf8-8001-6af0cdc2fea0待执行节点: (‘get_joke’,)状态值: {‘topic’: ‘程序员’}4.3 修改状态创建分支# 选择生成主题后的检查点索引1target_statestates[1]# 修改主题字段创建新分支new_configgraph.update_state(target_state.config,# 原检查点配置values{topic:程序员调试代码时的笑话}# 新状态值)# 注意原始检查点仍保留在历史记录中4.4 从检查点恢复执行# 从修改后的配置继续执行传入None表示使用已有状态resultgraph.invoke(None,new_config)# 打印新生成的笑话print(新笑话,result[joke])五、完整示例AI笑话生成器的时间旅行调试5.1 定义状态结构fromtypingimportTypedDictclassState(TypedDict):工作流状态定义topic:str# 笑话主题joke:str# 生成的笑话内容5.2 定义工作流节点fromlangchain.chat_modelsimportinit_chat_model# 初始化模型示例使用简化版GPT-4modelinit_chat_model(gpt-4o-mini)defgenerate_topic(state:State):生成笑话主题节点responsemodel.invoke(生成一个程序员相关的搞笑主题要求六字以内)return{topic:response.content}# 去除可能的多余引号defget_joke(state:State):jokemodel.invoke(f说一个关于{state[topic]}的笑话)return{topic:joke.content}5.3 构建工作流图fromlanggraph.graphimportStateGraph,START,END builderStateGraph(State)builder.add_node(get_topic)builder.add_node(get_joke)builder.add_edge(START,get_topic)builder.add_edge(get_topic,get_joke)builder.add_edge(get_joke,END)# 编译工作流启用内存检查点graphbuilder.compile(checkpointerInMemorySaver())5.4 第一次执行config{configurable:{thread_id:123}}# 步骤一初始执⾏⼯作流print(graph.invoke({},config))5.5 时间旅行调试案例假设首次生成的主题过于宽泛# 获取历史状态stateslist(graph.get_state_history(config))# 查看生成主题后的状态和相关配置updatestates[1]print(update.values[topic])print(update.config)# 修改为更具体的主题new_configupdate.update_state(update[1].config,values{topic:讲一个程序员笑话})# 从新主题继续执行resultgraph.invoke(None,new_config)print(\n优化后结果)print(f新主题{result[topic]})print(f新笑话{result[joke]})六、核心API速查表方法参数说明返回值典型用途graph.get_state(config)thread_id必填最新状态对象获取当前进度graph.get_state_history(config)thread_id必填状态对象列表审计/调试历史graph.update_state(config, values)原配置新值字典新配置对象创建分支版本graph.invoke(None, config)检查点配置最终状态继续执行流程关键参数说明thread_id执行会话的唯一标识checkpoint_id通过历史查询或update_state获取values需要更新的状态字段字典七、总结7.1 核心能力功能实现方式典型应用场景状态追溯get_state_history()调试异常流程分支实验update_state()invoke()A/B测试不同参数流程修复修改中间状态后重放纠正模型偏差交互调试结合interrupt()机制人工审核节点7.2 工作流示意图7.3 小细节检查点自动包含完整上下文无需手动保存修改状态会创建新分支原始记录完整保留通过thread_id可管理多个独立会话互不干扰结合长期存储Store可实现跨会话记忆7.4 优势精准定位 AI 思维偏差节点快速尝试不同生成路径构建可解释的 AI 工作流实现人机协同调试流程掌握时间旅行能力我们就能把 AI 工作流从“黑盒”变成“白盒”——可回溯、可修改、可分支、可复用本期分享就到这里了下期再见~

相关文章:

【LangGraph】持久化实现的三大能力——时间旅行

【LangGraph】新篇章:LangGraph 持久化的三大应用能力*重点*前言一、什么是时间旅行?二、为什么需要时间旅行?三、核心前提:必须启用 Checkpointer四、时间旅行四步法详解4.1 初始执行工作流:4.2 查看历史检查点&#…...

别再死记硬背了!用‘G谱号’这个核心逻辑,5分钟搞懂高音谱号与钢琴键位对应关系

别再死记硬背了!用‘G谱号’这个核心逻辑,5分钟搞懂高音谱号与钢琴键位对应关系 第一次接触五线谱时,大多数人都会陷入一个误区——试图通过死记硬背"线上"和"间上"的音符位置来掌握高音谱号。这种机械记忆法看似高效&am…...

AD5593R模块除了当DAC,还能这么玩?用STM32F103配置它的ADC和GPIO模式

AD5593R模块的多面手玩法:在STM32F103上实现ADC与GPIO的混合配置 AD5593R这颗芯片在电子爱好者圈子里常被当作简单的8通道DAC使用,但它的真实能力远不止于此。想象一下,在一个智能传感器节点项目中,你需要同时控制执行器、读取多个…...

2026年AI大模型接口中转站全网实测:对比稳定性、兼容性与计费,找到最优选择

在开发AI应用时,调用链路常常成为最棘手的问题。网络波动导致的超时、成本失控以及更换供应商时大量的代码修改,都给开发者带来了很大的困扰。而“API中转站/聚合网关”可以在很大程度上缓解这些问题,但前提是要选对类型。 本文将基于稳定性…...

MDK5主题配置文件global.prop详解:从备份、修改到一键导入的完整指南

MDK5主题配置文件global.prop深度解析与实战指南 当你每天面对MDK5的默认灰白界面超过8小时,眼睛的疲劳感是否让你开始怀疑人生?作为嵌入式开发者的第二皮肤,编辑器的视觉体验直接影响编码效率和心情。global.prop这个看似普通的配置文件&…...

从‘它好慢’到秒开:前端工程师的本地开发环境优化实战(Vite + SwitchHosts + 自定义域名)

从‘它好慢’到秒开:前端工程师的本地开发环境优化实战(Vite SwitchHosts 自定义域名) 每次保存代码后都要等5秒才能看到效果?联调时要在浏览器地址栏输入http://192.168.1.100:3000/api/v1/users这样的复杂路径?这些…...

2026届最火的AI论文方案推荐

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 在当下的学术以及职场写作环境里头,查重跟降重的需求越发显著了。降重网站作为一…...

UE5启动卡在75%崩溃?别慌,先排查这个JetBrains插件(附卸载Rider详细步骤)

UE5启动卡在75%崩溃?深度解析JetBrains插件冲突与系统级解决方案 当Unreal Engine 5的启动进度条卡在75%时突然崩溃,屏幕上跳出EXCEPTION_ACCESS_VIOLATION的错误提示,这可能是许多开发者最近遇到的噩梦。不同于简单的软件冲突,这…...

C#项目依赖关系可视化工具:基于MSBuild的仓库地图生成器实现

1. 项目概述:从零构建一个C#仓库地图生成器最近在折腾一个挺有意思的小工具,起因是团队里新来的几个小伙伴,面对我们那个已经迭代了五六年、包含几十个项目和无数个NuGet包的C#解决方案时,总是有点懵。每次开需求评审会&#xff0…...

实战指南:基于快马平台开发功能完备的windowscleaner桌面应用

最近在做一个Windows系统清理工具的项目,正好用到了InsCode(快马)平台,整个过程特别顺畅,分享下我的实战经验。 为什么需要Windows系统清理工具 作为一个长期使用Windows系统的用户,我经常遇到磁盘空间不足的问题。系统运行久了…...

5分钟上手LayerDivider:AI智能图像分层工具让设计效率提升10倍

5分钟上手LayerDivider:AI智能图像分层工具让设计效率提升10倍 【免费下载链接】layerdivider A tool to divide a single illustration into a layered structure. 项目地址: https://gitcode.com/gh_mirrors/la/layerdivider 你是否曾经面对一张复杂的插图…...

豆包API实现精准网页检索:web_search的实现流程-意图识别-信息获取-知识融合-事实校验」的Agent闭环

同样调用豆包API,如何实现网页检索工具 目录 同样调用豆包API,如何实现网页检索工具 使用 web_search 未使用 web_search 先搞懂:不加web_search,模型为什么会「闭眼瞎编」? 核心原理:web_search到底做了什么?绝不是「搜完粘贴」这么简单 第一步:意图判断与精准搜索词…...

如何通过JavaScript浏览器脚本解决八大网盘下载效率瓶颈:完整技术指南

如何通过JavaScript浏览器脚本解决八大网盘下载效率瓶颈:完整技术指南 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国…...

魔兽争霸3终极优化指南:5分钟解锁现代游戏体验的完整方案

魔兽争霸3终极优化指南:5分钟解锁现代游戏体验的完整方案 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在忍受魔兽争霸3的过时限制吗&…...

策略周度复盘 | 2026年wk18

本文观点仅供参考,不构成任何投资建议。投资有风险,入市需谨慎。一、本周大盘走势 本周(4月27日-30日)大A市场本周呈现"先抑后扬、高位震荡"格局。沪指全周小涨0.79%,但市场内部结构性分化明显——主力资金净…...

AI辅助开发新体验:无需GitHub找轮子,让快马AI直接优化你的代码逻辑

最近在优化一个电商网站的前端代码时,遇到了一个性能瓶颈:商品列表的筛选功能在数据量大的时候明显卡顿。作为一个习惯在GitHub找解决方案的开发者,这次我尝试了不同的思路——直接让AI帮我优化代码逻辑,效果出乎意料的好。 1. 问…...

新手如何通过Taotoken控制台管理API密钥与查看访问日志

新手如何通过Taotoken控制台管理API密钥与查看访问日志 1. 访问Taotoken控制台 登录Taotoken账号后,点击右上角导航栏的「控制台」入口。首次进入时会展示默认项目概览页,左侧菜单栏包含「API密钥管理」和「访问日志」两个核心功能模块。建议在开始前先…...

Claude 4.6 Opus深度对比:旗舰大模型长文本与推理能力实战横评

2026年5月3日,依托当下百度SEO热门关键词「Claude 4.6 Opus评测」「旗舰大模型横向对比」以及GEO生成式引擎优化的行业热点,企业级AI应用愈发看重长文本解析、逻辑推理精度与数据安全合规三大核心能力,想要一站式体验各类主流旗舰大模型,很多用户都会选择vipmax.ai整合的模…...

保姆级教程:用Python沙箱+PyMiniRacer搞定瑞数5(Rs5)环境检测与JS逆向

Python沙箱实战:自动化破解瑞数5环境检测的完整方案 瑞数5(Rs5)作为当前最严苛的反爬机制之一,其动态环境检测让许多爬虫工程师头疼不已。本文将分享一套基于Python沙箱的自动化解决方案,通过PyMiniRacer构建稳定的JS执…...

零基础学网络:用快马AI生成你的第一个ensp交换机VLAN配置实验

最近在学习网络基础知识,尤其是交换机VLAN配置这块,感觉ensp这个工具虽然功能强大但对新手来说操作有点复杂。经过一番摸索,我发现用InsCode(快马)平台可以快速生成ensp实验环境,特别适合像我这样的零基础学习者。下面分享下我的第…...

新手零基础入门:借助快马云端代码生成你的第一个网页

作为一个刚接触编程的新手,想要创建个人网页却不知从何下手?最近我发现了一个超实用的工具——InsCode(快马)平台,完全不需要配置复杂的本地环境,就能快速生成可运行的网页代码。下面分享我的零基础入门体验,手把手教你…...

实战指南:运用minimax coding plan与快马平台快速搭建可扩展的个人博客系统

实战指南:运用minimax coding plan与快马平台快速搭建可扩展的个人博客系统 最近在尝试搭建个人博客系统时,我采用了minimax coding plan的设计思路。这种开发方法的核心在于:用最小可行方案实现核心功能,同时为可能的扩展需求预…...

告别微信文件传输助手:用群晖NAS和Vocechat搭建一个永不丢失的私人聊天室(附Cpolar内网穿透教程)

打造永不消失的数字客厅:用群晖NAS与Vocechat构建私有聊天空间 你是否经历过这样的场景——微信里重要的文件突然过期无法下载,团队讨论记录被淹没在群聊洪流中,或是担心敏感商业对话存储在第三方服务器?这些痛点正在推动越来越多…...

跨境电商Gearbest破产启示:商业模式与财务风险分析

1. Gearbest母公司陷入破产审查:跨境电商巨头的兴衰启示录Gearbest.com这个曾经在中国跨境电商领域叱咤风云的名字,最近因其母公司Global Top E-Commerce Co., Ltd(前身为深圳市环球易购电子商务有限公司)在广东法院提交"破产…...

AI安全编排器:自动化安全任务与DevSecOps实践

1. 项目概述:一个为安全任务而生的AI编排器如果你正在寻找一个能帮你自动处理安全相关任务的AI助手,并且希望它能像经验丰富的安全工程师一样思考和工作,那么ultra-orchestrator-skill这个项目值得你花时间了解一下。简单来说,它是…...

开源GPS记录器Trekko Pico:户外探险与资产追踪利器

1. Trekko Pico GPS记录器:开源硬件的户外探险新选择作为一名长期关注开源硬件的技术爱好者,我最近被SB Components推出的Trekko Pico GPS记录器深深吸引。这款基于Raspberry Pi RP2040的开发板,专为户外探险者和旅行爱好者设计,提…...

多智能体强化学习在物流分拣中的优化实践

1. 项目背景与核心挑战在复杂任务场景下,多智能体系统面临着信息不完整、环境动态变化和协作效率低下的三重挑战。去年我们在物流分拣机器人集群项目中就深刻体会到:当20台AGV同时运作时,传统基于固定规则的任务分配方式会导致30%以上的路径冲…...

对比直连与通过Taotoken调用大模型API的延迟与稳定性体感

通过Taotoken调用大模型API的稳定性体验观察 1. 项目背景与接入方式调整 在近期的一个智能客服系统开发项目中,我们最初采用直接对接单一厂商API的方式实现对话功能。随着业务量增长和模型需求多样化,我们开始尝试通过Taotoken平台统一接入多个大模型。…...

无人机动态预测:梯度增强型分区GP框架解析

1. 无人机动态预测的技术挑战与解决方案在无人机控制领域,实时动态预测一直是个棘手的问题。传统方法要么过于简化导致预测不准,要么计算复杂难以实时运行。我最近在NASA的SUI耐力型四旋翼平台上做了一系列实验,发现当飞行速度超过8m/s时&…...

WeClaw:通过微信远程调用AI编程助手,实现移动端无缝编码

1. 项目概述:将微信变身为AI编程助手的远程控制台如果你和我一样,经常在电脑前使用Claude Code、Cursor这类AI编程工具,但同时又希望能在离开电脑时,比如通勤路上、会议室里,也能随时调用它们处理一些紧急的代码问题&a…...