导读上期咱们聊了记忆系统的设计思路——短期记忆、长期记忆、记忆巩固、记忆遗忘。理论讲了一圈今天该动手了。本篇用 LangChain 的四种 Memory 模块手把手搭一套真正能跑的对话记忆系统。零基础友好代码可直接复制运行。一、为什么 AI 总是失忆上一篇文章咱们聊了 Agent 记忆系统设计的四个核心思路•短期记忆——维持当前会话的连贯性•长期记忆——把用户偏好存进向量库•记忆巩固——把对话历史提炼成长期记忆•记忆遗忘——让记忆有生命周期该忘就忘道理都懂了但真到写代码的时候第一个问题就来了你“嗨我叫小明我在做一个 RAG 项目。”AI“你好小明RAG 是个很棒的方向有什么需要帮助的吗”你“帮我看看上面说的那个项目该怎么优化”AI“请问你说的是哪个项目你能再描述一下吗”你……我刚说的啊大哥再试一个更扎心的你“我叫什么名字”AI“抱歉我无法知道您的名字。”不是它在敷衍你是它真的没有记忆。大语言模型训练完之后参数就冻结了。每次你调 API对它来说都是一次全新的对话——上一轮你说了什么、它回了什么统统不知道。这就是上一篇说的短期记忆问题LLM 天生没有对话记忆能力得靠外部机制来补。那怎么补今天就不讲理论了直接上手——用 LangChain 框架把上期的设计思路落地成代码。二、LangChain Memory给 AI 装上外接记忆条一句话定义LangChain 的 Memory 模块就是给 AI 装了一根外接记忆条——每次对话前把之前聊过的内容塞回 Prompt让 AI 以为自己一直记着。你可以把 LLM 想象成一个超级学霸但有严重的短期失忆症。每次考试API 调用它的能力满分但完全不记得上一场考试的题目。Memory 做的事情就是在每次考试前把之前考试的笔记塞进它的口袋让它开卷答题。不同的 Memory 类型就像不同的笔记策略记忆类型类比特点BufferMemory全部笔记都带着完整但越来越重BufferWindowMemory只带最近 N 页笔记轻便但可能忘早期内容TokenBufferMemory笔记本有页数限制精确控制成本SummaryBufferMemory早期笔记压缩成摘要兼顾全局和细节说白了就是在记得多和花钱少之间找平衡。对应到上期的理论框架这四种 Memory 主要解决的都是短期记忆的问题——怎么在一次会话中保持对话的连贯性。三、代码实战四种记忆一个个跑通好了理论讲够了咱们直接上代码。3.1 全量缓存记忆ConversationBufferMemory这是最简单粗暴的方案——所有对话记录一字不漏地全存下来。就像你拿个本子把每一句对话都抄上去下次聊天前全部读一遍给 AI 听。下面这段代码做三件事初始化 LLM 和 Memory创建对话链进行三轮对话验证 AI 是否记住了之前的内容from langchain.chains import ConversationChainfrom langchain.chat_models import ChatOpenAIfrom langchain.memory import ConversationBufferMemory# -----------------------------------------------# 【按你的环境修改这里】# -----------------------------------------------# temperature0.0 让输出更稳定方便调试# 想要更有创意的回答可以调到 0.7# -----------------------------------------------llm ChatOpenAI(temperature0.0)memory ConversationBufferMemory()# 创建对话链verboseTrue 可以看到完整的 Prompt 拼接过程conversation ConversationChain( llmllm, memorymemory, verboseTrue)# 第一轮先自我介绍 print(第一轮对话)print(conversation.predict(input你好, 我叫皮皮鲁))# 第二轮随便聊点什么 print(\n第二轮对话)print(conversation.predict(input11等于多少))# 第三轮灵魂一问——你还记得我吗 print(\n第三轮对话)print(conversation.predict(input我叫什么名字)) plaintext ✅ 运行结果第一轮对话你好皮皮鲁很高兴认识你。我是一个AI助手有什么我可以帮你的吗第二轮对话11等于2。第三轮对话你叫皮皮鲁。诶它真记住了但 AI 并不是真的记住了而是每次调用predict()时Memory 会自动把之前所有的对话历史拼接到 Prompt 里发给 LLM——它只是重新看了一遍笔记。我们可以直接看看 Memory 里存了什么# 查看 Memory 中的完整对话记录print(memory.buffer) plaintext Human: 你好, 我叫皮皮鲁AI: 你好皮皮鲁很高兴认识你。我是一个AI助手有什么我可以帮你的吗Human: 11等于多少AI: 11等于2。Human: 我叫什么名字AI: 你叫皮皮鲁。三轮对话全在里面一字不少。你也可以不通过对话直接往 Memory 里手动塞内容——这在测试的时候特别好用memory ConversationBufferMemory()# 手动添加一段对话记录memory.save_context( {input: 你好我叫皮皮鲁}, {output: 你好啊我叫鲁西西})memory.save_context( {input: 很高兴和你成为朋友}, {output: 是的让我们一起去冒险吧})print(memory.load_memory_variables({})) plaintext {history: Human: 你好我叫皮皮鲁\nAI: 你好啊我叫鲁西西\nHuman: 很高兴和你成为朋友\nAI: 是的让我们一起去冒险吧}小编踩过的坑BufferMemory 好用是好用但对话一长你塞给 LLM 的 Prompt 会越来越长token 费用蹭蹭往上涨。小编有一次忘了限制聊了几十轮之后一看账单——好家伙比预想的多了好几倍。所以下面咱们来看怎么省钱。3.2 滑动窗口记忆ConversationBufferWindowMemory核心思路只记最近 N 轮对话更早的直接丢掉。就像你手机只保留最近 100 条聊天记录更早的自动清理。简单粗暴但省钱。from langchain.memory import ConversationBufferWindowMemory# k1 表示只保留最近 1 轮对话memory ConversationBufferWindowMemory(k1)# 手动添加两轮对话memory.save_context( {input: 你好我叫皮皮鲁}, {output: 你好啊我叫鲁西西})memory.save_context( {input: 很高兴和你成为朋友}, {output: 是的让我们一起去冒险吧})# 看看 Memory 里还剩什么print(memory.load_memory_variables({})) plaintext {history: Human: 很高兴和你成为朋友\nAI: 是的让我们一起去冒险吧}看到没第一轮的我叫皮皮鲁已经被丢掉了只剩最后一轮。接下来放到对话链里跑跑看这个效果就很直观了llm ChatOpenAI(temperature0.0)memory ConversationBufferWindowMemory(k1)conversation ConversationChain( llmllm, memorymemory, verboseFalse)print(第一轮对话)print(conversation.predict(input你好, 我叫皮皮鲁))print(\n第二轮对话)print(conversation.predict(input11等于多少))print(\n第三轮对话)print(conversation.predict(input我叫什么名字)) plaintext 第一轮对话你好皮皮鲁很高兴认识你。有什么我可以帮你的吗第二轮对话11等于2。第三轮对话很抱歉我无法知道您的名字。第三轮它不记得你叫什么了因为k1到第三轮时 Memory 里只有第二轮的11等于多少第一轮的自我介绍早就被丢出窗口了。“窗口记忆就像短信聊天——你只看得到最近几条往上翻不好意思删了。”3.3 Token 缓存记忆ConversationTokenBufferMemory窗口记忆按轮数截断但有个问题——有的轮对话就一个字有的轮对话巨长。按轮数算不够精确。Token 缓存记忆更聪明——按 token 数量截断超过上限就丢掉最早的对话。from langchain.memory import ConversationTokenBufferMemory# max_token_limit30 表示最多保留 30 个 tokenmemory ConversationTokenBufferMemory(llmllm, max_token_limit30)memory.save_context( {input: 朝辞白帝彩云间}, {output: 千里江陵一日还。})memory.save_context( {input: 两岸猿声啼不住}, {output: 轻舟已过万重山。})print(memory.load_memory_variables({})) plaintext {history: AI: 轻舟已过万重山。}30 个 token 的限制下只剩最后一句回答。前面的朝辞白帝彩云间和千里江陵一日还都被挤出去了。好处是可以精确控制每次发给 LLM 的上下文大小也就精确控制了成本。说实话这个在实际项目中用得不算太多——按 token 截断可能会把一段完整的对话从中间砍断。但如果你的场景对成本特别敏感它是最靠谱的选择。3.4 摘要缓存记忆ConversationSummaryBufferMemory好了重头戏来了。小编个人最喜欢的就是这个——SummaryBufferMemory。它的思路特别聪明最近的对话保留原文早期的对话用 LLM 压缩成摘要。就像你记笔记——今天上课的内容记得很详细上周的课只记了个大纲上个月的课……嗯就记了几个关键词。但至少没全忘对应上一篇的理论——这其实就是记忆巩固的一种简化实现把近期对话当短期记忆保持原貌把早期对话压缩提炼类似从短期记忆向长期记忆的转化。from langchain.chains import ConversationChainfrom langchain.chat_models import ChatOpenAIfrom langchain.memory import ConversationSummaryBufferMemory# 模拟一段较长的对话内容schedule 在八点你和你的产品团队有一个会议。\你需要做一个PPT。\上午9点到12点你需要忙于LangChain。\Langchain是一个有用的工具因此你的项目进展的非常快。\中午在意大利餐厅与一位开车来的顾客共进午餐\走了一个多小时的路程与你见面只为了解最新的 AI。\确保你带了笔记本电脑可以展示最新的 LLM 样例。llm ChatOpenAI(temperature0.0)# max_token_limit100超过 100 token 的早期对话会被压缩成摘要memory ConversationSummaryBufferMemory(llmllm, max_token_limit100)# 模拟三轮对话memory.save_context( {input: 你好我叫皮皮鲁}, {output: 你好啊我叫鲁西西})memory.save_context( {input: 很高兴和你成为朋友}, {output: 是的让我们一起去冒险吧})memory.save_context( {input: 今天的日程安排是什么}, {output: f{schedule}})# 看看 Memory 里的内容——注意开头的 System 部分就是摘要print(memory.load_memory_variables({})[history]) plaintext System: The human introduces themselves as Pipilu and the AI introducesthemselves as Luxixi. They express happiness at becoming friends anddecide to go on an adventure together. The human asks about the schedulefor the day...后面是详细的日程摘要看到没早期的自我介绍和交朋友被压缩成了一段摘要System 开头的那部分而最近的日程对话保留了原文。远的记个大概近的记得清楚两不耽误。接着基于这个 Memory 继续对话conversation ConversationChain( llmllm, memorymemory, verboseTrue)print(conversation.predict(input展示什么样的样例最好呢)) plaintext 展示一些具有多样性和创新性的样例可能是最好的选择。你可以展示一些不同领域的应用比如自然语言处理、图像识别、语音合成等。另外你也可以展示一些具有实际应用价值的样例比如智能客服、智能推荐等。虽然早期对话被压缩了但 AI 依然知道你今天要见客户、要展示 LLM——因为摘要里保留了关键信息。每次新对话后Memory 会自动重新压缩早期内容始终控制在 token 上限内。“SummaryBufferMemory 就像一个靠谱的秘书——重要的事记得清清楚楚不重要的帮你归档成一句话。”四、选哪个一张表说清楚四种方案都跑过一遍了回头看看怎么选记忆类型适用场景优势局限BufferMemory短对话、Demo信息完整不丢任何细节对话一长token 费用爆炸BufferWindowMemory客服/固定轮数问答简单粗暴只记最近 N 轮早期信息直接丢失TokenBufferMemory严格控成本按 token 数截断成本可控可能在句子中间截断SummaryBufferMemory长对话、生产环境早期压缩摘要兼顾全局需要额外调一次 LLM小编的建议很简单刚入门用 Buffer 先跑起来上生产换 Summary别在记忆上花冤枉钱。不过要提醒一句——这四种 Memory 解决的都是单次会话内的短期记忆问题。如果你想让 AI 跨会话记住用户偏好上期说的长期记忆或者自动清理过时信息“记忆遗忘”那就需要在这些基础上再加一层存储和管理逻辑了。“记忆系统设计80% 的工作量不在’记住’而在’该忘什么’。”五、写在最后四种 Memory 跑了一圈你会发现 LangChain 把对话记忆这件事封装得足够简单——几行代码就能让 AI 从金鱼记忆变成还算靠谱的记忆。但这只是记忆系统的第一步。今天的代码全部是基于内存的程序一重启对话历史全没了。而且我们只处理了短期记忆上期聊的长期记忆、记忆巩固、记忆遗忘都还没落地。学AI大模型的正确顺序千万不要搞错了2026年AI风口已来各行各业的AI渗透肉眼可见超多公司要么转型做AI相关产品要么高薪挖AI技术人才机遇直接摆在眼前有往AI方向发展或者本身有后端编程基础的朋友直接冲AI大模型应用开发转岗超合适就算暂时不打算转岗了解大模型、RAG、Prompt、Agent这些热门概念能上手做简单项目也绝对是求职加分王给大家整理了超全最新的AI大模型应用开发学习清单和资料手把手帮你快速入门学习路线:✅大模型基础认知—大模型核心原理、发展历程、主流模型GPT、文心一言等特点解析✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑✅开发基础能力—Python进阶、API接口调用、大模型开发框架LangChain等实操✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经以上6大模块看似清晰好上手实则每个部分都有扎实的核心内容需要吃透我把大模型的学习全流程已经整理好了抓住AI时代风口轻松解锁职业新可能希望大家都能把握机遇实现薪资/职业跃迁这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】