LangGraph 入门实战(7)

LangGraph 记忆功能:使用 MemorySaver 保存对话

LangGraph 的节点默认只处理当前输入。要让工作流记住之前的对话,可以在编译时加入 checkpointer,并在每次调用时传入同一个 thread_id。

1. 安装与配置

bash 复制代码
python -m pip install -U langgraph langchain-deepseek
export DEEPSEEK_API_KEY="你的 DeepSeek API Key"

2. 完整示例

python 复制代码
import os

from langchain_core.messages import HumanMessage
from langchain_core.runnables.config import RunnableConfig
from langchain_deepseek import ChatDeepSeek
from langgraph.checkpoint.memory import MemorySaver
from langgraph.graph import START, MessagesState, StateGraph
from pydantic import SecretStr

# 大模型实例
deepseek = ChatDeepSeek(
    model="deepseek-v4-flash",
    temperature=0,
    base_url="https://api.deepseek.com",
    api_key=SecretStr(os.environ["DEEPSEEK_API_KEY"]),
)

# 定义节点
def call_model(state: MessagesState):
    return {"messages": deepseek.invoke(state["messages"])}


builder = StateGraph(MessagesState)
builder.add_node("call_model", call_model)
builder.add_edge(START, "call_model")

# MemorySaver 将检查点保存在内存中,适合学习和测试。
graph = builder.compile(checkpointer=MemorySaver())

# 使用记忆功能时,该配置不可缺少
run_config = RunnableConfig(configurable={"thread_id": "1"})

for chunk in graph.stream(
    {"messages": [HumanMessage(content="你好?我是北斗星")]},
    config=run_config,
    stream_mode="values",
):
    chunk["messages"][-1].pretty_print()

for chunk in graph.stream(
    {"messages": [HumanMessage(content="你还记得我叫什么吗?")]},
    config=run_config,
    stream_mode="values",
):
    chunk["messages"][-1].pretty_print()

关键点是 run_config。第一次调用保存消息,第二次调用使用相同的 thread_id,LangGraph 就能恢复这条会话的历史消息。换成其他 thread_id 会创建一条新的会话。

3. 运行输出

模型输出会因版本和提示词略有不同,典型结果如下:

text 复制代码
================================ Human Message =================================
你好?我是北斗星
================================== Ai Message ==================================
你好,北斗星!很高兴认识你。
================================ Human Message =================================
你还记得我叫什么吗?
================================== Ai Message ==================================
当然记得,你叫北斗星。

4. 持久化提示

MemorySaver 只在当前进程内保存数据,程序重启后记忆会消失。生产环境可将 checkpointer 换成 SQLite 或 PostgreSQL 实现,并继续使用稳定的 thread_id 管理用户会话。

相关推荐
码哥字节2 分钟前
Spring Boot 4.1 默认开虚拟线程,连接池为什么反而打满了?
spring boot·后端
大白8018 分钟前
CSS 盒模型精讲:标准盒模型与 IE 怪异盒模型区别
后端
深蓝AI19 分钟前
Python 写 JSON 写到一半崩了?用 os.replace 保住上一版配置(附故障注入)
后端
十年Java程序媛21 分钟前
String / StringBuilder / StringBuffer|别再乱用字符串拼接,底层原理一次讲透
java·spring boot·后端
大勇前进28 分钟前
CSS 选择器优先级详解,一次搞懂权重计算规则
后端
姜鱼问生40 分钟前
fail2ban 实战:从默认配置到生产可用
后端·算法·架构
憧憬成为java架构高手的小白40 分钟前
langchain4j手敲理解
java·langchain
JavaGuide2 小时前
DeepSeek Harness 重磅更新,Codex、Claude Code 子智能体进官方插件列表了,还有 Git 工作树和思考翻译!
前端·后端
M--Y2 小时前
LangChain 提示工程:少样本提示与输出解析器
python·langchain·大模型·llm·输出解析器·少样本提示
Rain的Java大神之路2 小时前
[特殊字符]8年Java老兵转型AI Agent:90%的人挂在同一个坑,根本不用学Python!(万字实战复盘,建议收藏)
java·数据库·人工智能·后端·python·spring·ai编程