LangChain的记忆API
LangChain的记忆API主要分为两大类:短期记忆和长期记忆。这两类记忆在作用范围、实现机制和API上有所不同。
🧠 短期记忆 (Short-term Memory)
短期记忆用于在单次会话或线程(Thread) 中保持上下文连贯性。它的核心是检查点(Checkpointer) 机制,通过保存和恢复智能体的状态(State)来实现。
- 核心API:主要通过
MemorySaver或其生产环境版本(如PostgresSaver,MongoDBSaver)来实现。 - 使用示例:
这种模式下,对话历史会作为图状态的一部分被自动保存和传递。from langgraph.checkpoint.memory import MemorySaverfrom 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 的记忆体系可以概括为:
- 短期记忆(状态/检查点):解决单次会话内的上下文问题。
- 长期记忆(存储):解决跨会话的用户偏好或知识持久化问题。
- 记忆组件(工具):提供多种现成的策略来管理和优化短期记忆的内容。
想了解其中某种记忆类型的具体用法,可以随时再问我。