langgraph教程系列-08-让agent记住过去-长期记忆

发布时间:2026/8/4 2:08:03

langgraph教程系列-08-让agent记住过去-长期记忆
本文是「LangGraph 教程系列」第 8 篇。写作时基于 langgraph 1.2.10、langchain 1.3.14、langchain-openai 1.4.1、Python 3.12。配套代码仓库 https://github.com/wxj006007/deep-research-assistant 本篇对应 tagv2.2。上一版的研究助手已经会停下来等人审批。审批后恢复得很好只要还是同一个thread_id它就记得这轮检索查过什么、现在该去哪一个节点。但用户换一条新会话呢比如昨天研究过 checkpoint今天继续问 Store又比如他每次都希望中文回答、先给结论再列步骤。checkpoint 不应承担这些跨会话信息——它记录的是某一次执行不是用户档案。这一篇把“记住过去”拆清楚短期记忆仍归 checkpointer长期记忆交给 Store。一、三种东西不要都叫 memory“记忆”在 agent 系统里很容易被说成一个模糊概念。这里至少有三层层次存放内容生命周期本例实现当前 state当前节点需要的 question、docs、round一次图运行ResearchState短期记忆可暂停、恢复、回放的执行快照一个thread_idMemorySaver长期记忆用户偏好、历史研究摘要跨多个 threadInMemoryStore前两层跟着图的执行走第三层以用户为边界独立于某次执行。把它们混在一起常见后果是新会话读不到信息或者所有旧资料不断塞进 statecheckpoint 越来越大。二、v2.2 的记忆分层用户thread_idMemorySaver短期记忆InMemoryStore长期记忆用户偏好历史研究摘要一个用户可以有多条 thread每条 thread 的 checkpoint 相互隔离但它们都可以读取同一个用户 namespace 下的长期 Store。反过来另一个用户即便问了同样的问题也不应读取到前者的资料。三、Store 的最小模型namespace、key 和 value这一篇故意不引入 embedding 或向量库。我们先用可复现的 namespace/key 模型讲清数据归属(users, user_id, profile) - preferences (users, user_id, research) - summaries第一条记录保存稳定的用户偏好第二条记录保存一个摘要列表。它们的 value 都是普通字典store.put((users,alice,profile),preferences,{topics:[LangGraph],style:先给结论再给简洁步骤,language:中文,},indexFalse,)indexFalse明确表示本例不建向量索引、不做语义检索。以后需要从大量历史资料中按自然语言召回时再讨论search()、embedding 和索引策略现在的重点是把跨会话存取边界设计正确。四、把用户身份放进运行时上下文用户身份不是问题本身也不该作为每个节点都写入的 state 字段。LangGraph 的Runtime适合承载这类运行时信息fromdataclassesimportdataclassdataclass(frozenTrue)classResearchContext:user_id:strresearch_id:str编译图时同时传入 checkpointer 与 storegraphbuilder.compile(checkpointerMemorySaver(),storeInMemoryStore(),)节点通过runtime.context知道当前用户通过runtime.store读写长期记忆defload_memory_node(_:MemoryResearchState,runtime:Runtime[ResearchContext])-dict:profileruntime.store.get(profile_namespace(runtime.context.user_id),preferences)summariesruntime.store.get(research_namespace(runtime.context.user_id),summaries)return{memory_context:{preferences:profile.valueifprofileelse{},summaries:summaries.value.get(items,[])ifsummarieselse[],}}memory_context只是这次执行读取到的记忆副本放入 state 供 planner 和 writer 使用真正长期保存的数据仍在 Store 中。这样 checkpoint 保存的是“本轮曾读取了什么上下文”Store 保存的是“下次还能取到什么档案”。五、图结构先读后写v2.2 保留第7篇的人在回路。新增两个节点开始时load_memory成稿后persist_memory。通过拒绝继续完成START读取长期记忆规划查询人工审核搜索取消评估成稿保存研究摘要END读取节点在plan前因此查询规划可以根据用户的语言、风格和已有研究避免重复。保存节点只在成功成稿后执行用户在审批阶段拒绝任务时不应凭空新增一条“研究完成”记忆。六、保存摘要时为什么要有research_id图可能因重试、进程恢复或调用方重复提交而再次执行。若每次都 append一项研究会在长期记忆里留下多份重复摘要。因此 v2.2 的上下文里还有research_id。persist_memory_node写入前会删除同 id 的旧项再保存新项并把历史限制在最近 5 条items[itemforiteminitemsifitem.get(research_id)!research_id]items.append({research_id:research_id,question:state[question],summary:state.get(answer,)[:500],})store.put(namespace,summaries,{items:items[-5:]},indexFalse)这不是分布式事务的完整方案但已经给出一个重要的工程习惯外部写入要有稳定业务 id并且能安全重试。七、跨会话演示先为 Alice 保存偏好再在 thread A 中完成研究context_aResearchContext(user_idalice,research_idcheckpoint-basics)thread_a{configurable:{thread_id:alice-thread-a}}firstgraph.invoke({question:checkpoint 和长期记忆有什么区别},configthread_a,contextcontext_a,)之后 Alice 在一个全新的 thread B 提问context_bResearchContext(user_idalice,research_idmemory-followup)thread_b{configurable:{thread_id:alice-thread-b}}secondgraph.invoke({question:那 Store 应该保存哪些数据},configthread_b,contextcontext_b,)assertsecond[memory_context][preferences][language]中文assertany(item[research_id]checkpoint-basicsforiteminsecond[memory_context][summaries])这里两个thread_id不同所以 checkpoint 不共享但user_id一样所以load_memory读到了同一份长期记忆。把user_id换成 Bob读取结果就是空字典和空摘要列表这才是正确的租户隔离。八、实践边界记忆越多不一定越好长期记忆通常保存的是用户数据因此比普通 state 更需要边界。最小化只保存对后续任务有用的信息本例保存摘要而非全文 docs。显式写入用户偏好应由设置操作或明确同意写入不要从一次回答里偷偷推断永久标签。可删除以用户 namespace 为边界提供清除偏好、清除研究档案的能力。限制容量本例只保留 5 条摘要生产环境还应有 TTL、归档和监控。隔离与授权namespace 必须以可信的用户 id 构造不能直接相信客户端任意传来的 id。InMemoryStore适合教学、调试和单进程 Demo进程重启后数据会消失。真正上线时再替换为持久化 Store读取和写入节点的接口不需要跟着业务代码一起重写。九、跑起来代码在src/v2_2_memory.pypython-msrc.v2_2_memory脚本会验证四件事Alice 的 thread B 能读取 thread A 留下的偏好和摘要同一research_id重试只保留一条摘要Bob 读取不到 Alice 的 Store 数据checkpoint 仍按thread_id隔离Store 则按user_id隔离。十、本篇小结第7篇的 checkpoint 解决的是“这次执行如何暂停和恢复”第8篇的 Store 解决的是“下一次会话还记得什么”。v2.2 在开始时按用户读取偏好和历史摘要在结束时用research_id幂等地保存新的摘要。最关键的区分是thread 管短期执行Store 管长期数据。把这条边界守住记忆才不会变成无限膨胀、难以删除、跨用户泄露的一团 state。有了暂停、恢复和跨会话记忆研究助手的能力已经不只是一口气跑完任务。下一篇我们让它把执行过程以流的形式交给用户什么时候该展示 token什么时候该展示事件什么时候该展示状态更新。

