LLM 大模型存储记忆功能详解
LLM 大模型需要存储记忆功能以解决长对话遗忘、个性化服务及复杂任务管理问题。LangChain 提供短期记忆(内存拼接历史消息)和长期记忆(向量库/数据库持久化)两种核心方案。短期记忆适用于单次对话连贯性,长期记忆支持跨会话个性化。实战中常采用混合模式结合 RAG 检索。通过代码示例展示了如何使用 LangChain 实现记忆存储、检索及时间加权策略,帮助开发者构建具备持续交互能力的智能助手。

LLM 大模型需要存储记忆功能以解决长对话遗忘、个性化服务及复杂任务管理问题。LangChain 提供短期记忆(内存拼接历史消息)和长期记忆(向量库/数据库持久化)两种核心方案。短期记忆适用于单次对话连贯性,长期记忆支持跨会话个性化。实战中常采用混合模式结合 RAG 检索。通过代码示例展示了如何使用 LangChain 实现记忆存储、检索及时间加权策略,帮助开发者构建具备持续交互能力的智能助手。

之前我们把 LangChain 框架、RAG 技术、Agent 智能体这些核心知识点拆了个遍,不知道大家有没有遇到过这种尴尬——跟大模型聊了半天,转头问它'我刚才说我叫啥',它却一脸懵地回复'抱歉,我不知道'。这其实就是大模型'记忆力'的问题!今天咱们就专门攻克 LLM 的存储记忆功能,搞懂它为什么需要记忆、怎么实现记忆,以及在实际场景中怎么用,让大模型真正'记住'每一个需求~

大模型的记忆功能不是'锦上添花',而是'雪中送炭'——没有记忆的大模型,就像个'鱼的记忆'选手,交互体验会大打折扣。核心原因就三个:
不管是 GPT-4 还是其他大模型,单次对话的上下文窗口都有 token 限制(常见 4k~128k),超过这个限制,早期的对话信息就会被'挤掉',导致模型'失忆'。
在客服、教育、医疗这些场景里,用户需要模型记住自己的专属信息——比如姓名、病史、订单记录、学习进度,这样服务才够'贴心'。
像旅行规划、代码调试这种多步骤任务,需要模型记住中间过程——比如已经推荐的景点、试过的调试方案,不然任务推进就会反复'返工'。
LangChain 作为大模型应用开发的'瑞士军刀',提供了完善的记忆解决方案,主要分为「短期记忆」和「长期记忆」两类,刚好对应不同的使用场景。

短期记忆的核心是'记住当前会话的近期历史',确保多轮聊天不脱节,实现起来很简单——通过 LangChain 的 Memory 模块,把历史对话存储在内存里,每次提问时都把历史消息和当前问题一起传给大模型。
[用户:你好][AI:你好!] 和当前问题'你是谁'拼在一起,模型就知道是在延续对话。短期记忆只能管单次对话,关掉会话就忘了。长期记忆则是把用户数据存在外部存储里,突破上下文窗口限制,就算下次再聊也能认出你。

实际开发中,很少单独用短期或长期记忆,更多是'短期记忆保连贯,长期记忆补历史'——也就是「短期记忆 + 长期检索增强(RAG)」的混合模式。
短期记忆和长期记忆各有优劣,用的时候要根据场景选。下面用表格把关键差异说清楚,一看就懂:
| 对比维度 | 短期记忆 | 长期记忆 |
|---|---|---|
| 存储方式 | 内存缓存,拼接在模型输入的历史消息中 | 数据库持久化存储(向量库/文件/关系库) |
| 容量限制 | 受上下文窗口限制(4k~128k tokens) | 理论上无上限 |
| 访问速度 | 毫秒级(内存读取,几乎无延迟) | 百毫秒级(依赖检索算法,有轻微延迟) |
| 典型应用 | 单次对话连贯性保持、即时咨询 | 个性化服务、用户画像、跨会话记忆、知识库 |
| 实现复杂度 | 低(LangChain 直接调用 Memory 模块) | 高(需部署存储系统、设计检索逻辑) |
| 成本 | 低(无额外存储开销) | 中高(需维护服务器、存储设备) |
| 示例 | 聊天中记住前 3 轮说过的话 | 记住用户半年前的购买记录、学习目标 |
不管是短期还是长期记忆,核心都是'存得下、取得到'。下面讲 3 种实战中常用的实现方式:
这是最简单的实现方式,LangChain 的 ConversationBufferMemory 就是干这个的——把每一轮对话都存起来,生成新回复时拼接成'历史对话 + 当前问题'的格式。
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="我叫什么名字?")
# 输出:"你叫张三"
长期记忆需要'持久化存储',常用两种方式:
结合短期记忆的流畅性和长期记忆的持久性,是实战首选。比如用 VectorStoreRetrieverMemory,既存短期对话,又能从向量库拉长期记忆。
记忆功能的价值,最终要落地到场景里。下面两个案例是实战中最常用的,带大家感受下怎么用:
需求:记住用户的学习目标(比如'掌握微积分'),后续推荐资料时精准匹配。
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)
# 输出:"基于你的学习目标(掌握微积分)和已学知识点(洛必达法则),推荐《普林斯顿微积分读本》..."
需求:记住用户的购买、浏览、退货记录,分析兴趣并推荐商品(带时间权重,新行为比旧行为重要)。
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 购买手机"

很多小伙伴会纠结'什么时候用短期记忆,什么时候用长期记忆',这里给大家一个简单的决策树,照着选就行:
ConversationBufferMemory、ConversationSummaryMemory(总结记忆,减少 token 占用)。大模型的记忆功能,本质是'让模型从'一次性问答工具'变成'有持续交互能力的助手''——短期记忆保对话流畅,长期记忆做个性化服务,混合模式则是实战中的最优解。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online