Skip to main content

LangChain的记忆API

LangChain的记忆API主要分为两大类:短期记忆长期记忆。这两类记忆在作用范围、实现机制和API上有所不同。

🧠 短期记忆 (Short-term Memory)

短期记忆用于在单次会话或线程(Thread) 中保持上下文连贯性。它的核心是检查点(Checkpointer) 机制,通过保存和恢复智能体的状态(State)来实现。

  • 核心API:主要通过 MemorySaver 或其生产环境版本(如 PostgresSaver, MongoDBSaver)来实现。
  • 使用示例
    from langgraph.checkpoint.memory import MemorySaver
    from langgraph.graph import StateGraph

    # 初始化内存检查点
    memory = MemorySaver()
    builder = StateGraph(State)
    # ... 构建图 ...
    graph = builder.compile(checkpointer=memory)

    # 通过 thread_id 区分不同会话
    config = {"configurable": {"thread_id": "1"}}
    graph.invoke(inputs, config)
    这种模式下,对话历史会作为图状态的一部分被自动保存和传递。

🗄️ 长期记忆 (Long-term Memory)

长期记忆允许信息在不同会话和用户之间持久共享。它通过存储(Store) 机制,将数据以JSON文档的形式保存在自定义的命名空间(Namespace)下。

  • 核心API:LangGraph 提供了 BaseStore 接口及其实现(如 InMemoryStore)来管理长期记忆。
  • 使用示例
    from langgraph.store.memory import InMemoryStore

    # 初始化存储
    store = InMemoryStore()
    # 在命名空间下保存用户偏好
    store.put(("user_profiles", "user_123"), "preferences", {"theme": "dark"})
    # 检索记忆
    item = store.get(("user_profiles", "user_123"), "preferences")

🧩 具体的记忆组件 (Memory Components)

在 LangChain 的 langchain.memory 模块中,还提供了一系列即插即用的记忆组件:

记忆类型核心机制适用场景
ConversationBufferMemory完整存储所有对话历史对话轮次少、需完整上下文的简单应用
ConversationBufferWindowMemory仅保留最近的 K 轮对话控制输入长度,聚焦于近期对话
ConversationSummaryMemory使用LLM生成历史对话的摘要压缩长对话,提取关键信息
ConversationSummaryBufferMemory结合摘要与最近消息,按token数管理平衡上下文完整性与token限制
ConversationTokenBufferMemory根据token数量限制保留最近记忆严格控制在模型上下文窗口内
ConversationEntityMemory提取并存储关于特定“实体”的信息需要提取和记忆人物、地点等关键信息的场景

注意:LangChain 官方正将记忆功能的重心转向 LangGraph 框架,其提供的检查点(Checkpointer)和存储(Store)机制更为强大和灵活。对于新项目,建议优先考虑 LangGraph 的实现方式。

💎 总结

LangChain 的记忆体系可以概括为:

  • 短期记忆(状态/检查点):解决单次会话内的上下文问题。
  • 长期记忆(存储):解决跨会话的用户偏好或知识持久化问题。
  • 记忆组件(工具):提供多种现成的策略来管理和优化短期记忆的内容。

想了解其中某种记忆类型的具体用法,可以随时再问我。