spring-ai-alibaba 学习(二十)——graph之检查点

前面学习了graph的基本概念,参数设置,特殊节点和边,今天学习一下检查点

检查点可能名称比较抽象,换个名字可能比较容易理解,进度保存点或者存档点,可以类比游戏中保存当前游戏进度的存档进度

主要用于人工介入的场景,大概流程是每个节点后保存检查点,在某些节点前或后中断,进行人工操作,操作完成后,调用恢复接口resume,graph接收用户输入并根据最近的检查点(存档)恢复执行

可以将其分为存档进度,存档执行流程和存档执行器来了解 

存档进度

CheckPoint 类就好比被保存的存档,类中包含一个id(默认自动生成一个uuid),当前节点id nodeId,下一节点id nextNodeId,全局状态 Map<String, Object> state,用后三个字段来记录当前图的执行状态。

存档执行流程

graph会在开始节点记录初始检查点,并且在每个节点执行完毕后更新全局状态时保存检查点,

在中断或异常后,通过调用resume接口来恢复现场,需要再resume接口的RunnableConfig参数中设置checkPointId

每个会话有自己的threadId,不同threadId的检查点会分开管理,确保可以按不同会话来恢复进度

存档器

简单样例

        StateGraph graph = ...CompileConfig compileConfig = CompileConfig.builder()
.saverConfig(SaverConfig.builder().type(SaverConstant.FILE).register(SaverConstant.FILE, saver).build()).build();CompiledGraph app = graph.compile(compileConfig);

存档器的设置

在前面参数设置章节有提到过,主要是在编译图时通过CompileConfig设置

CompileConfig 中包含 SaverConfig

SaverConfig中包含一个Map<String, BaseCheckpointSaver>类型的savers属性

SaverConfig提供一个register方法来注册存档器,注册的存档器会放到savers中

SaverConfig还包含一个String类型的type字段

当调用SaverConfig的无参get方法时,取savers.get(type),即savers中key为type对应值的存档器,所以type可以理解为默认存档器的key

存档器的实现类

MemorySaver:基于内存的存档器,断电后存档消失

FileSystemSaver:基于文件系统的存档器

MongoSaver:基于mongodb的存档器

RedisSaver:基于redis的存档器

VersionedMemorySaver:带版本的内存存档器,适合一个会话多次执行图的情况,每次在图的结束节点会将检查点移入历史版本

存档器内部工作原理

以MemorySaver为例了解一下Saver的内部工作原理

MemorySaver内部包含一个 Map<String, LinkedList<Checkpoint>> 类型的属性,key为threadId,值为每个节点后保存的检查点

MemorySaver实现了BaseCheckpointSaver接口,提供get、put、list、clear、release、getLast等方法

调用 put 方法时若 RunnableConfig 的 checkPointId 为空,则直接存入当前检查点,并更新 RunnableConfig 中的 checkPointId;若非空,则替换相同checkPointId的检查点(实际由于更新后的RunnableConfig被丢弃,所以checkPointId一直都是空)

调用 get 方法时若 RunnableConfig 的 checkPointId 为空,则取链表中第一条记录(最新记录);若不为空,则取对应id的 CheckPoint 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/91888.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/91888.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

sqli-labs:Less-19关卡详细解析

1. 思路&#x1f680; 本关的SQL语句为&#xff1a; $insert"INSERT INTO security.referers (referer, ip_address) VALUES ($uagent, $IP)";注入类型&#xff1a;字符串型&#xff08;单引号包裹&#xff09;、INSERT操作提示&#xff1a;参数需以闭合关键参数&a…

Java小红书源码1:1还原uniapp_仿小红书源码

在内容驱动型社交平台兴起的背景下&#xff0c;小红书作为图文/视频种草社区的代表&#xff0c;其产品结构与功能体验逐渐成为众多开发者与创业团队的模仿蓝本。本项目基于Java后端uni-app前端栈&#xff0c;完整复刻小红书主要功能&#xff0c;支持多端&#xff08;小程序、H5…

USB Type-C PD协议一文通

原文&#xff1a;https://www.richtek.com/Design%20Support/Technical%20Document/AN056?sc_langzh-TW译者&#xff1a;TrustZone1、概述 USB Type-C标准的出现是为了满足不断增长的现代设备之间的连接需要&#xff0c;它在传统USB标准的基础上提供了更高的电源传输能力和资料…

AI文档比对和Word的“比较”功能有什么区别?

AI文档比对工具的核心区别在于&#xff0c;它超越了Word的纯文本“找不同”&#xff0c;能精准处理扫描件、表格及印章&#xff0c;并将文档审查从被动的文本核对&#xff0c;处理大文档也更为快速及准确。 为什么Word的“比较”功能已经不够用了&#xff1f; 对于许多专业人士…

AI驱动SEO关键词智能进化

内容概要 随着人工智能&#xff08;AI&#xff09;技术的快速演进&#xff0c;搜索引擎优化&#xff08;SEO&#xff09;领域正迎来前所未有的变革。本文核心探讨AI如何驱动SEO关键词的智能进化&#xff0c;重点解析人工智能革新关键词研究与优化策略的机制&#xff0c;包括智能…

基于SpringBoot+MyBatis+MySQL+VUE实现的青年公寓服务平台管理系统(附源码+数据库+毕业论文+部署教程+配套软件)

摘 要 传统信息的管理大部分依赖于管理人员的手工登记与管理&#xff0c;然而&#xff0c;随着近些年信息技术的迅猛发展&#xff0c;让许多比较老套的信息管理模式进行了更新迭代&#xff0c;房屋信息因为其管理内容繁杂&#xff0c;管理数量繁多导致手工进行处理不能满足广…

