LangChain Memory 记忆系统:让AI记住对话的上下文
1. 引言在传统的对话式AI应用中模型通常将每次用户输入视为独立的请求这导致了一个核心问题模型无法记住之前的对话内容。想象一下你告诉AI助手“我喜欢科幻小说”在下一轮对话中问它“有什么推荐吗”它却完全忘记了你的偏好。LangChain Memory 系统正是为了解决这个问题而生。它作为 LangChain 框架的核心组件之一为 AI 应用提供了持久化、结构化的对话记忆能力让大语言模型LLM能够真正理解上下文实现连贯、个性化的多轮对话。本文将深入探讨 LangChain Memory 的核心概念、工作原理、不同类型的内存实现并通过实战代码演示如何为你的 AI 应用赋予“记忆”。2. 什么是 Memory2.1 基本概念在 LangChain 中Memory指的是在链Chain或代理Agent的多次调用之间持久化状态的机制。简单来说它就是一个专门用来存储和检索历史对话信息的组件。2.2 为什么需要 Memory上下文连贯性使模型能够基于之前的对话内容进行回复。个性化体验记住用户的偏好、身份信息或特定指令。任务连续性支持需要多步交互的复杂任务如订票、写代码。减少重复避免用户反复提供相同的信息。2.3 Memory 的核心接口LangChain 为 Memory 定义了一个清晰的接口主要包含两个核心方法load_memory_variables()从存储中加载记忆变量到当前对话上下文。save_context()将当前的输入和输出保存到记忆中。3. Memory 的工作原理用户输入Chain/Agent调用 Memoryload_memory_variables加载历史对话LLM 处理包含历史上下文生成回复save_context保存本轮对话返回回复给用户如图所示Memory 在每次对话循环中扮演着“上下文管理器”的角色加载阶段Chain 在处理用户输入前会从 Memory 中加载之前的相关对话记录。处理阶段LLM 基于“历史对话 当前输入”生成回复。保存阶段将“当前输入 模型回复”作为一对新的对话记录保存到 Memory 中。4. 常用的 Memory 类型LangChain 提供了多种开箱即用的 Memory 实现适用于不同的场景。4.1 ConversationBufferMemory最简单直接的内存将整个对话历史以字符串形式保存在内存中。fromlangchain.memoryimportConversationBufferMemory memoryConversationBufferMemory()memory.save_context({input:你好我叫小明},{output:你好小明有什么可以帮你的})memory.save_context({input:我最喜欢的颜色是蓝色},{output:好的我记住了你喜欢蓝色。})# 查看记忆内容print(memory.load_memory_variables({}))# 输出: {history: Human: 你好我叫小明\nAI: 你好小明有什么可以帮你的\nHuman: 我最喜欢的颜色是蓝色\nAI: 好的我记住了你喜欢蓝色。}特点优点实现简单保留完整对话历史。缺点对话较长时会消耗大量 Token可能超出模型上下文长度限制。4.2 ConversationBufferWindowMemory带窗口的缓冲区内存只保留最近 K 轮对话。fromlangchain.memoryimportConversationBufferWindowMemory# 只保留最近2轮对话memoryConversationBufferWindowMemory(k2)memory.save_context({input:第一轮},{output:回复1})memory.save_context({input:第二轮},{output:回复2})memory.save_context({input:第三轮},{output:回复3})print(memory.load_memory_variables({}))# 输出: {history: Human: 第二轮\nAI: 回复2\nHuman: 第三轮\nAI: 回复3}# 第一轮对话已被移出窗口适用场景需要限制上下文长度同时保持短期记忆的对话。4.3 ConversationSummaryMemory摘要式内存不保存原始对话而是用 LLM 生成对话摘要。fromlangchain.memoryimportConversationSummaryMemoryfromlangchain_openaiimportChatOpenAI llmChatOpenAI(modelgpt-3.5-turbo)memoryConversationSummaryMemory(llmllm)memory.save_context({input:我今天去了动物园看到了老虎和狮子},{output:听起来很有趣大型猫科动物很威武。})memory.save_context({input:我还喂了长颈鹿它们的脖子真长},{output:长颈鹿确实很特别是陆地上最高的动物。})print(memory.load_memory_variables({}))# 输出可能为: {history: 用户分享了去动物园的经历看到了老虎、狮子和长颈鹿并喂食了长颈鹿。AI 回应认为这些动物很有趣且特别。}特点优点极大压缩记忆体积适合长对话。缺点可能丢失细节且依赖 LLM 生成摘要的质量和成本。4.4 ConversationEntityMemory实体记忆专注于识别和记忆对话中提到的实体如人、地点、事物及其属性。fromlangchain.memoryimportConversationEntityMemoryfromlangchain_openaiimportChatOpenAI llmChatOpenAI(modelgpt-3.5-turbo)memoryConversationEntityMemory(llmllm)memory.save_context({input:小明喜欢蓝色和编程},{output:好的记住了小明的喜好。})memory.save_context({input:小明的姐姐叫小红她是个医生},{output:明白了小红是医生。})# 查看存储的实体print(memory.entity_store.store)# 输出可能为: {小明: 喜欢蓝色和编程, 小红: 是小明的姐姐职业是医生}适用场景需要记住用户、产品、订单等具体实体信息的应用。4.5 组合型 Memory在实际应用中可以组合多种 Memory 来满足复杂需求。fromlangchain.memoryimportCombinedMemory,ConversationBufferMemory,ConversationSummaryMemoryfromlangchain_openaiimportChatOpenAI llmChatOpenAI(modelgpt-3.5-turbo)# 定义两种内存buffer_memoryConversationBufferMemory(memory_keychat_history)summary_memoryConversationSummaryMemory(llmllm,memory_keysummary_history)# 组合它们combined_memoryCombinedMemory(memories[buffer_memory,summary_memory])# 使用 combined_memory 的链可以同时访问两种记忆5. 实战构建一个带记忆的聊天机器人下面我们构建一个完整的、带有对话记忆的聊天机器人。5.1 环境准备pipinstalllangchain langchain-openai python-dotenv在.env文件中配置你的 OpenAI API KeyOPENAI_API_KEYyour_api_key_here5.2 完整代码示例importosfromdotenvimportload_dotenvfromlangchain_openaiimportChatOpenAIfromlangchain.chainsimportConversationChainfromlangchain.memoryimportConversationBufferWindowMemory# 加载环境变量load_dotenv()# 初始化LLM和MemoryllmChatOpenAI(modelgpt-3.5-turbo,temperature0.7)memoryConversationBufferWindowMemory(k3)# 记住最近3轮对话# 创建对话链conversationConversationChain(llmllm,memorymemory,verboseTrue# 显示详细执行过程)print( 带记忆的聊天机器人已启动 )print(输入 exit 结束对话\n)whileTrue:user_inputinput(\n你: )ifuser_input.lower()exit:print(对话结束。)break# 生成回复responseconversation.predict(inputuser_input)print(fAI:{response})# 查看当前记忆调试用# print(\n当前记忆:, memory.load_memory_variables({}))5.3 运行效果示例 带记忆的聊天机器人已启动 输入 exit 结束对话 你: 你好我叫Alex。 AI: 你好Alex很高兴认识你。今天有什么我可以帮助你的吗 你: 我喜欢打篮球和看电影。 AI: 很棒的爱好篮球是项很好的运动电影也能带来很多乐趣。你最近看了什么好电影吗 你: 我昨天看了《星际穿越》。 AI: 《星际穿越》是一部经典的科幻电影诺兰导演的作品总是充满想象力。你觉得这部电影怎么样 你: 它的配乐和视觉效果特别震撼。 AI: 是的汉斯·季默的配乐和影片的视觉特效确实为这部电影增色不少共同营造了那种宏大而孤独的太空史诗感。注意第三轮和第四轮对话AI 仍然记得用户的名字Alex和之前提到的爱好实现了连贯的对话。6. 高级应用与最佳实践6.1 持久化存储默认的 Memory 存储在内存中程序重启后会丢失。为了实现持久化可以使用RedisBackedMemory将记忆存储在 Redis 中。SQLite或PostgreSQL使用数据库存储对话历史。文件存储将记忆序列化后保存到本地文件。6.2 记忆检索优化对于超长对话或大量历史记录简单的缓冲区可能不够用。可以考虑向量存储记忆将对话片段转换为向量检索时使用相似度搜索找到最相关的历史对话。基于时间的记忆给记忆加上时间戳优先检索最近期的对话。主题聚类将对话按主题分组检索时优先使用相同主题的历史。6.3 安全与隐私考虑敏感信息过滤在保存到 Memory 前过滤掉密码、身份证号等敏感信息。用户数据隔离确保不同用户的记忆完全隔离。记忆清理策略实现自动过期或用户手动清理记忆的功能。

