| 大家好,我是工藤学编程 🦉 | 一个正在努力学习的小博主,期待你的关注 |
|---|---|
| 实战代码系列最新文章😉 | C++实现图书管理系统(Qt C++ GUI界面版) |
| SpringBoot实战系列🐷 | 【SpringBoot实战系列】SpringBoot3.X 整合 MinIO 存储原生方案 |
| 分库分表 | 分库分表之实战-sharding-JDBC分库分表执行流程原理剖析 |
| 消息队列 | 深入浅出 RabbitMQ-RabbitMQ消息确认机制(ACK) |
| AI大模型 | 零基础学AI大模型之旅游规划智能体之react_agent实战 |
前情摘要
1、零基础学AI大模型之读懂AI大模型
2、零基础学AI大模型之从0到1调用大模型API
3、零基础学AI大模型之SpringAI
4、零基础学AI大模型之AI大模型常见概念
5、零基础学AI大模型之大模型私有化部署全指南
6、零基础学AI大模型之AI大模型可视化界面
7、零基础学AI大模型之LangChain
8、零基础学AI大模型之LangChain六大核心模块与大模型IO交互链路
9、零基础学AI大模型之Prompt提示词工程
10、零基础学AI大模型之LangChain-PromptTemplate
11、零基础学AI大模型之ChatModel聊天模型与ChatPromptTemplate实战
12、零基础学AI大模型之LangChain链
13、零基础学AI大模型之Stream流式输出实战
14、零基础学AI大模型之LangChain Output Parser
15、零基础学AI大模型之解析器PydanticOutputParser
16、零基础学AI大模型之大模型的"幻觉"
17、零基础学AI大模型之RAG技术
18、零基础学AI大模型之RAG系统链路解析与Document Loaders多案例实战
19、零基础学AI大模型之LangChain PyPDFLoader实战与PDF图片提取全解析
20、零基础学AI大模型之LangChain WebBaseLoader与Docx2txtLoader实战
21、零基础学AI大模型之RAG系统链路构建:文档切割转换全解析
22、零基础学AI大模型之LangChain 文本分割器实战:CharacterTextSplitter 与 RecursiveCharacterTextSplitter 全解析
23、零基础学AI大模型之Embedding与LLM大模型对比全解析
24、零基础学AI大模型之LangChain Embedding框架全解析
25、零基础学AI大模型之嵌入模型性能优化
26、零基础学AI大模型之向量数据库介绍与技术选型思考
27、零基础学AI大模型之Milvus向量数据库全解析
28、零基础学AI大模型之Milvus核心:分区-分片-段结构全解+最佳实践
29、零基础学AI大模型之Milvus部署架构选型+Linux实战:Docker一键部署+WebUI使用
30、零基础学AI大模型之Milvus实战:Attu可视化安装+Python整合全案例
31、零基础学AI大模型之Milvus索引实战
32、零基础学AI大模型之Milvus DML实战
33、零基础学AI大模型之Milvus向量Search查询综合案例实战
33、零基础学AI大模型之新版LangChain向量数据库VectorStore设计全解析
34、零基础学AI大模型之相似度Search与MMR最大边界相关搜索实战
35、零基础学AI大模型之LangChain整合Milvus:新增与删除数据实战
36、零基础学AI大模型之LangChain+Milvus实战:相似性搜索与MMR多样化检索全解析
37、零基础学AI大模型之LangChain Retriever
38、零基础学AI大模型之MultiQueryRetriever多查询检索全解析
39、零基础学AI大模型之LangChain核心:Runnable接口底层实现
40、零基础学AI大模型之RunnablePassthrough
41、零基础学AI大模型之RunnableParallel
42、零基础学AI大模型之RunnableLambda
43、零基础学AI大模型之RunnableBranch
44、零基础学AI大模型之Agent智能体
45、零基础学AI大模型之LangChain Tool工具
46、零基础学AI大模型之LLM绑定Tool工具实战
47、零基础学AI大模型之LangChain Tool异常处理
48、零基础学AI大模型之CoT思维链和ReAct推理行动
49、零基础学AI大模型之Zero-Shot和Few-Shot
50、零基础学AI大模型之LangChain智能体执行引擎AgentExecutor
51、零基础学AI大模型之个人助理智能体之tool_calling_agent实战
52、零基础学AI大模型之旅游规划智能体之react_agent实战
本文章目录
- 零基础学AI大模型之LLM大模型存储记忆功能
-
- 一、为什么大模型需要"存储记忆"功能?
-
- [1. 解决长对话上下文"遗忘"痛点](#1. 解决长对话上下文“遗忘”痛点)
- [2. 支撑个性化服务:记住"你的专属需求"](#2. 支撑个性化服务:记住“你的专属需求”)
- [3. 管理复杂任务:跟踪"任务中间状态"](#3. 管理复杂任务:跟踪“任务中间状态”)
- 二、LangChain怎么实现大模型记忆?两大核心方案
-
- [1. 短期记忆:搞定"单次对话"的连贯性](#1. 短期记忆:搞定“单次对话”的连贯性)
- [2. 长期记忆:实现"跨会话"的持久化记忆](#2. 长期记忆:实现“跨会话”的持久化记忆)
- [3. 混合模式:短期+长期,实战主流方案](#3. 混合模式:短期+长期,实战主流方案)
- 三、记忆功能核心设计:短期vs长期,怎么选?
- 四、记忆功能怎么实现?3种关键方式
-
- [1. 短期记忆:历史消息拼接](#1. 短期记忆:历史消息拼接)
- [2. 长期记忆:结构化+向量化存储](#2. 长期记忆:结构化+向量化存储)
- [3. 混合模式:短期记忆+RAG检索](#3. 混合模式:短期记忆+RAG检索)
- 五、应用场景与实战案例
- 六、大模型长短期记忆选择决策树:该用哪种?
- 总结
零基础学AI大模型之LLM大模型存储记忆功能
哈喽,各位小伙伴!👋 之前我们把LangChain框架、RAG技术、Agent智能体这些核心知识点拆了个遍,不知道大家有没有遇到过这种尴尬------跟大模型聊了半天,转头问它"我刚才说我叫啥",它却一脸懵地回复"抱歉,我不知道"。这其实就是大模型"记忆力"的问题!今天咱们就专门攻克LLM的存储记忆功能,搞懂它为什么需要记忆、怎么实现记忆,以及在实际场景中怎么用,让大模型真正"记住"每一个需求~
一、为什么大模型需要"存储记忆"功能?

大模型的记忆功能不是"锦上添花",而是"雪中送炭"------没有记忆的大模型,就像个"鱼的记忆"选手,交互体验会大打折扣。核心原因就三个:
1. 解决长对话上下文"遗忘"痛点
不管是GPT-4还是其他大模型,单次对话的上下文窗口都有token限制(常见4k~128k),超过这个限制,早期的对话信息就会被"挤掉",导致模型"失忆"。
- 经典反例:
用户1:"我叫张三"
AI:"你好张三!"
用户2:"我叫什么名字?"
AI:"抱歉,我不知道您的名字。"(预期应该回答"张三") - 实际影响:比如用户先问"如何制作蛋糕",接着问"需要烤箱吗",没记忆的模型可能只说"需要烤箱",却忘了之前聊的蛋糕配方关键步骤。
2. 支撑个性化服务:记住"你的专属需求"
在客服、教育、医疗这些场景里,用户需要模型记住自己的专属信息------比如姓名、病史、订单记录、学习进度,这样服务才够"贴心"。
- 医疗场景:患者复诊时,医疗助手能直接根据历史诊断结果给建议,不用患者重复说"我上次查出来血压高";
- 教育场景:学习助手记住用户"要学微积分"的目标,推荐资料时就不会推已经掌握的基础数学内容。
3. 管理复杂任务:跟踪"任务中间状态"
像旅行规划、代码调试这种多步骤任务,需要模型记住中间过程------比如已经推荐的景点、试过的调试方案,不然任务推进就会反复"返工"。
- 旅行规划示例:用户让"规划上海到北京三天行程",模型先推荐了第一天去故宫,用户接着问"第二天去哪",有记忆的模型会基于"北京行程"这个大前提推荐,而不是乱推荐一个别的城市的景点。
二、LangChain怎么实现大模型记忆?两大核心方案
LangChain作为大模型应用开发的"瑞士军刀",提供了完善的记忆解决方案,主要分为「短期记忆」和「长期记忆」两类,刚好对应不同的使用场景。
1. 短期记忆:搞定"单次对话"的连贯性

短期记忆的核心是"记住当前会话的近期历史",确保多轮聊天不脱节,实现起来很简单------通过LangChain的Memory模块,把历史对话存储在内存里,每次提问时都把历史消息和当前问题一起传给大模型。
- 适用场景:即时聊天、单次短期任务(比如临时问个问题、简单咨询);
- 核心逻辑:不用复杂存储,就靠"拼接历史消息"实现,比如把
[用户:你好][AI:你好!]和当前问题"你是谁"拼在一起,模型就知道是在延续对话。
2. 长期记忆:实现"跨会话"的持久化记忆
短期记忆只能管单次对话,关掉会话就忘了。长期记忆则是把用户数据存在外部存储里,突破上下文窗口限制,就算下次再聊也能认出你。
- 存储载体:常用向量数据库(Milvus、Pinecone)、关系型数据库(MySQL)等;
- 适用场景:用户画像构建、长期个性化服务(比如电商推荐)、跨会话任务(比如持续一周的项目咨询);
- 核心逻辑:把用户的关键信息(比如购买记录、学习目标)结构化或向量化后存起来,需要时通过检索拉取。
3. 混合模式:短期+长期,实战主流方案

实际开发中,很少单独用短期或长期记忆,更多是"短期记忆保连贯,长期记忆补历史"------也就是「短期记忆 + 长期检索增强(RAG)」的混合模式。
- 工作流程:用户提问时,先从短期记忆里拿近期对话,再从长期存储(比如Milvus)里检索相关历史信息,两者结合后传给大模型,既保证当前对话流畅,又能调用跨会话记忆。
三、记忆功能核心设计:短期vs长期,怎么选?
短期记忆和长期记忆各有优劣,用的时候要根据场景选。下面用表格把关键差异说清楚,一看就懂:
| 对比维度 | 短期记忆 | 长期记忆 |
|---|---|---|
| 存储方式 | 内存缓存,拼接在模型输入的历史消息中 | 数据库持久化存储(向量库/文件/关系库) |
| 容量限制 | 受上下文窗口限制(4k~128k tokens) | 理论上无上限 |
| 访问速度 | 毫秒级(内存读取,几乎无延迟) | 百毫秒级(依赖检索算法,有轻微延迟) |
| 典型应用 | 单次对话连贯性保持、即时咨询 | 个性化服务、用户画像、跨会话记忆、知识库 |
| 实现复杂度 | 低(LangChain直接调用Memory模块) | 高(需部署存储系统、设计检索逻辑) |
| 成本 | 低(无额外存储开销) | 中高(需维护服务器、存储设备) |
| 示例 | 聊天中记住前3轮说过的话 | 记住用户半年前的购买记录、学习目标 |
四、记忆功能怎么实现?3种关键方式
不管是短期还是长期记忆,核心都是"存得下、取得到"。下面讲3种实战中常用的实现方式:
1. 短期记忆:历史消息拼接
这是最简单的实现方式,LangChain的ConversationBufferMemory就是干这个的------把每一轮对话都存起来,生成新回复时拼接成"历史对话+当前问题"的格式。
- 简化示例代码:
python
from langchain.memory import ConversationBufferMemory
from langchain.chat_models import ChatOpenAI
from langchain.chains import ConversationChain
# 初始化短期记忆(内存存储)
memory = ConversationBufferMemory()
# 初始化聊天模型和对话链
llm = ChatOpenAI(temperature=0)
conversation = ConversationChain(llm=llm, memory=memory)
# 第一轮对话:存记忆
conversation.predict(input="我叫张三") # 输出:"你好张三!"
# 第二轮对话:用记忆
conversation.predict(input="我叫什么名字?") # 输出:"你叫张三"
2. 长期记忆:结构化+向量化存储
长期记忆需要"持久化存储",常用两种方式:
- 结构化存储:用MySQL等关系库,把用户信息存成表(比如用户表、订单表),需要时精准查询(比如查"用户A的2027年购买记录");
- 向量化存储:把非结构化文本(比如对话记录、诊断报告)通过Embedding转成向量,存到Milvus等向量库,需要时用"相似度检索"找相关记忆(比如查"和用户A聊过的微积分知识点")。
3. 混合模式:短期记忆+RAG检索
结合短期记忆的流畅性和长期记忆的持久性,是实战首选。比如用VectorStoreRetrieverMemory,既存短期对话,又能从向量库拉长期记忆。
- 核心逻辑:用户提问时,先从短期记忆拿近期对话,再从向量库检索相关长期记忆,两者合并后传给大模型。
五、应用场景与实战案例
记忆功能的价值,最终要落地到场景里。下面两个案例是实战中最常用的,带大家感受下怎么用:
案例1:个性化教育助手(记住学习目标)
需求:记住用户的学习目标(比如"掌握微积分"),后续推荐资料时精准匹配。
- 实战伪代码(用LangChain+向量库):
python
from langchain.memory import VectorStoreRetrieverMemory
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import Milvus
from langchain.chat_models import ChatOpenAI
from langchain.chains import ConversationChain
# 1. 初始化Milvus向量库(存储长期记忆)
embeddings = OpenAIEmbeddings()
vectorstore = Milvus(
embedding_function=embeddings,
connection_args={"host": "localhost", "port": "19530"},
collection_name="student_memory"
)
# 2. 初始化记忆系统(短期+长期)
retriever = vectorstore.as_retriever(search_kwargs={"k": 3}) # 取Top3相关记忆
memory = VectorStoreRetrieverMemory(retriever=retriever)
# 3. 存储学习目标(长期记忆)
memory.save_context(
{"input": "我的学习目标是掌握微积分"},
{"output": "目标已记录,将推荐相关资源"}
)
# 4. 存储知识点学习记录(长期记忆)
explanation = "洛必达法则是用于求不定式极限的方法,适用于0/0、∞/∞型极限..."
memory.save_context(
{"input": "请解释洛必达法则"},
{"output": f"{explanation} 已添加到你的学习清单"}
)
# 5. 后续对话:根据记忆推荐资料(调用长期记忆)
llm = ChatOpenAI(temperature=0)
conversation = ConversationChain(llm=llm, memory=memory)
response = conversation.predict(input="根据我的目标推荐学习资料")
print(response)
# 输出:"基于你的学习目标(掌握微积分)和已学知识点(洛必达法则),推荐《普林斯顿微积分读本》..."
案例2:电商推荐引擎(记住用户行为)
需求:记住用户的购买、浏览、退货记录,分析兴趣并推荐商品(带时间权重,新行为比旧行为重要)。
- 实战伪代码(用TimeWeightedVectorStoreRetriever):
python
from langchain.retrievers import TimeWeightedVectorStoreRetriever
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import Milvus
from langchain.schema import Document
# 1. 初始化Milvus向量库
embeddings = OpenAIEmbeddings()
vectorstore = Milvus(
embedding_function=embeddings,
connection_args={"host": "localhost", "port": "19530"},
collection_name="user_behavior"
)
# 2. 初始化带时间权重的记忆检索器(新记忆权重高)
retriever = TimeWeightedVectorStoreRetriever(
vectorstore=vectorstore,
decay_rate=0.95, # 记忆衰减系数(越旧的记忆权重越低)
k=5 # 取Top5相关记忆
)
# 3. 存储用户行为(购买、浏览、退货)
retriever.add_documents([
Document(page_content="用户2026-12-01购买手机", metadata={"type": "purchase"}),
Document(page_content="用户2027-03-15浏览笔记本电脑", metadata={"type": "browse"}),
Document(page_content="用户2027-06-20退货耳机", metadata={"type": "return"})
])
# 4. 分析用户兴趣(检索带时间权重的记忆)
relevant_memories = retriever.get_relevant_documents("分析用户近期兴趣")
for doc in relevant_memories:
print(doc.page_content)
# 输出(按权重排序):
# "用户2027-06-20退货耳机"
# "用户2027-03-15浏览笔记本电脑"
# "用户2026-12-01购买手机"
六、大模型长短期记忆选择决策树:该用哪种?

很多小伙伴会纠结"什么时候用短期记忆,什么时候用长期记忆",这里给大家一个简单的决策树,照着选就行:
-
基础用法:用短期记忆
- 场景:单次对话、不需要跨会话记住信息、功能简单(比如临时聊天、一次性咨询);
- 工具:LangChain的
ConversationBufferMemory、ConversationSummaryMemory(总结记忆,减少token占用)。
-
进阶用法:用长期记忆+向量数据库
- 场景:需要跨会话记忆、个性化服务、数据量大(比如电商推荐、医疗助手);
- 工具:LangChain+Milvus/Pinecone+Embedding模型。
-
高级用法:多用户隔离记忆(会话级)
- 场景:多用户使用(比如SaaS平台、多用户助手),需要区分不同用户的记忆;
- 实现:给每个用户分配唯一ID,存储记忆时带上用户ID,检索时按用户ID过滤(比如Milvus里给向量加用户ID元数据)。
总结
大模型的记忆功能,本质是"让模型从'一次性问答工具'变成'有持续交互能力的助手'"------短期记忆保对话流畅,长期记忆做个性化服务,混合模式则是实战中的最优解。
如果有疑问,欢迎在评论区交流~ 咱们下期再见!👋