LangGraph 记忆管理详解:短期记忆、长期记忆与 Runtime Context

前面我们已经学习了 Checkpoint、失败恢复和 Time Travel。

接下来进入 Agent 开发里更常见的另一个概念:

Memory。

在 LangGraph 中,可以把相关能力分成三类:

text 复制代码
短期记忆
长期记忆
Runtime Context

它们看起来都像是在"保存信息",但作用范围完全不同。

1. 三种信息到底怎么区分?

类型 保存位置 作用范围 是否持久化
短期记忆 State + Checkpointer 同一个 thread_id 是
长期记忆 Store 跨会话 是
Runtime Context runtime.context 当前一次调用 否
text 复制代码
短期记忆
当前会话记住了什么

长期记忆
这个用户长期有什么信息

Runtime Context
这一次调用临时需要什么

例如:

text 复制代码
聊天历史
当前会话中已经查询过的用户偏好
↓
短期记忆

用户长期偏好
用户画像
跨会话保存的数据
↓
长期记忆

当前登录用户
会员等级
Trace ID
本次功能开关
↓
Runtime Context

2. 短期记忆:State + Checkpointer

短期记忆其实我们前面一直都在使用。

只要:

python 复制代码
graph = builder.compile(
    checkpointer=checkpointer
)

并且多次调用复用同一个:

python 复制代码
thread_id

State 就可以在这个会话中继续保留。

所以短期记忆的核心不是单独存在一个 Memory 对象,而是:

text 复制代码
State
+
Checkpointer
+
thread_id

它更适合保存:

text 复制代码
聊天消息
当前任务状态
本轮 Agent 已得到的结果
会话过程中缓存的用户信息

3. 长期记忆:Store 实现跨会话共享

短期记忆主要围绕 thread_id 工作,但有些信息不应该随着会话变化而丢失,例如:

text 复制代码
Alice 喜欢跑步
Alice 喜欢某种酸奶
Alice 正在学习计算机组成原理

这些数据更适合放入:

text 复制代码
Store

LangGraph 的长期记忆通常采用:

text 复制代码
namespace + key + value

组织数据。

例如:

python 复制代码
namespace = (
    "users",
    "Alice"
)

key = "preferences"

value = {
    "course": "计算机组成原理",
    "sports": "跑步",
    "food": "奶皮子酸奶"
}

写入:

python 复制代码
store.put(
    namespace,
    key,
    value
)

读取:

python 复制代码
item = store.get(
    namespace,
    key
)

长期记忆存储器会在编译图时传入:

python 复制代码
graph = builder.compile(
    checkpointer=checkpointer,
    store=store
)

节点中则可以通过:

python 复制代码
runtime.store

访问。

一个很常见的流程是:

text 复制代码
第一次调用
State 中没有 preferences
        ↓
从 Store 查询长期记忆
        ↓
写入 State
        ↓
后续节点直接读取

第二次调用
复用同一个 thread_id
        ↓
preferences 已存在于 State
        ↓
不必再次查询 Store

这正好体现了:

text 复制代码
Store
负责长期保存

State
负责当前会话使用

如果使用 PostgresStore,长期记忆可以保存到 PostgreSQL;如果要支持语义模糊检索,还需要为 Store 配置索引和 embedding。

4. Runtime Context:只对当前调用有效

还有一些信息既不适合放进长期记忆,也没必要保存进 Checkpoint,例如:

text 复制代码
当前登录用户名
会员等级
请求来源
Trace ID
模型配置
数据库连接
本次功能开关

这些信息只服务于当前一次调用,可以使用:

text 复制代码
Runtime Context

例如定义:

python 复制代码
@dataclass
class UserContext:
    username: str
    membership_level: str

构建图:

python 复制代码
builder = StateGraph(
    state_schema=OverallState,
    context_schema=UserContext
)

调用时传入:

python 复制代码
graph.invoke(
    {
        "user_input": "你好"
    },
    context=UserContext(
        username="Alice",
        membership_level="VIP"
    )
)

节点中通过:

python 复制代码
runtime.context

访问。

需要注意:

Runtime Context 不会被持久化。

即使下一次调用继续使用相同 thread_id,也不会自动继承上一次的 Context。

所以可以简单区分:

text 复制代码
跨调用共享、需要保存
↓
State / Store

只在当前调用生效
↓
Runtime Context
相关推荐
默_笙5 天前
🍙 给每个请求过安检:FastAPI 是怎么把校验写进类型注解的
python
qq_426003965 天前
启动playwright录制codegen生成自动化测试脚本
python·自动化
虎头金猫5 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
长沙三为智能科技5 天前
家政小程序开发从0到上线:五阶段交付流程与验收清单
python
伞伞悦读5 天前
【第38期】Python 模块与包详解:import、from、模块搜索路径、包结构和 __init__
开发语言·python
只睡四小时5 天前
Canvas 弹道联机实战:700 行 + 固定时间步长
python·websocket·html5·游戏开发·canvas
染指11105 天前
122.Agent-LangChain核心组件-中间件-动态提示词(dynamic_promapt)
人工智能·langchain·agent·agents
奇思妙想聪明勤奋的小羊5 天前
DeepAgents第5章:子Agent 与上下文隔离—让 Agent学会委派
人工智能·python·学习·语言模型
lpfasd1235 天前
2026年第38周GitHub趋势周报
python·科技·github
IZero075 天前
Jev 与 Laya
python·语言模型