新闻详情

新闻详情

首页 / 资讯中心 / 详情

长期记忆如何让AI真正“记住你”?

发布时间:2026/9/30 11:14:58来源:尧图网络
长期记忆如何让AI真正“记住你”?
一、什么是长期记忆长期记忆Long-term memory能够让智能体agent在不同对话、会话之间存储和调取信息长期记忆基于 LangGraph 的存储模块实现该模块将数据保存为 JSON 文档通过命名空间namespace和键key做数据组织。二、语法使用Tips不管是长期记忆还是短期记忆都有内存和持久化两种方式2.1 InMemoryStore 语法from langchain.agents import create_agent from langchain_core.runnables import Runnable from langgraph.store.memory import InMemoryStore # InMemoryStore 将数据保存在内存字典中。生产环境请使用基于数据库的存储。 store InMemoryStore() agent: Runnable create_agent( claude-sonnet-4-6, tools[], storestore, )2.2 PostgreSQL语法# pip install -U langgraph-checkpoint-postgres psycopg[binary] from langchain.agents import create_agent from langchain_core.runnables import Runnable from langgraph.store.postgres import PostgresStore # type: ignore[import-not-found] DB_URI postgresql://postgres:postgreslocalhost:5432/postgres?sslmodedisable with PostgresStore.from_conn_string(DB_URI) as store: store.setup() agent: Runnable create_agent( claude-sonnet-4-6, tools[], storestore, )三、存储方式LangGraph 将长期记忆以 JSON 文档的形式存储在存储层stores中•namespace key组合定位一条记忆namespace 做分组隔离key 在分组内唯一• 典型命名空间示例[memories, user_123]代表用户 123 的记忆文件夹3.1 InMemoryStore•不传 query只依靠filter做结构化精确匹配不进行向量相似度排序返回顺序由存储实现决定。•传入 query自然语言语义检索会基于向量相似度对结果排序。可以搭配filter先过滤再排序。def embed(texts: Sequence[str]) - list[list[float]]: # 假定返回一个向量 return [[1.0, 2.0] for _ in texts] # InMemoryStore saves data to an in-memory dictionary. Use a DB-backed store in production use. store InMemoryStore(indexIndexConfig(embedembed, dims2)) user_id my-user application_context chitchat namespace (user_id, application_context) store.put( namespace, a-memory, { rules: [ User likes short, direct language, User only speaks English python, ], area: 北美, }, ) store.put( namespace, b-memory, { rules: [ 我喜欢国语, 我只会说一顶点点英文, ], area: 炎黄子孙, }, ) # 通过ID获取存储数据 item store.get(namespace, a-memory) rprint(item) # 在该命名空间内搜索记忆条目按内容等值条件过滤并以向量相似度排序返回结果 items store.search( namespace, filter{area: 炎黄子孙}, query国语 ) rprint(items)3.2 PostgreSQLDB_URI postgresql://postgres:postgreslocalhost:5432/postgres?sslmodedisable with PostgresStore.from_conn_string(DB_URI) as store: store.setup()其中setup() 函数会创建所需要的表store,store_migrations,vector_migrations•store存业务 / 记忆 KV 数据•store_migrations跟踪 store 表结构版本•vector_migrations跟踪向量索引 / 向量表的版本需要 pgvector3.2.1store【核心业务数据主表】作用保存普通键值数据非向量对应store.put()/store.get()读写的内容Agent 记忆、用户配置、会话元数据等。关键字段•prefix命名空间类似文件夹用来分组数据比如(users,123)•key记录的键•valueJSONB 存储的值•created_at/updated_at创建更新时间•expires_atTTL 过期时间可选自动清理简单理解LangGraph 内置 KV 存储Agent 的长期记忆就存在这张表里。3.2.2store_migrations【KV 表的迁移版本记录表框架内部】作用记录store表的 schema 迁移版本属于框架内部管理表业务代码不要手动读写。逻辑• 每次调用setup()会先读这张表判断当前数据库的表结构版本• 如果版本低自动执行对应的 ALTER/CREATE 迁移 SQL版本一致就跳过幂等重复调用 setup 不会重复建表• 保证不同版本 LangGraph 升级时自动更新store表结构不会破坏已有数据3.2.3vector_migrations【向量索引迁移版本记录表框架内部】作用管理向量索引的迁移版本依赖 pgvector 扩展。• 只有开启index_config启用向量检索才会用到这套逻辑• 记录向量相关表、索引hnsw/ivfflat 向量索引的迁移版本•setup()会检查这个表自动创建 / 升级向量表、向量索引四、在工具中读写Store4.1 在工具tools中读取长期记忆通过ToolRuntime获取store信息Tips从源码中可以看到ToolRuntime不仅可以获取store还能获取state和context上下文ToolRuntime定义如下案例代码dataclass class Context: user_id: str with PostgresStore.from_conn_string(DB_URI) as store: store.setup() store.put((users,), user_123, {name: John Smith, language: English}) tool def get_user_info(runtime: ToolRuntime[Context]) - str: Look up user info. assert runtime.store is not None # 根据用户id获取用户信息 user_info runtime.store.get((users,), runtime.context.user_id) return str(user_info.value) if user_info else Unknown user agent create_agent( model model, tools [get_user_info], store store, context_schema Context, ) result agent.invoke( {messages: [{role: user, content: 查看用户信息}]}, context Context(user_id user_123), ) for m in result[messages]: m.pretty_print()4.2 在工具tools中写长期记忆使用put保存信息tool def save_user_info(user_info: UserInfo, runtime: ToolRuntime[Context]) - str: 保存用户信息. assert runtime.store is not None runtime.store.put((users,), runtime.context.user_id, dict(user_info)) return 成功保存用户信息. with PostgresStore.from_conn_string(DB_URI) as store: store.setup() agent: Runnable create_agent( modelmodel, tools[save_user_info], storestore, context_schemaContext ) result agent.invoke( {messages: [{role: user, content: My name is John Smith}]}, contextContext(user_iduser_123), ) for m in result[messages]: m.pretty_print()4.3 从数据库中store表中可以看到存储的结果五、小总结•长短期区别短期记忆管“眼前这摊事”单线程长期记忆管“下次还认得你”跨线程。•存储核心基于 LangGraph Store 实现数据以JSON 文档形式保存通过namespace key定位。•两种姿势开发用InMemoryStore内存字典生产用PostgresStore需pgvector支持向量检索。•读写入口在工具内部通过ToolRuntime拿到store实例用get读取、put写入实现 Agent 的“经验沉淀”。没有长期记忆的 Agent 只是个金鱼脑有了 Store它才算真正有了“积累”。如果觉得有用别忘了点赞、在看、转发三连支持
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

