首页
学习
活动
专区
圈层
工具
发布
技术百科首页 >LangChain >LangChain 中的 Memory(记忆)机制有哪些类型?

LangChain 中的 Memory(记忆)机制有哪些类型?

词条归属:LangChain

1. Memory 的设计目的

大语言模型本质上是无状态的,每次 API 调用都是独立的。Memory 组件通过显式管理对话历史和上下文状态,将无状态的 LLM 调用转化为有连续性的对话体验。所有 Memory 组件统一实现 load_memory_variables() 和 save_context() 接口。

2. 五种 Memory 类型

  • ConversationBufferMemory(全量缓存记忆):完整保存所有对话轮次,不做任何压缩。优点是精确无误,缺点是随着对话增长会无限消耗 Token,最终超出模型的上下文窗口。适用于短对话、轮次少的场景
  • ConversationBufferWindowMemory(滑动窗口记忆):只保留最近 K 轮对话,丢弃更早的内容。通过设置 k 参数控制保留轮数,在 Token 使用和记忆范围之间取得平衡。适用于话题切换频繁的一般聊天场景
  • ConversationSummaryMemory(摘要记忆):使用 LLM 定期将长对话压缩为摘要,摘要随每轮对话更新。相比全量缓存大幅减少 Token 占用,代价是需要额外的 LLM 调用成本,且可能丢失细节。适用于主题连贯的长对话
  • ConversationSummaryBufferMemory(摘要缓冲混合记忆):结合上述两种方式的优点——近期对话以全文形式保留,早期对话被摘要压缩。通过 max_token_limit 控制总 Token 上限,超过后 oldest messages 被摘要化。这种混合方案兼顾了近期上下文的精确性和长期上下文的成本控制
  • VectorStoreRetrieverMemory(向量库长期记忆):将对话片段向量化存入向量数据库(如 FAISS、Chroma),通过语义搜索而非时间顺序检索相关记忆。模拟人类的"联想记忆",能从海量历史中精准抓取相关信息,适合构建个人专属助手或需要跨会话长期记忆的系统

3. 持久化记忆方案

对于生产环境,Memory 需要支持跨会话持久化。LangChain 提供了多种持久化后端:

  • Redis 后端:通过 RedisChatMessageHistory 实现,速度快、支持过期时间配置,适合实时性要求高的场景
  • SQL 后端:通过 SQLChatMessageHistory 支持 SQLitePostgreSQL关系型数据库
  • MongoDB 后端:通过 MongoChatMessageHistory 实现文档型存储
  • LangGraph Checkpointer:通过 LangGraph 的检查点机制实现 durable execution,支持状态持久化和断点续跑

4. Memory 选型建议

选择 Memory 类型时可根据以下维度判断:对话时长较短(20 轮以内)选用 Buffer Memory;需要保留近期上下文但控制成本选用 Buffer Window;长对话且关注成本选用 Summary Memory;需要从大量历史中精确回忆特定事实选用 Vector Store Memory;需要跨会话持久化则配合 Redis 或 SQL 后端。许多生产应用会组合使用多种 Memory 类型。

相关文章
构建AI智能体:LangChain智能体:打造会使用工具(Tools)、有记忆(Memory)的AI助手
LangChain 是一个专门为大语言模型应用开发设计的开源框架。它提供了一套完整的工具和组件,帮助开发者构建基于大语言的复杂应用程序,如智能对话系统、知识问答平台、内容生成工具等。 LangChain 的设计基于几个关键理念:模块化、可组合性和扩展性。它将复杂的语言模型应用开发过程分解为多个独立的组件,每个组件负责特定的功能,开发者可以根据需要灵活选择和组合这些组件。基础内容可参考《构建AI智能体:解密LangChain中的RAG架构:让AI模型突破局限学会“翻书”答题》
未闻花名
2025-11-24
2K1
AI 的「记忆」是怎么工作的?——Memory 机制全解析
你有没有遇到过这种情况:昨天跟 AI 聊了半天,介绍了自己的项目背景,今天打开新对话,它又变成了一个对你一无所知的陌生人。这不是 bug,这是 AI 的工作原理决定的。
GoodTime
2026-05-23
1.2K1
java中的数据类型有哪些?
1、boolean:布尔型数据,适用于逻辑计算,数据值只有true或false。(注意’t’ 和 ‘f’ 都是小写) 2、char:字符型数据,数据在内存中占用2个字节。Java字符采用Unicode编码,它的前128字节编码与ASCII兼容字符的存储范围在\u0000~\uFFFF。 3、byte:字节型数据,数据在内存中占用1个字节,存储数据范围为:-128~127。 4、short:短整型数据,数据在内存中占用2个字节。 5、int:整型数据,数据在内存中占用4个字节。 6、long:长整型数据,数据在内存中占用8个字节。 7、float:浮点型数据(单),数据在内存中占用4个字节。(float精度为7-8位) 8、double:浮点型数据(双),数据在内存中占用8个字节。(double精度为15-16位)
全栈程序员站长
2022-07-18
1.7K0
C 中变量的存储类型有哪些?
在 C 语言中,变量的存储类型决定了变量的生命周期和作用域。C 语言中有四种主要的存储类型:
代码小李
2024-12-30
1.4K0
简述python中的数字类型有哪些_python中都有哪些数据类型
python中数据类型有:整型、长整型、浮点型、字符串类型、布尔类型、列表类型、元组类型、字典类型、集合类型。
全栈程序员站长
2022-09-01
3.4K0
点击加载更多
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
领券