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

理解langchain langgraph 官方文档示例代码中的MemorySaver

以下是langchain v0.3官方示例代码

from langgraph.checkpoint.memory import MemorySaver
from langgraph.graph import START, MessagesState, StateGraph# 可以理解为:定义一个流程,这个流程中用到的数据类型是Messages。 <---定义一个有向图,指定状态模式/格式/规范为 MessagesState这种规范
workflow = StateGraph(state_schema=MessagesState)# 定义调用模型的函数
def call_model(state: MessagesState):response = model.invoke(state["messages"])return {"messages": response}# 整个流程只有一个节点,可谓是最简单的任务流了
workflow.add_edge(START, "model")
workflow.add_node("model", call_model)# 把“记忆保存器”这个中间件注入到流程中
memory = MemorySaver()
app = workflow.compile(checkpointer=memory)config = {"configurable": {"thread_id": "abc123"}}query = "Hi! I'm Bob."input_messages = [HumanMessage(query)]
output = app.invoke({"messages": input_messages}, config)
output["messages"][-1].pretty_print()  # output contains all messages in statequery = "What's my name?"input_messages = [HumanMessage(query)]
output = app.invoke({"messages": input_messages}, config)
output["messages"][-1].pretty_print()

输出 

==================================[1m Ai Message [0m==================================Hi Bob! How can I assist you today?==================================[1m Ai Message [0m==================================Your name is Bob! How can I help you today, Bob?

这里涉及到图论的基础知识,要快速了最基础概念,推荐这个视频:【硬核干货】图论到底是个什么玩意儿?图论入门:树与生成树 (Graph Theory: Tree and Spanning Tree)_哔哩哔哩_bilibili

图 (Graph):基于图论的概念,它由节点 (nodes) 和边 (edges) 组成。

节点 (Nodes): 节点是工作流中的执行单元,每个节点都关联一个函数,该函数定义了节点的执行逻辑。

边 (Edges): 边定义了节点之间的连接关系,以及工作流的执行路径。

状态 (State):标记节点及节点的状态,定义节点之间的连接和流向。--> 简单直观地理解的话,可以把State理解为我们常规编程中常用的Data

StateGraph=  State + Graph --> 依据【状态】来运作的【有向图】--->可近似理解为工作流

workflow = StateGraph(state_schema=MessagesState)

当中,state_schema 参数定义了这个“状态驱动的有向图” 的状态描述格式/标准/规范 采用 MessagesState 这种数据结构的规范。

--> 更通俗理解的话,可以把它想象成是以下语句在LangGraph场景下的固有写法:

# 以下这是一段伪代码
workflow = LangChainWorkFlow(data_type=Messages) 

------ MemorySaver ------

memory = MemorySaver()
app = workflow.compile(checkpointer=memory)

这里的MemorySaver有点像一个中间件,你可以把它当作中间件来理解。

中间件有什么特征:它在程序执行过程中某些数据流的环节介入,并根据设定的逻辑对部分数据进行加工或调整数据的流向,而这一切对用户来说是透明的,看不见的,像一只看不见的手在那里做了些什么。

  • 它不是核心逻辑,但能在数据流经过时 插入 自己的逻辑。
  • 它不改变程序的主要流程,但能 修改、过滤、检查 数据。
  • 它对用户是透明的,但对系统来说是 必不可少的

中间件在程序中的作用

作用示例
数据过滤日志记录、请求验证、权限检查
数据转换格式转换、加密/解密、压缩
流向控制负载均衡、路由选择、错误处理

 MemorySaver 在这里中的作用类似于一个“中间件”,workflow编译的时候提供了一个“检查点(checkpointer)”让这个中间件介入进去,让这个看不见的手去捕获并加工里面数据。

这个参数名叫checkpointer我觉得名字起得非常好。

相关文章:

理解langchain langgraph 官方文档示例代码中的MemorySaver

以下是langchain v0.3官方示例代码 from langgraph.checkpoint.memory import MemorySaver from langgraph.graph import START, MessagesState, StateGraph# 可以理解为&#xff1a;定义一个流程&#xff0c;这个流程中用到的数据类型是Messages。 <---定义一个有向图&…...

JumpServer基础功能介绍演示

堡垒机可以让运维人员通过统一的平台对设备进行维护&#xff0c;集中的进行权限的管理&#xff0c;同时也会对每个操作进行记录&#xff0c;方便后期的溯源和审查&#xff0c;JumpServer是由飞致云推出的开源堡垒机&#xff0c;通过简单的安装配置即可投入使用&#xff0c;本文…...

Spring @Bean注解使用场景二

bean:最近在写一篇让Successfactors顾问都能搞明白的sso的逻辑的文章&#xff0c;所以一致在研究IAS的saml2.0的协议&#xff0c;希望用代码去解释SP、idp的一些概念&#xff0c;让顾问了解SSO与saml的关系&#xff0c;在github找代码的时候发现一些代码的调用关系很难理解&…...

创业者认知、思辨、成长指南

一、为什么要创业&#xff1f; 1、因为没有家产继承和家庭关系&#xff0c;不能躺平&#xff1b; 比如父母留下了大量的财富&#xff0c;靠钱生钱吃利息&#xff0c;收租&#xff0c;做做投资这些形式&#xff0c;就可以活得很好&#xff1b; 再比如父母或者血亲有资源&#…...

ECharts中Map(地图)样式配置、渐变色生成

前言 ECharts是我们常用的图表控件&#xff0c;功能特别强大&#xff0c;每次使用都要查API比较繁琐&#xff0c;这里就记录开发中常用的配置。 官网&#xff1a;https://echarts.apache.org/handbook/zh/get-started 配置项&#xff1a;https://echarts.apache.org/zh/opti…...

PostgreSQL存储管理体系结构学习笔记2

1.表和元组的组织方式 在PostgreSQL中&#xff0c;同一个表中的元组按照创建顺序依次插入到表文件中。元组之间不进行关联&#xff0c;这样的表文件称之为堆文件。PostgreSQL系统中包含了四种堆文件&#xff1a;普通堆&#xff0c;临时堆&#xff0c;序列&#xff0c;TOAST表。…...

【PTA题目解答】7-3 字符串的全排列(20分)next_permutation

1.题目 给定一个全由小写字母构成的字符串&#xff0c;求它的全排列&#xff0c;按照字典序从小到大输出。 输入格式: 一行&#xff0c;一个字符串&#xff0c;长度不大于8。 输出格式: 输出所有全排列&#xff0c;每行一种排列形式&#xff0c;字典序从小到大。 输入样例…...

SOME/IP:用Python实现协议订阅、Offer、订阅ACK与报文接收

文章目录 前言一、代码层次二、详细代码1. eth_scapy_sd.py2、eth_scapy_someip.py3、network_define.py4、packet_define.py5、unpack_define.py6、someip_controller.py 前言 1、需要pip安装scapy库 2、需要修改根据实际情况配置network_define.py 3、执行someip_controller…...

嵌入式八股ARM篇

前言 ARM篇主要介绍一下寄存器和中断机制,至于汇编这一块…还请大家感兴趣自行学习 1.寄存器 R0 - R3 R4 - R11 寄存器 R0 - R3一般用作函数传参 R4 - R11用来保存程序运算的中间结果或函数的局部变量 在函数调用过程中 注意在发生异常的时候 cortex-M0架构会自动将R0-R3压入…...

剑指 Offer II 087. 复原 IP

comments: true edit_url: https://github.com/doocs/leetcode/edit/main/lcof2/%E5%89%91%E6%8C%87%20Offer%20II%20087.%20%E5%A4%8D%E5%8E%9F%20IP/README.md 剑指 Offer II 087. 复原 IP 题目描述 给定一个只包含数字的字符串 s &#xff0c;用以表示一个 IP 地址&#xf…...

RCE-Labs超详细WP-Level10(无字母命令执行_二进制整数替换)

温馨提示 这关涉及的知识点较多, 写的很长, 中间留了很多错误引导(本人在实验时遇到的问题, 或许你们也会遇到), 在后文才逐步解释源码分析 跟前几关一样, 更改了 WAF 的过滤字段这个关卡, 只有0, 1, (单引号), $, <, \ , ( , )可以用解题分析(实验这些命令, 可以先在自己本…...

数据结构(泛型)

1,装箱 int i 10;Integer j Integer.valueOf(i);2.拆箱 Integer i 10;int j i.intValue(); 3.自动装箱 int i 10;Integer j i;int i 10;Integer j (Integer) i; 4,自动拆箱 Integer i 10;int j i;Integer i 10;int j (int) i; 有一段代码需要解析一下&#xff1a; …...

Android Dagger2 框架辅助工具模块深度剖析(六)

一、引言 在 Android 开发领域&#xff0c;依赖注入&#xff08;Dependency Injection&#xff0c;简称 DI&#xff09;作为一种至关重要的设计模式&#xff0c;能显著降低代码间的耦合度&#xff0c;提升代码的可测试性与可维护性。Dagger2 作为一款强大的依赖注入框架&#…...

LVGL第三方库的使用(中文库)

一、第三方库文档 3rd party libraries&#xff08;第三方库&#xff09; — LVGL 文档 FreeType 中文字库 SDL 模拟器使用freetype中文字库 1.开启字库 2.安装freetype 字库 sudo apt-get update sudo apt-get install libfreetype6-dev 3.修改makefile 添加字库 4.显示中…...

【愚公系列】《高效使用DeepSeek》009-PPT大纲自动生成

标题详情作者简介愚公搬代码头衔华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。近期荣誉2022年度…...

使用easyexcel实现单元格样式设置和下拉框设置

1.单元格样式设置 1.1实体类 public class DemoData {ExcelProperty("PK")private String name;ExcelProperty("年龄")private int age;// 必须提供无参构造方法public DemoData() {}public DemoData(String name, int age) {this.name name;this.age …...

ngx_conf_read_token

file_size ngx_file_size(&cf->conf_file->file.info); 此时 file_size2656 当然还是和上次一样 for ( ;; ) {if (b->pos > b->last) { 此时 b->pos 0x57759a8b77f4 b->last 0x57759a8b8230 b->start0x57759a8b77d0 条件不成立 ch *b->po…...

Certbot实现SSL免费证书自动续签(CentOS 7 + nginx/apache)

在 CentOS 上&#xff0c;你可以使用 Let’s Encrypt 提供的 Certbot 工具来申请和自动续约免费的 SSL 证书。 1. 安装 Certbot CentOS 7 安装 EPEL 和 Certbot yum install -y epel-release yum install -y certbot python3-certbot-nginx如果使用的是 Apache&#xff1a; …...

【使用 Java 调用命令行工具:完整指南】

在 Java 中调用命令行工具是一个常见的需求&#xff0c;尤其是在需要与外部程序交互或执行系统命令时。本文将详细介绍如何使用 Java 调用命令行工具&#xff0c;并提供一个完整的示例来演示如何下载视频。 1. 为什么需要调用命令行工具&#xff1f; 命令行工具通常提供了强大…...

pythonSTL---sys

sys 是 Python 标准库中的一个内置模块&#xff0c;它提供了许多与 Python 解释器和系统环境进行交互的功能。 sys方法 1. 导入 sys 模块 在使用 sys 库的功能之前&#xff0c;需要先导入它&#xff1a; import sys2. 命令行参数 (sys.argv) sys.argv 是一个包含命令行参数…...

数据分布偏移检测:保障模型在生产环境中的稳定性

数据分布偏移检测:保障模型在生产环境中的稳定性 引言 在机器学习系统从开发环境部署到生产环境的过程中,数据分布偏移问题是影响模型性能的主要挑战之一。当训练数据与生产环境中的数据分布不一致时,即使是经过精心调优的模型也可能表现出明显的性能下降。本文将深入探讨…...

redis删除与先判断再删除的区别

在Redis中&#xff0c;“先判断存在再删除”与“直接删除”的区别主要体现在‌操作效率、原子性保障、并发安全性‌三个方面&#xff0c;具体对比如下&#xff1a; ‌1. 操作效率‌ ‌直接删除‌&#xff1a;仅需执行DEL命令一次&#xff0c;无论键是否存在均直接操作&#xf…...

3.6、数字签名

目录 数字签名数字签名与验证过程 数字签名 数字签名是签名者使用自己的私钥对待签名数据的哈希值做密码运算得到的一个结果 第一签名者用自己的私钥来对我们待签数据的哈希值进行签名&#xff0c;直接对数据进行签名其实也是可以的&#xff0c;只是对数据签名&#xff0c;这…...

华为手机助手输入连接码时光标乱跳

问题复现&#xff1a;输入12345678&#xff0c;光标自动跳转导致连接码出现乱序情况。 千万别试着找出规律&#xff0c;已试动态规律非大牛误轻试 问题原因&#xff1a; 想啥呢&#xff1f;华哥的软件又不是我开发我要Know Why干啥 我只需关心解决方案 &#xff08;可能时输入…...

本地化部署Deepseek关于Ollama 安全加固方案(新手易学)

本地化部署Deepseek关于Ollama 安全加固方案&#xff08;新手易学&#xff09; 本方案针对使用ChatBox调用Ollama部署DeepSeek-R1:14b模型时的安全防护需求&#xff0c;提供四重防护措施。 &#x1f512; 一、关闭外网访问&#xff08;关键步骤&#xff09; 1. 修改监听地址 …...

C++ STL算法函数 —— 应用及其操作实现

一、STL算法函数分类概述 STL算法库提供了大量实用函数&#xff0c;按功能可分为以下五类&#xff1a; 1. 不修改序列的操作 定义&#xff1a;这些算法不会改变容器中的元素&#xff0c;仅对数据进行查询或统计。 典型函数&#xff1a; 函数功能示例find(first, last, value…...

AI数字人:口播与唇形同步的福音,支持本地部署/批量生成/口齿清晰

Heygem&#xff1a;开源前端界面的老六玩家 好消息&#xff01;Heygem 在 GitHub 上开源了&#xff01;不过&#xff0c;嘻嘻&#xff0c;只是前端界面开源&#xff0c;感觉更像是来 GitHub 刷一波知名度。不过这依然是个值得关注的工具。让我们先来看看它的官方介绍&#xff…...

【鸿蒙】封装日志工具类 ohos.hilog打印日志

封装一个ohos.hilog打印日志 首先要了解hilog四大日志类型&#xff1a; info、debug、warm、error 方法中四个参数的作用 domain: number tag: string format: string ...args: any[ ] 实例&#xff1a; //普通的info日志&#xff0c;使用info方法来打印 //第一个参数 : 0x0…...

附下载 | 2024 OWASP Top 10 基础设施安全风险.pdf

《2024 OWASP Top 10 基础设施安全风险》报告&#xff0c;由OWASP&#xff08;开放网络应用安全项目&#xff09;发布&#xff0c;旨在提升企业和组织对基础设施安全风险、威胁与漏洞的意识&#xff0c;并提供高质量的信息和最佳实践建议。报告列出了2024年最重要的10大基础设施…...

Chatbox通过百炼调用DeepSeek

解决方案链接&#xff1a;评测&#xff5c;零门槛&#xff0c;即刻拥有DeepSeek-R1满血版 方案概览 本方案以 DeepSeek-R1 满血版为例进行演示&#xff0c;通过百炼模型服务进行 DeepSeek 开源模型调用&#xff0c;可以根据实际需求选择其他参数规模的 DeepSeek 模型。百炼平台…...

Vue前端项目部署到宝塔面板的详细过程

目录 前言 一、项目的打包与上传 1、修改前端项目 2、关于test环境的补充修改 3、打包前端项目 二、添加站点&#xff0c;启动项目 三、总结 前言 书接上回 SpringBoot项目部署到宝塔面板的详细过程-CSDN博客 本次以SmartAdmin的项目为例&#xff0c;通过宝塔面板部署…...

免费高质量贴图(Textures) 网站推荐

以下是一些提供 免费或高质量贴图&#xff08;Textures&#xff09; 的网站&#xff0c;包括 PBR 贴图、HDRI 贴图、材质等&#xff0c;适用于 Three.js、Blender、Unity、Unreal Engine 等软件。 &#x1f30d; 1. Poly Haven&#xff08;https://polyhaven.com/&#xff09;⭐…...

C++进阶——map和set的使用

目录 1、序列式容器和关联式容器 2、set系列的使用 2.1 set和multiset的参考文档 2.2 set类的介绍 2.3 set的构造和迭代器 2.4 set的增删查 2.5 set的insert和迭代器遍历 2.6 set的find和erase 2.7 set的lower_bound和upper_bound 2.8 multiset和set的差异 2.9 349.…...

AI机器学习---Anaconda

Anaconda指的是一个开源的Python发行版本&#xff0c;其包含了Conda、Python等180多个科学包及其依赖项。因为包含了大量的科学包&#xff0c;Anaconda 的下载文件比较大&#xff08;约 531 MB&#xff09;&#xff0c;如果只需要某些包&#xff0c;或者需要节省带宽或存储空间…...

如何在Futter开发中做性能优化?

目录 1. 避免不必要的Widget重建 问题&#xff1a;频繁调用setState()导致整个Widget树重建。 优化策略&#xff1a; 2. 高效处理长列表 问题&#xff1a;ListView一次性加载所有子项导致内存暴涨。 优化策略&#xff1a; 3. 图片加载优化 问题&#xff1a;加载高分辨率…...

leetcode 75.颜色分类(荷兰国旗问题)

题目描述 题目分析 本题是经典的「荷兰国旗问题」&#xff0c;由计算机科学家 Edsger W. Dijkstra 首先提出。 要想单独解决这道题本身还是很简单的&#xff0c;统计0、1、2的数量然后按顺序赋值&#xff0c;或者手写一个冒泡排序&#xff0c;whatever。 但是在这一题中我们主…...

JVM--垃圾回收

垃圾回收的概念 垃圾回收主要针对的是堆中的对象&#xff0c;堆是一个共享的区域&#xff0c;创建的对象和数组都放在这个位置。但是我们不能一直的创建对象&#xff0c;也不是所有的对象能一直存放&#xff0c;如果不进行垃圾回收&#xff0c;内存迟早会耗尽&#xff0c;及时…...

Spring boot3-Http Interface: 声明式编程

来吧 1.首先引入pom.xml依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId> </dependency> 2.创建WebClientController控制器 import com.atguigu.boot3_07_http.serv…...

springboot EasyExcel 实现导入导出

1. 添加依赖 确保 Maven 依赖中包含 EasyExcel 3.0.5&#xff1a; <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.0.5</version></dependency><!-- excel工具 --><dep…...

基于RAGFlow本地部署DeepSpeek-R1大模型与知识库:从配置到应用的全流程解析

作者&#xff1a;后端小肥肠 &#x1f34a; 有疑问可私信或评论区联系我。 &#x1f951; 创作不易未经允许严禁转载。 姊妹篇&#xff1a; DeepSpeek服务器繁忙&#xff1f;这几种替代方案帮你流畅使用&#xff01;&#xff08;附本地部署教程&#xff09;-CSDN博客 10分钟上手…...

spring 创建单例 Bean 源码分析

一、创建单例Bean 1、创建单例 Bean 通过方法getBean()来创建单例bean。 代码入口&#xff1a; org.springframework.beans.factory.support.DefaultListableBeanFactory#preInstantiateSingletons spring boot version&#xff1a;2.6.13 org.springframework.beans.factory…...

GetCurrentTime

在实际编程中难免要获取当前时间并且进行格式化&#xff0c;本文给出了多种 GetCurrentTime() 方法以供选择。 C语言下使用strftime C 语言中可以使用 <time.h> 中的函数来获取和格式化时间 #include <stdio.h> #include <time.h>char* getCurrentTime() …...

HTB 学习笔记 【中/英】《Web 应用简介》P1

&#x1f4cc; 这篇文章讲了什么&#xff1f; 介绍了 Web 应用 的概念、架构&#xff0c;以及与传统网站的区别。重点讲解了 Web 安全风险&#xff0c;包括 常见攻击方法&#xff08;SQL 注入、文件包含、不安全的文件上传等&#xff09;。介绍了 Web 渗透测试 的重要性&#…...

ROS catkin_make编译报错问题

对问题 CMake Error at graduation_design/CMakeLists.txt:226 (add_dependencies): The dependency target "graduation_design_generate_messages_cpp" of target "listener" does not exist 检查 generate_messages() 是否被注释 对 CMake Error at …...

【结构设计】3D打印创想三维Ender 3 v2

【结构设计】3D打印创想三维Ender 3 v2 文章目录 前言一、Creality Slicer1.2.3打印参数设置二、配件更换1.捆扎绑扎线2.气动接头3D打印机配件插头3.3D打印机配件Ender3pro/V2喷头套件4.读卡器 TF卡5.micro sd卡 三、调平四、参考文章总结 前言 使用工具&#xff1a; 1.创想三…...

并发编程2

接并发编程1 synchronized锁的实现 通过底层指令控制实现&#xff0c;Java提供的一种原子性内置锁&#xff0c;在进入synchronized后会从主内存复制一份共享变量到自己的工作内存&#xff0c;在工作内存中修改完成后&#xff0c;退出时会把工作内存的值写入到主内存&#xff…...

Linux 中 Git 使用指南:从零开始掌握版本控制

目录 1. 什么是 Git&#xff1f; Git 的核心功能&#xff1a; 2. Git 的安装 Ubuntu/Debian 系统&#xff1a; 验证安装&#xff1a; 3.gitee库 4. Git 的首次配置 配置用户名和邮箱&#xff1a; 查看配置&#xff1a; 5. Git 的基本使用 初始化仓库 添加文件到暂存区…...

C# Exe + Web 自动化 (BitComet 绿灯 自动化配置、设置)

BitComet GreenLight,内网黄灯转绿灯 (HighID), 增加p2p连接率提速下载-CSDN博客 前两天写个这个&#xff0c;每次开机关机后要重来一遍很麻烦的索性写个自动化。 先还是按照上面的教程自己制作一遍&#xff0c;留下Luck 以及 路由器相关的 端口记录信息。 &#xff08;因为自…...

2024年12月CCF-GESP编程能力等级认证C++编程四级真题解析

四级真题的难度: 一、总体难度评价 CCF-GESP编程能力等级认证C++四级真题的难度通常被认为相对较高。它不仅要求考生具备扎实的C++编程基础,还需要考生掌握一定的算法和数据结构知识,以及良好的问题解决能力。 二、具体难度分析 ‌理论知识考察‌: 单选题和判断题中,会涉…...

谷歌Chrome或微软Edge浏览器修改网页任意内容

在谷歌或微软浏览器按F12&#xff0c;打开开发者工具&#xff0c;切换到console选项卡&#xff1a; 在下面的输入行输入下面的命令回车&#xff1a; document.body.contentEditable"true"效果如下&#xff1a;...