相关新闻

【免费下载】 将斐讯N1盒子变身强大软路由:OpenWrt刷机教程推荐

【免费下载】 将斐讯N1盒子变身强大软路由:OpenWrt刷机教程推荐

将斐讯N1盒子变身强大软路由:OpenWrt刷机教程推荐 【下载地址】N1刷Openwrt教程 N1刷Openwrt教程本仓库提供了一个详细的教程,帮助用户将斐讯N1盒子刷入OpenWrt系统 项目地址: https://gitcode.com/Resource-Bundle-Collection/8da57 项目介绍 你…

2026/7/23 18:39:37 阅读更多 →
实测盘点市面上口碑出众的GEO搜索AI工具,精准高效实用性强

实测盘点市面上口碑出众的GEO搜索AI工具,精准高效实用性强

2026年AI生成式搜索已成为品牌获客的核心入口,GEO(生成式引擎优化)工具也随之成为企业布局AI流量的刚需。但市面上工具鱼龙混杂,不少伪GEO服务仍在消耗企业预算。结合行业实测数据与用户口碑,以下4款工具精准高效、实用…

2026/7/23 18:39:37 阅读更多 →
太原助听器对比选购

太原助听器对比选购

随着听力健康意识的提升,越来越多太原市民开始关注助听器的选配问题。面对市场上琳琅满目的品牌与产品,如何结合自身情况做出明智决策,成为不少听障人士及家属关心的核心议题。本文将从专业服务、产品品质、售后保障等维度,为太原…