SVM与SVR的本质区别:损失函数、支持向量与调参实战 2026/9/30 12:00:49

SVM与SVR的本质区别:损失函数、支持向量与调参实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
SRC 挖洞:Apache Tomcat 加密拦截器绕过深度复盘,CVE-2026-34486 fail-open 一行代码怎么打穿集群通信 2026/9/30 12:00:49

SRC 挖洞:Apache Tomcat 加密拦截器绕过深度复盘,CVE-2026-34486 fail-open 一行代码怎么打穿集群通信

作者 akihi(白帽攻防录讲师),某甲方网络安全工程师,合合 SRC 年度第一、腾讯 SRC 连续三年前十,单漏洞赏金 4w,擅长 Web/App/PC 客户端漏洞挖掘。专注中间件安全、反序列化漏洞、代码审计。本文基于公开 CV…

阅读更多 →
架构演进路径:从单机分库到微服务容器编排实战指南 2026/9/30 12:00:42

架构演进路径:从单机分库到微服务容器编排实战指南

读写分离、垂直分库、微服务、容器编排——这些词单独拿出来都能讲半小时,但真正让人头疼的是把它们串成一条演进路径时,每一步该怎么做、为什么要这么做。我经历过一个项目从单机部署一路走到容器编排的完整过程,途中踩了不少坑,…

阅读更多 →
TyHGB复合指标:基于CHARLS的胰岛素抵抗新标志物构建与验证 2026/9/30 12:00:42

TyHGB复合指标:基于CHARLS的胰岛素抵抗新标志物构建与验证

最近在CHARLS数据里折腾胰岛素抵抗相关指标的时候,我顺手去医院统计了一下PubMed上TyG类复合指标的发文量。坦白说,TyG-BMI、TyG-WC、TyG-WHtR这类组合已经被很多人做过了,CHARLS数据库上的相关论文一年比一年多,肉眼可见地卷起来…

阅读更多 →
Vue3 从入门到熟练:响应式、组件通信与工程化避坑指南 2026/9/30 12:00:42

Vue3 从入门到熟练:响应式、组件通信与工程化避坑指南

三年前我第一次把线上项目从 Vue2 迁到 Vue3, setup 里满屏的 ref 和 .value 让我一度怀疑这是不是同一个框架。后来陆续带过几个刚入行的同学,发现大家卡住的位置出奇地一致:不是语法写不出来,而是脑子里还留着 Vue2 那套 …

阅读更多 →
部门考核待处理模块全解析:流程逻辑、操作场景与清待技巧 2026/9/30 12:00:42

部门考核待处理模块全解析:流程逻辑、操作场景与清待技巧

部门考核页面上挂了几十条待办,点进去不知道先处理哪条;考核周期结束了,系统里还有一堆“待处理”没人管;明明已经评分了,流程却卡在“待处理”里不动。如果你也在被这些问题折腾,那这篇内容就是写给你的。…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