相关新闻

从零部署技术向盲盒应用:全流程指南与API集成实践

从零部署技术向盲盒应用:全流程指南与API集成实践

2026/8/4 2:08:03

这次我们来看一个名为“进来开盲盒!”的项目。从标题来看,这很可能是一个结合了趣味性与技术实现的应用,其核心玩法是模拟线上“开盲盒”的体验。在技术层面,这类项目通常会涉及前端交互、后端逻辑处理、以及可能的数据随机化算法…

ASTM D4169-23E1包装运输测试,astm d4169标准

ASTM D4169-23E1包装运输测试,astm d4169标准

2026/8/4 1:58:03

一、什么是这套 “货物闯关考核标准”ASTM D4169-23E1 是美国材料与试验协会发布的全套运输包装性能检测规范,2023 年发布、2024 年完成文字勘误,是全球出口行业通用的包装模拟测试准则。 简单来说,它就是给物流包装打造一套室内闯关模拟试炼…

2026年8月上海落户指南:TOP5正规机构选型避坑核心策略,零失误通关

2026年8月上海落户指南:TOP5正规机构选型避坑核心策略,零失误通关

2026/8/4 1:58:03

上海落户申报流程繁琐、政策细则动态调整,个人自行办理常出现政策解读偏差、材料反复退回、社税匹配不合规等问题,企业批量办理也易因政策更新不及时增加管理成本。结合 2026 年上海最新落户政策导向,本文从合规资质、政策研判能力、案例储备…

学术会议投稿筛选与录用率提升全攻略

学术会议投稿筛选与录用率提升全攻略

2026/8/4 3:18:06

1. 学术会议投稿全攻略:如何高效筛选高价值会议刚开年就收到实验室师弟的求助:"师兄,导师让我投个会议,但搜出来几十个选项完全不会选..."这场景太熟悉了。作为发过7篇顶会的老油条,我整理了一份2026上半年值…

Oracle定时任务实战:DBMS_JOB与存储过程实现自动化作业

Oracle定时任务实战:DBMS_JOB与存储过程实现自动化作业

2026/8/4 3:18:06

1. 项目概述:为什么我们需要在Oracle里“定闹钟”?在数据库运维和业务开发里,我们经常会遇到一些需要周期性、自动化执行的任务。比如,每天凌晨两点清理临时表里的历史数据,每周一早上八点给业务部门发送一份统计报表&…