2026/7/23 18:39:37 阅读更多 →

最新新闻

FlexRay通信控制器中断寄存器配置与应用实战指南

FlexRay通信控制器中断寄存器配置与应用实战指南

1. 项目概述与中断机制的核心价值在嵌入式系统,尤其是汽车电子和工业控制领域,实时性和可靠性不是锦上添花,而是生死攸关的底线。想象一下,一辆高速行驶的汽车,其引擎控制单元(ECU)需要毫秒级响…

2026/7/23 18:53:42 阅读更多 →
V2G微电网多目标优化调度与改进灰狼算法研究

V2G微电网多目标优化调度与改进灰狼算法研究

1. 项目概述在新能源电力系统快速发展的背景下,微电网作为整合分布式能源的重要载体,其优化调度问题日益受到关注。本项目针对含风、光、荷、储的微电网系统,引入V2G(Vehicle-to-Grid)技术,提出了一种改进的…

2026/7/23 18:53:42 阅读更多 →
2026国内满意度调研机构权威排行榜 数据采集与本地化服务领跑者

2026国内满意度调研机构权威排行榜 数据采集与本地化服务领跑者

本榜单评选国内头部满意度调研机构前十,筛选标准包括数据采集能力、本地化服务网络、样本质量与方法学严谨度,并附5大高精度研究方法与数据驱动决策深度解析。引言:评估维度与方法选择说明我们以多维指标构建权威评估框架,兼顾现实…

2026/7/23 18:53:42 阅读更多 →
【Python毕业设计】 基于 Python 的期货模拟操盘实训平台设计轻量化期货行情模拟与交易系统实现(源码+文档+远程调试,全bao定制等)

【Python毕业设计】 基于 Python 的期货模拟操盘实训平台设计轻量化期货行情模拟与交易系统实现(源码+文档+远程调试,全bao定制等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/23 18:53:42 阅读更多 →
【Rust自学】11.7. 按测试的名称运行测试

【Rust自学】11.7. 按测试的名称运行测试

11.7 按测试的名称运行测试 11.7.1. 按名称运行测试的子集 如果想选择运行哪些测试,就把测试名称(一个或多个)作为参数传给cargo test。 看个例子: pub fn add_two(a: usize) -> usize {a 2 }#[cfg(test)] mod tests {use sup…

2026/7/23 18:53:42 阅读更多 →
【Rust自学】11.1. 编写和运行测试

【Rust自学】11.1. 编写和运行测试

11.1 编写和运行测试 11.1.1. 什么是测试 在Rust里,测试就是一个函数,用于验证非测试代码的行为是否符合预期。 一个测试函数通常执行三个操作: - 准备(Arrange)数据/状态 - 运行(Act)被测试的代码 - 断言(Assert)结果 这三个操作在有些语…

2026/7/23 18:52:42 阅读更多 →

日新闻

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

更多请点击: https://intelliparadigm.com 第一章:从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表) 当AI副业主理人不再仅满足于单次服务交付,而是主动构建可复用、可裂变、可…

2026/7/23 0:00:25 阅读更多 →
AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

更多请点击: https://codechina.net 第一章:AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析 在对2,346篇跨行业AI生成文案的A/B测试数据进行聚类分析后,我们发现&#xff1…

2026/7/23 0:01:26 阅读更多 →
Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具 【免费下载链接】chitchatter Secure peer-to-peer chat that is serverless, decentralized, and ephemeral 项目地址: https://gitcode.com/gh_mirrors/ch/chitchatter Chitchatter是一款革命性的安…

2026/7/23 0:01:26 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/22 8:58:19 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/22 19:43:43 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/23 17:49:47 阅读更多 →

月新闻