LangGraph Agent 的持久化记忆能力主要通过 检查点(Checkpoints) 和 Store 抽象 实现,两者分别针对 短期记忆 和 长期记忆,并支持多种存储后端。以下是具体的实现方式、对比以及 Store 抽象支持的数据库:
一、持久化记忆的实现方式及对比
1. 检查点(Checkpoints):短期记忆的持久化
实现方式:
- 检查点机制:通过
checkpointer
参数将图的状态(Graph State)持久化到指定存储中。每次执行图时会自动保存状态,后续可通过thread_id
恢复上下文。 - 支持的存储后端:
- InMemorySaver:内存存储(临时,程序终止后数据丢失)。
- SqliteSaver:SQLite 数据库(轻量级,适合本地持久化)。
- PostgresSaver:PostgreSQL 数据库(适合高可靠性场景)。
- 自定义存储:开发者可实现
Checkpoint
接口集成外部存储(如 Redis、云数据库)。
特点对比:
特性 | InMemorySaver | SqliteSaver | PostgresSaver |
---|---|---|---|
持久性 | ❌(程序终止后丢失) | ✅(本地文件持久化) | ✅(分布式数据库) |
性能 | ⭐⭐⭐⭐(内存快) | ⭐⭐⭐(本地 I/O) | ⭐⭐(网络延迟) |
适用场景 | 快速测试、调试 | 单机应用、轻量级持久化 | 高并发、分布式系统 |
代码示例:
from langgraph.checkpoint.memory import InMemorySaver
from langgraph.checkpoint.sqlite import SqliteSaver
from langgraph.checkpoint.postgres import PostgresSaver
agent = create_react_agent(model=llm, tools=tools, checkpointer=InMemorySaver()) # 内存存储
agent = create_react_agent(model=llm, tools=tools, checkpointer=SqliteSaver(database="memory.db")) # SQLite
agent = create_react_agent(model=llm, tools=tools, checkpointer=PostgresSaver(connection_string="postgres://...")) # PostgreSQL
2. Store 抽象:长期记忆的持久化
实现方式:
- Store 接口:通过
langgraph.store.base.BaseStore
抽象基类实现,支持键值存储、命名空间管理、向量相似性搜索等功能。 - 支持的数据库:
- Redis:键值存储,适合快速读写。
- FAISS/Chroma:向量数据库,支持语义检索。
- 自定义存储:开发者可通过继承
BaseStore
实现自定义存储(如 MySQL、MongoDB)。
特点对比:
特性 | Redis | FAISS/Chroma | 自定义存储 |
---|---|---|---|
数据类型 | 键值对、JSON | 向量数据 | 自定义结构 |
查询能力 | 精确匹配 | 语义相似性搜索 | 自定义查询逻辑 |
适用场景 | 用户画像、配置存储 | 知识库问答、推荐系统 | 企业级定制需求 |
代码示例(结合 Redis):
from langgraph.store.base import Store
store = Store(redis_url="redis://localhost:6379/0")
# 存储长期记忆
store.put("user_123/profile", {"preferences": {"language": "en", "theme": "dark"}})
# 检索长期记忆
user_profile = store.get("user_123/profile")
二、Store 抽象支持的数据库详解
LangGraph 的 Store
抽象通过 BaseStore
类提供统一接口,开发者可通过以下方式扩展支持的数据库:
1. Redis
- 特点:
- 高性能键值存储,支持字符串、哈希等数据结构。
- 适合存储结构化数据(如用户偏好、配置)。
- 集成方式:
from langgraph.store.redis import RedisStore store = RedisStore(redis_url="redis://localhost:6379/0")
2. FAISS/Chroma
- 特点:
- 向量数据库,支持语义相似性搜索。
- 适合知识库问答、推荐系统等需要语义匹配的场景。
- 集成方式:
from langgraph.store.chroma import ChromaStore store = ChromaStore(collection_name="chat_memory", persist_directory="./chroma_db")
3. 自定义存储
- 特点:
- 通过继承
BaseStore
实现自定义逻辑。 - 可适配任意数据库(如 MySQL、MongoDB)。
- 通过继承
示例代码:
from langgraph.store.base import BaseStore class MyCustomStore(BaseStore): def put(self, namespace, key, value): # 自定义存储逻辑(如写入 MySQL) pass def get(self, namespace, key): # 自定义查询逻辑 pass
三、实现方式对比总结
维度 | 检查点(短期记忆) | Store(长期记忆) |
---|---|---|
目标 | 多轮对话上下文管理 | 跨会话的长期数据存储 |
存储内容 | 图状态(如对话历史) | 用户偏好、历史决策、知识库 |
存储后端 | 内存、SQLite、PostgreSQL | Redis、FAISS、Chroma、自定义 |
持久性 | 可选(内存为临时) | 强持久化(依赖后端) |
开发复杂度 | 低(内置接口) | 中(需适配存储后端) |
典型场景 | 任务流执行、客服对话 | 个性化推荐、用户画像管理 |
四、如何选择?
- 短期记忆(多轮对话):
- 调试阶段:使用
InMemorySaver
(快速启动)。 - 生产环境:使用
SqliteSaver
(单机应用)或PostgresSaver
(分布式系统)。
- 调试阶段:使用
- 长期记忆(跨会话数据):
- 结构化数据:使用 Redis 或自定义数据库。
- 语义搜索需求:使用 FAISS/Chroma。
- 企业级定制:通过
Store
接口扩展自定义存储。
五、扩展:与 Mem0 等工具的集成
LangGraph 可结合 Mem0 等工具增强记忆能力:
- Mem0 特点:
- 自动提取对话中的关键信息并生成摘要。
- 支持 LLM 驱动的记忆更新和淘汰策略。
- 集成向量数据库(如 Chroma)实现智能检索。
代码示例(Mem0 + LangGraph):
from mem0 import Memory
mem0 = Memory.from_config({
"llm": {"model": "gpt-4o-mini"},
"vector_store": {"provider": "chroma", "collection_name": "chat_memory"}
})
# 添加长期记忆
mem0.add("user_123", "I prefer Italian cuisine for dinner.")
# 检索相关记忆
retrieved_memories = mem0.get("user_123", query="What are your dining preferences?")
总结
LangGraph 的持久化记忆能力通过 检查点机制(短期)和 Store 抽象(长期)实现,开发者可根据场景选择合适的存储后端。短期记忆适合多轮对话的上下文管理,长期记忆则用于跨会话的个性化数据存储。结合 Mem0 等工具,可进一步增强记忆的智能性和动态更新能力。