新一轮‘家政用工荒’背后:数字化正在把‘经验派’阿姨变成‘数据派’服务者

新一轮‘家政用工荒’背后:数字化正在把‘经验派’阿姨变成‘数据派’服务者

2026/8/4 3:18:06

这段时间跟几个做家政公司的老板聊天,大家普遍反映一个情况:不是接不到单,而是接了单不敢派阿姨。客户的要求越来越具体——要会做辅食的育儿嫂、要懂认知症照护的护工、要能处理皮质沙发的深度保洁。可你翻遍手头的阿姨名单,绝大…

Django花卉商城系统:全栈开发与毕业设计实战

Django花卉商城系统:全栈开发与毕业设计实战

2026/8/4 3:18:06

1. 项目概述:Django花卉商城系统全栈解决方案这个基于Django框架的花卉商城系统,是我带过三届计算机专业毕业设计的经典选题。不同于市面上简单的电商Demo,它完整实现了商品展示、购物车、订单支付、用户管理等电商核心功能模块,特…

U盘文件被病毒隐藏?用attrib命令一键恢复与防护指南

U盘文件被病毒隐藏?用attrib命令一键恢复与防护指南

2026/8/4 3:18:06

1. 问题场景:当你的U盘突然“空了”相信不少朋友都遇到过这种情况:昨天还存得好好的项目文档、照片或者重要资料,今天把U盘插上电脑,打开一看,文件夹空空如也,或者只剩下几个无关紧要的文件。心里咯噔一下&…

2026年AI Agent构建指南:框架选型与工程实践

2026年AI Agent构建指南:框架选型与工程实践

2026/8/4 3:08:06

# 2026年AI Agent构建指南:框架选型与工程实践## 一、背景与挑战:从“能跑”到“能跑在产线”2026年,AI Agent已经从实验室里的玩具,变成了企业级基础设施的核心组件。我最近跟几个团队聊,发现大家最头疼的事就是选型—…

ncmdumpGUI:一键解锁网易云音乐ncm文件的终极解决方案

ncmdumpGUI:一键解锁网易云音乐ncm文件的终极解决方案

2026/8/3 4:49:52

ncmdumpGUI:一键解锁网易云音乐ncm文件的终极解决方案 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换,Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 你是否曾经从网易云音乐下载了心爱的歌曲&am…

分布式配置中心选型实战:Nacos与Consul在创业场景下的对比

分布式配置中心选型实战:Nacos与Consul在创业场景下的对比

2026/8/3 19:24:18

分布式配置中心选型实战:Nacos与Consul在创业场景下的对比工程导读:本文深入讨论 分布式配置中心选型实战:Nacos与Consul在创业场景下的对比 在生产工程实践中的核心落地方案。基于 分布式架构与微服务设计 视角,剖析实际痛点、架…

MoneyPrinterPlus实战指南:AI视频批量生成与自动化发布完整解决方案

MoneyPrinterPlus实战指南:AI视频批量生成与自动化发布完整解决方案

2026/8/3 20:38:37

MoneyPrinterPlus实战指南:AI视频批量生成与自动化发布完整解决方案 【免费下载链接】MoneyPrinterPlus AI一键批量生成各类短视频,自动批量混剪短视频,自动把视频发布到抖音,快手,小红书,视频号上,赚钱从来没有这么容易过! 支持本地语音模型chatTTS,fasterwhisper,…

3步解决Windows DLL缺失问题:VisualCppRedist AIO终极运行库修复方案

3步解决Windows DLL缺失问题:VisualCppRedist AIO终极运行库修复方案

2026/8/4 0:07:58

3步解决Windows DLL缺失问题:VisualCppRedist AIO终极运行库修复方案 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经在打开游戏或软件时遇…

SingleFile终极指南:一键保存完整网页的5大核心功能

SingleFile终极指南:一键保存完整网页的5大核心功能

2026/8/4 0:07:58

SingleFile终极指南:一键保存完整网页的5大核心功能 【免费下载链接】SingleFile Web Extension for saving a faithful copy of a complete web page in a single HTML file 项目地址: https://gitcode.com/gh_mirrors/si/SingleFile 你是否曾经遇到过这样的…

国家中小学智慧教育平台电子课本下载终极方案:三步免费获取PDF教材

国家中小学智慧教育平台电子课本下载终极方案:三步免费获取PDF教材

2026/8/4 0:07:58

国家中小学智慧教育平台电子课本下载终极方案:三步免费获取PDF教材 【免费下载链接】tchMaterial-parser 国家中小学智慧教育平台 电子课本下载工具,帮助您从智慧教育平台中获取电子课本的 PDF 文件网址并进行下载,让您更方便地获取课本内容。…

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/2 17:06:42

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/3 7:25:44

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/3 2:41:27

告别游戏崩溃:XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…