签到成功

知道了

CNDBA社区CNDBA社区

LangGraph Agent 记忆能力 说明

2025-09-12 08:41 344 0 转载 大模型
作者: dave

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 抽象:长期记忆的持久化

实现方式

http://www.cndba.cn/dave/article/131718
http://www.cndba.cn/dave/article/131718

  • Store 接口:通过 langgraph.store.base.BaseStore 抽象基类实现,支持键值存储、命名空间管理、向量相似性搜索等功能。
  • 支持的数据库
    • Redis:键值存储,适合快速读写。
    • FAISS/Chroma:向量数据库,支持语义检索。
    • 自定义存储:开发者可通过继承 BaseStore 实现自定义存储(如 MySQL、MongoDB)。

特点对比http://www.cndba.cn/dave/article/131718

特性 Redis FAISS/Chroma 自定义存储
数据类型 键值对、JSON 向量数据 自定义结构
查询能力 精确匹配 语义相似性搜索 自定义查询逻辑
适用场景 用户画像、配置存储 知识库问答、推荐系统 企业级定制需求

代码示例(结合 Redis):

http://www.cndba.cn/dave/article/131718

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 等工具增强记忆能力:http://www.cndba.cn/dave/article/131718

http://www.cndba.cn/dave/article/131718
http://www.cndba.cn/dave/article/131718

  • Mem0 特点
    • 自动提取对话中的关键信息并生成摘要。
    • 支持 LLM 驱动的记忆更新和淘汰策略。
    • 集成向量数据库(如 Chroma)实现智能检索。

代码示例(Mem0 + LangGraph):http://www.cndba.cn/dave/article/131718http://www.cndba.cn/dave/article/131718

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 等工具,可进一步增强记忆的智能性和动态更新能力。

http://www.cndba.cn/dave/article/131718

用户评论
* 以下用户言论只代表其个人观点,不代表CNDBA社区的观点或立场
dave

dave

关注

人的一生应该是这样度过的:当他回首往事的时候,他不会因为虚度年华而悔恨,也不会因为碌碌无为而羞耻;这样,在临死的时候,他就能够说:“我的整个生命和全部精力,都已经献给世界上最壮丽的事业....."

  • 2297
    原创
  • 3
    翻译
  • 605
    转载
  • 198
    评论
  • 访问:9109589次
  • 积分:4503
  • 等级:核心会员
  • 排名:第1名
精华文章
    最新问题
    查看更多+
    热门文章
      热门用户
      推荐用户
        Copyright © 2016 All Rights Reserved. Powered by CNDBA · 皖ICP备2022006297号-1·

        QQ交流群

        注册联系QQ