[langchain context store]

LangChain Agent 状态管理:Store 与 Context 详解

1. Store 状态管理

从代码实现逻辑来看,store 并非全局状态变量,而是注入到 Agent 中的共享状态实例,核心特性如下:

核心代码示例

# 创建独立的 store 实例
store = InMemoryStore()  

# 将 store 注入到 agent 中,作为共享状态
agent = create_agent(
    model,
    tools=[get_user_info, save_user_info],
    store=store  # 关键:同一个 store 实例绑定到 agent
)

关键特性

  • 共享性:同一个 store 实例被传递给 Agent,工具函数中可通过 runtime.store 访问(如 runtime.store.get(...)/runtime.store.put(...));
  • 持久性:跨多次 invoke 调用持久化数据(第一次 invoke 保存数据,第二次 invoke 可读取);
  • 隔离性:不同 store 实例创建的 Agent 之间,数据完全隔离,互不干扰。

2. Context vs Store 核心区别

Context 是单次调用时传递的临时数据(类似普通数据对象 POJO),而 Store 是 Agent 跨调用的持久化存储,二者核心差异如下表:

概念 作用域 生命周期 典型示例
Context 单次 invoke 临时存在,调用结束即销毁 messages、user_id 入参
Store 跨调用共享 持久存在,直到 store 实例销毁 用户信息、对话历史记录

代码示例对比

Context:单次调用的临时参数包

# Context 仅在本次 invoke 中有效,调用结束后销毁
agent.invoke({
    "messages": [{"role": "user", "content": "查询我的用户信息"}],  # Context 数据
    "user_id": "123456"  # 额外的 Context 参数
})

Store:跨调用的长期记忆

# 写入 Store:数据持久化,后续调用可读取
store.put(("users",), user_id, {"name": "张三", "age": 28})

# 读取 Store:跨 invoke 调用仍能获取数据
user_info = store.get(("users",), user_id)

核心总结

  • Context:本质是「调用时的参数包」,承载单次请求的临时数据,生命周期随调用结束而终止;
  • Store:本质是「Agent 的长期记忆」,承载跨请求的持久化数据,生命周期与 Store 实例绑定。
posted @ 2026-01-18 22:33  十三山入秋  阅读(0)  评论(0)    收藏  举报