langgraph中的短时记忆实现
2026/8/4 17:45:44 网站建设 项目流程

1. checkpointer

编译时指定checkpointer参数 可以实现储存在内存中的短记忆

2. memorysaver

指定checkpointer=memorysaver()

可以实现一般的记忆 适合本地调试使用 功能较差 原理是把对话内容记住 invoke时并入state

ps:图输入时需要指定线程id 分id实现记忆

config = {"configurable": {"thread_id": "2"}} for chunk in graph_with_memory.stream({"messages": ["请问我叫什么?"]}, config, stream_mode="debug"): if chunk["type"] == "checkpoint": # print(chunk) print(f"Thread id:{chunk['payload']['config']['configurable']['thread_id']}") print(f"CheckPoint id :{chunk['payload']['config']['configurable']['checkpoint_id']}") for message in chunk['payload']['values']['messages']: print(f"Message id:{message.id},Message content:{message.content}")

3. sqlitesaver

SqliteSaver.from_conn_string(":memory:") 这个意思是创建一个上下文管理器 会自动把记忆写入数据库 位置是memory即内存 是用string传入的

这个东西需要一个关闭操作,实践上会用两种方式自动关闭 完成善后工作:with语句和exitstack

3.1. 用with的sqlitesaver

from langgraph.checkpoint.sqlite import SqliteSaver from langgraph.prebuilt import create_react_agent with SqliteSaver.from_conn_string(":memory:") as checkpointer: graph = create_react_agent(llm, tools=tools, checkpointer=checkpointer) display(Image(graph.get_graph().draw_mermaid_png())) config = {"configurable": {"thread_id": "11"}} for chunk in graph.stream({"messages": ["你好,我叫西瓜老师"]}, config, stream_mode="values"): chunk["messages"][-1].pretty_print() for chunk in graph.stream({"messages": ["请问我叫什么?"]}, config, stream_mode="values"): chunk["messages"][-1].pretty_print()

使用with完成自动开启和关闭数据库

这样的缺点在于只在一个缩进块保持记忆 后续就自动关闭了

3.2. 用exitstack

创建一个exitstack=SqliteSaver.from_conn_string(":memory:") 相当于压栈了exit操作

当所有事情完成 完成exitstack.close() 就会执行exit操作

此时不需要局限在同个缩进块了

stack = ExitStack() checkpointer = stack.enter_context(SqliteSaver.from_conn_string(":memory:")) graph = create_agent(llm, tools=tools, checkpointer=checkpointer) config = {"configurable": {"thread_id": "11"}} for chunk in graph.stream({"messages": ["我叫1"]}, config, stream_mode="values"): chunk["messages"][-1].pretty_print() for chunk in graph.stream({"messages": ["请问我叫什么?"]}, config, stream_mode="values"): chunk["messages"][-1].pretty_print() stack.close()

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询