Agent短期记忆的几种持久化存储方式

今天给大家讲一下关于Agent长期对话的几种持久化存储方式,之前的文章给大家说过短期记忆和长期记忆,短期记忆基于InMemorySaver做checkpointer(检查点),短期记忆 (线程级持久性) 使代理能够跟踪多轮次对话,保存了图的执行状态,可以做回滚。而长期记忆基于BaseStore做checkpointer,InMemoryStore是 BaseStore 的具体实现,可以存取相应的应用数据,使用长期内存 (跨线程持久性) 跨对话存储特定于用户或特定于应用程序的数据。但是在生产环境中,我们必须要采用持久化的版本来保证我们的Agent重启时数据丢失。 下面我们重点讲一下短期记忆的持久化方式:

一. PostgresSaver检查点

首先引入需要的库

bash 复制代码
pip install -U "psycopg[binary,pool]" langgraph langgraph-checkpoint-postgres langchain-openai langchain

设置大模型的key,这里根据具体的大模型设置

python 复制代码
import os

from langchain.chat_models import init_chat_model

os.environ["OPENAI_API_KEY"] = "sk-xxxxxxx"

os.environ["OPENAI_API_BASE"] = "https://openkey.cloud/v1"

from langchain.chat_models import init_chat_model

from langgraph.graph import StateGraph, MessagesState, START

from langgraph.checkpoint.postgres import PostgresSaver

初始化我们的大模型

python 复制代码
model = init_chat_model(model="anthropic:claude-3-5-haiku-latest")

然背后开始我们的postgressql的初始化,设置好你postgres的地址,端口和密码。

python 复制代码
DB_URI = "postgresql://postgres:postgres@localhost:5442/postgres?sslmode=disable"

with PostgresSaver.from_conn_string(DB_URI) as checkpointer:

    # checkpointer.setup()

    def call_model(state: MessagesState):

        response = model.invoke(state["messages"])

        return {"messages": response}

    builder = StateGraph(MessagesState)

    builder.add_node(call_model)

    builder.add_edge(START, "call_model")

    graph = builder.compile(checkpointer=checkpointer)

    config = {

        "configurable": {

            "thread_id": "1"

        }

    }

    for chunk in graph.stream(

        {"messages": [{"role": "user", "content": "hi! I'm bob"}]},

        config,

        stream_mode="values"

    ):

        chunk["messages"][-1].pretty_print()

    for chunk in graph.stream(

        {"messages": [{"role": "user", "content": "what's my name?"}]},

        config,

        stream_mode="values"

    ):

        chunk["messages"][-1].pretty_print()

这里需要注意的是,如果首次初始化postgres的checkpointer的话,需要调用checkpointer.setup(),因为需要初始化表。我们可以打开你的postgresSql数据库 可以看到总共初始化checkpointer有这几张表。 然后我们看看这张表里面的内容 执行上面Agent,得到下面输出:

二. PostgresSaver检查点

使用mongodb需要注意引入下面库

bash 复制代码
pip install langgraph.checkpoint.mongodb

from langgraph.checkpoint.mongodb import MongoDBSaver

使用mongodb检查点:

python 复制代码
DB_URI = "localhost:27017"

with MongoDBSaver.from_conn_string(DB_URI) as checkpointer:

    def call_model(state: MessagesState):

        response = model.invoke(state["messages"])

        return {"messages": response}

    builder = StateGraph(MessagesState)

    builder.add_node(call_model)

    builder.add_edge(START, "call_model")

    graph = builder.compile(checkpointer=checkpointer)

    config = {

        "configurable": {

            "thread_id": "1"

        }

    }

    for chunk in graph.stream(

        {"messages": [{"role": "user", "content": "hi! I'm bob"}]},

        config,

        stream_mode="values"

    ):

        chunk["messages"][-1].pretty_print()

    for chunk in graph.stream(

        {"messages": [{"role": "user", "content": "what's my name?"}]},

        config,

        stream_mode="values"

    ):

        chunk["messages"][-1].pretty_print()

得到下面结果: 我们打开吗,mongodb数据库会看到这几张表: 存储的结构阶段如下:

三. Redis检查点

这里需要引入下面库

python 复制代码
langgraph.checkpoint.redis
from langgraph.checkpoint.redis import RedisSaver

然后开始使用Redis检查点:

python 复制代码
DB_URI = "redis://localhost:6379"

with RedisSaver.from_conn_string(DB_URI) as checkpointer:

    # checkpointer.setup()

    def call_model(state: MessagesState):

        response = model.invoke(state["messages"])

        return {"messages": response}

    builder = StateGraph(MessagesState)

    builder.add_node(call_model)

    builder.add_edge(START, "call_model")

    graph = builder.compile(checkpointer=checkpointer)

    config = {

        "configurable": {

            "thread_id": "1"

        }

    }

    for chunk in graph.stream(

        {"messages": [{"role": "user", "content": "hi! I'm bob"}]},

        config,

        stream_mode="values"

    ):

        chunk["messages"][-1].pretty_print()

    for chunk in graph.stream(

        {"messages": [{"role": "user", "content": "what's my name?"}]},

        config,

        stream_mode="values"

    ):

        chunk["messages"][-1].pretty_print()

得到如下结果 这三种方式就是我们常用的短期记忆持久化方式,感兴趣的同学可以跟着里面的字段来学习它的底层是怎么存储的,在我们写Agent的时候,一个持久化方案在我们多Agent交互的时候往往有很高的效率。 下面一章我们接着说长期记忆的持久化方式。

相关推荐
lucky_lyovo34 分钟前
自然语言处理NLP---预训练模型与 BERT
人工智能·自然语言处理·bert
fantasy_arch39 分钟前
pytorch例子计算两张图相似度
人工智能·pytorch·python
AndrewHZ2 小时前
【3D重建技术】如何基于遥感图像和DEM等数据进行城市级高精度三维重建?
图像处理·人工智能·深度学习·3d·dem·遥感图像·3d重建
飞哥数智坊2 小时前
Coze实战第18讲:Coze+计划任务,我终于实现了企微资讯简报的定时推送
人工智能·coze·trae
WBluuue2 小时前
数学建模:智能优化算法
python·机器学习·数学建模·爬山算法·启发式算法·聚类·模拟退火算法
Code_流苏3 小时前
AI热点周报(8.10~8.16):AI界“冰火两重天“,GPT-5陷入热议,DeepSeek R2模型训练受阻?
人工智能·gpt·gpt5·deepseek r2·ai热点·本周周报
赴3353 小时前
矿物分类案列 (一)六种方法对数据的填充
人工智能·python·机器学习·分类·数据挖掘·sklearn·矿物分类
大模型真好玩3 小时前
一文深度解析OpenAI近期发布系列大模型:意欲一统大模型江湖?
人工智能·python·mcp
双翌视觉3 小时前
工业视觉检测中的常见的四种打光方式
人工智能·计算机视觉·视觉检测
RPA+AI十二工作室3 小时前
亚马逊店铺绩效巡检_影刀RPA源码解读
chrome·python·rpa·影刀