12.Redis 主从复制

Redis 主从复制Redis 主从复制1. Redis 主从复制架构2. 主从复制实现2.1 主从命令配置2.1.1 启用主从同步2.1.2 查看日志观察同步状态2.1.3 修改 Slave 节点配置文件2.1.4 删除主从同步3. 主从复制故障恢复3.1 Slave 节点故障和恢复3.2 Master 节点故障和恢复3.3 常见主从复制故…

微服务的编程测评系统8-题库管理-竞赛管理

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录前言1. 添加题目1.1 service方法1.2 画页面-引入富文本和代码编辑框1.3 子组件中发送请求2. 获取题目详情3. 编辑题目4. 删除题目5. Vue生命周期函数5.1 创建阶段5.2…

基于springboot的学习辅导系统设计与实现

学生&#xff1a;注册登录&#xff0c;学习视频&#xff0c;学习资料&#xff0c;在线交流&#xff0c;系统公告&#xff0c;个人中心&#xff0c;后台管理教师&#xff1a;登录&#xff0c;个人中心&#xff0c;学习视频管理&#xff0c;学习资料管理&#xff0c;签到记录管理…

Kubernetes (K8s) 部署Doris

官网提供yaml地址下载部署 https://doris.apache.org/zh-CN/docs/2.0/install/cluster-deployment/k8s-deploy/install-env/禁用和关闭 swap 在部署 Doris 时&#xff0c;建议关闭 swap 分区。 通过以下命令可以永久关闭 swap 分区。 echo "vm.swappiness 0">>…

AI生成图片工具分享!

CZL在线工具箱近日推出了一款基于Cloudflare Workers AI的免费在线AI图片生成服务。该服务采用**Stable Diffusion XL&#xff08;SDXL&#xff09;**模型&#xff0c;为用户提供高质量、逼真的图像生成体验。 核心特性 全球GPU网络&#xff1a;基于Cloudflare全球分布式GPU网…

Spring Batch的2种STEP定义方式

Spring Batch的2种STEP定义方式 1. 第一种&#xff1a;基于Chunk-Oriented Processing&#xff08;read&#xff0c;process&#xff0c;write&#xff09;形式 适用场景&#xff1a; 大数据量批处理&#xff1a;适合需要分批次读取、处理并写入大量数据的场景&#xff08;如数…

前端JS-调用单删接口来删除多个选中文件

当开发中遇到&#xff1a;服务端没有删除多个文件功能接口&#xff0c;只有单个删除文件功能接口时&#xff0c;会遇到如何多选删除文件效果最佳。await Promise.all(selectedDocPaths.map(async (path) > {try {await fileDelete(path)} catch (err) {throw new Error(删除…

机器学习——过采样(OverSampling),解决类别不平衡问题,案例:逻辑回归 信用卡欺诈检测

下采样&#xff1a;机器学习——下采样&#xff08;UnderSampling&#xff09;&#xff0c;解决类别不平衡问题&#xff0c;案例&#xff1a;逻辑回归 信用卡欺诈检测-CSDN博客 &#xff08;完整代码在底部&#xff09; 解决样本不平衡问题&#xff1a;SMOTE 过采样实战讲解 …

Ettus USRP X440 进行“超短波个人卫星信号的侦查与干扰”任务

结合 Ettus USRP X440 进行“超短波个人卫星信号的侦查与干扰”任务&#xff0c;可以构建一个高性能、灵活可编程的电子对抗系统原型平台。以下是面向科研/工程/军用验证场景的构思和技术文案&#xff1a; &#x1f6f0;️ 项目名称建议&#xff08;可选&#xff09;&#xff1…

如何在出售Windows11/10/8/7前彻底清除电脑数据

为了保护您的个人数据&#xff0c;在出售电脑前彻底清除数据是一个明智之举。然而&#xff0c;仅仅删除文件是不够的&#xff0c;因为恢复工具通常可以恢复它们。因此&#xff0c;本指南分享了如何在出售电脑前清除数据&#xff0c;包括 Windows 11/10/8/7&#xff0c;确保您的…

Go语言实战案例:多协程并发下载网页内容

本文是《Go语言100个实战案例 网络与并发篇》第6篇&#xff0c;实战演示如何使用 Goroutine 和 Channel&#xff0c;实现多协程并发抓取网页内容&#xff0c;提升网络请求效率&#xff0c;为构建爬虫、内容聚合器、API 批量采集器打下基础。一、实战背景在互联网项目中&#x…

分享链接实现状态共享

有这么一个场景&#xff1a;就是有一些列表页面&#xff0c;然后上面是有一些筛选项的&#xff0c;我去对这个列表做了一些筛选出来一个结果&#xff0c;然后我想把这个链接&#xff0c;或者说把这个筛选结构给分享出去&#xff0c;让别人在打开这个页面的时候&#xff0c;也是…

Fay数字人如何使用GPT-SOVITS进行TTS转换以及遇到的一些问题

一、GPT-SoVITS 简介 GPT-SoVITS 是一款开源的语音合成&#xff08;TTS&#xff09;工具&#xff0c;结合了 GPT 模型的文本理解能力与 SoVITS&#xff08;Sound of Voice In Text-to-Speech&#xff09;的声纹模拟技术&#xff0c;能够实现高自然度、个性化的语音合成。它支持…

HTML 颜色值

HTML 颜色值 引言 在网页设计和开发中,颜色是一个重要的元素,它能够帮助用户更好地理解内容,提升视觉效果。HTML 颜色值是用于指定网页中元素颜色的一种标准表示方法。本文将详细介绍 HTML 颜色值的种类、表示方法以及在实际应用中的使用技巧。 HTML 颜色值种类 HTML 颜…