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:01阅读更多 →
实测盘点市面上口碑出众的GEO搜索AI工具,精准高效实用性强

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

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

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

太原助听器对比选购

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

2026/7/23 18:39:01阅读更多 →
AI论文助手哪个好用?2026年4款横评,写作查重降重一站搞定

AI论文助手哪个好用?2026年4款横评,写作查重降重一站搞定

【一句话答案】AI论文助手好不好用,看它能不能覆盖"写作—查重—降重—检测—排版"全流程——毕业之家ai(www.biye.com)从ai生成开题报告到答辩PPT一站配齐,实测一个账号走完整篇论文,不用在多个平台间反复横…

2026/7/23 20:07:29阅读更多 →
手搓万兆软路由与纯固态NAS:基于LattePanda Mu与开源PCIe扩展板的低成本高性能方案

手搓万兆软路由与纯固态NAS:基于LattePanda Mu与开源PCIe扩展板的低成本高性能方案

手搓万兆软路由与纯固态NAS:基于LattePanda Mu与开源PCIe扩展板的低成本高性能方案 最近很多DIY爱好者和极客朋友都在琢磨,怎么用最小的成本,在家里或者小办公室里搭建一套高性能的网络和存储系统。既要万兆网速飞起,又想用上速度超快的NVMe固态硬盘,但成品设备动辄大几千…

2026/7/23 20:07:29阅读更多 →
OpenWrt玩家必备:5款高性价比USB无线网卡实测(含NanoPi NEO3兼容清单)

OpenWrt玩家必备:5款高性价比USB无线网卡实测(含NanoPi NEO3兼容清单)

OpenWrt硬件选型实战:五款USB无线网卡在NanoPi NEO3上的深度横评 对于许多热衷于网络改造和智能家居部署的极客而言,NanoPi NEO3凭借其小巧的体积和强大的OpenWrt兼容性,成为了构建软路由、旁路由或轻量级网络服务的理想平台。然而,其本身并未集成无线模块,这让无线网络的…

2026/7/23 20:07:29阅读更多 →
从零设计立创RK3568B路由器:低成本嵌入式Linux软路由全流程实战

从零设计立创RK3568B路由器:低成本嵌入式Linux软路由全流程实战

从零设计立创RK3568B路由器:低成本嵌入式Linux软路由全流程实战 大家好,我是老张,一个干了十几年网络工程的老兵。最近很多朋友问我,想从单片机转嵌入式Linux,但市面上的开发板动不动就上千块,有没有低成本的学习路径?这不,我正好用业余时间,基于瑞芯微的RK3568芯片,…

2026/7/23 20:07:29阅读更多 →
基于Jetson平台搭载嵌入式GPU的智能服务机器人视觉系统软件总体设计

基于Jetson平台搭载嵌入式GPU的智能服务机器人视觉系统软件总体设计

一、引言随着科学技术的快速发展和人们生活水平的不断提高,人们对服务机器人的需求正日益增加。目前,服务机器人已逐渐在医疗护理、家庭清洁、娱乐教育等多个领域内发挥重要作用,能够有效地帮助人们从枯燥繁琐的日常工作中解放出来。本论文针…

2026/7/23 20:07:29阅读更多 →
嵌入式音频降噪:双二阶IIR滤波器在步进电机噪声抑制中的应用

嵌入式音频降噪:双二阶IIR滤波器在步进电机噪声抑制中的应用

1. 项目概述:嵌入式音频处理中的噪声攻坚战 在嵌入式多媒体设备,比如我们常见的数码相机或智能手机里,录制视频时同步收录清晰的人声是一个看似简单却充满挑战的任务。想象一下,你正在用相机记录一段重要的家庭聚会发言&#xff0…

2026/7/23 20:05:28阅读更多 →
Go语言静态资源打包方案对比与实践指南

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

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

2026/7/23 0:56:31阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

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

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

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

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

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

2026/7/23 0:56:31阅读更多 →
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:00:28阅读更多 →
从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

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

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

2026/7/23 0:00:28阅读更多 →
油泥处理设备哪里能买到

油泥处理设备哪里能买到

油泥处理设备哪里有?这是许多从事油田、炼化、清罐业务的从业者最关心的问题。根据河南三丰环保设备有限公司的行业经验,选购油泥处理设备的核心在于设备能否适配当地环保法规与原料特性,而非单纯看价格。该公司总经理王钦田先生指出&#xf…

2026/7/23 0:00:28阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/22 22:56:18阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/23 18:58:18阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/23 18:58:18阅读更多 →