大模型记忆怎么做?开发中常见的 5 种实现方式
大模型本身其实没有真正的长期记忆。
比如:
用户:我叫小明
AI:你好,小明。
用户:我叫什么?
AI:不知道。
原因很简单:
每一次调用大模型,本质上都是一次新的请求。
如果想让 AI “记住”之前说过什么,就需要我们在程序中主动保存历史数据,并在下一次请求时重新带给模型。
整体思路就是:
用户发送消息
↓
读取历史记忆
↓
拼接到 Prompt
↓
调用大模型
↓
保存本轮对话
开发中常见的记忆实现方式主要有下面几种。
一、直接保存历史对话
这是最简单的方式。
例如保存:
User:我叫小明
Assistant:你好,小明
User:我喜欢 Java
下一次请求时,把之前的内容一起发送给模型:
历史对话:
User:我叫小明
Assistant:你好,小明
User:我喜欢 Java
当前问题:
我叫什么?
模型自然就能回答:
你叫小明。
代码逻辑可以理解成:
List<Message> history = getHistory(userId);
history.add(new UserMessage(message));
ChatResponse response =
chatModel.call(new Prompt(history));
这是最基础的:
Conversation Memory
优点:
实现简单
上下文完整
缺点:
聊天越多
Prompt 越长
Token 越贵
二、滑动窗口记忆
实际项目不可能把用户几个月的聊天记录全部塞给模型。
所以最常见的做法是:
只保留最近 N 轮对话。
例如:
最近 10 条消息
超过以后,把最老的删除:
第 1 条 ×
第 2 条 ×
第 3 条
第 4 条
...
第 12 条
最终只保留:
最近 10 条
可以理解成一个:
滑动窗口
流程:
保存消息
↓
判断数量
↓
超过最大数量?
↓
删除最旧消息
这是聊天机器人中最常见的一种记忆方式。
Spring AI 中的 ChatMemory,核心也是围绕这种思路管理聊天消息。
适合:
普通聊天
AI 客服
短期连续对话
三、摘要记忆
如果聊天时间特别长,可以把旧对话进行压缩。
例如原始聊天有几千字:
用户叫小明
今年 25 岁
Java 开发
正在学习 Spring AI
喜欢 MySQL
最近准备做 AI 项目
……
可以让大模型总结成:
用户叫小明,是 Java 开发者,
目前正在学习 Spring AI,
准备开发 AI 项目。
然后只保存:
摘要
+
最近几轮聊天
整体结构:
历史聊天
↓
LLM 总结
↓
Memory Summary
+
最近 N 条消息
↓
发送给模型
这样可以大幅减少 Token。
适合:
长期聊天
AI 助手
AI 陪伴
长期用户画像
四、数据库持久化记忆
前面的记忆如果只放在:
Map
或者:
内存
服务一重启就没了。
正式项目一般需要保存到数据库。
比如建立:
ai_chat_message
表:
id
conversation_id
user_id
role
content
create_time
每次聊天:
用户消息
↓
保存数据库
↓
读取当前会话历史
↓
调用大模型
↓
保存 AI 回复
可以使用:
MySQL
Redis
MongoDB
PostgreSQL
例如:
Redis
适合保存:
最近聊天记录
短期 Memory
而:
MySQL
适合:
永久聊天记录
会话历史
消息查询
很多项目会:
Redis
+
MySQL
一起使用。
五、向量数据库实现长期记忆
如果用户聊了几个月:
10 万条消息
显然不能全部塞给大模型。
这时候可以使用:
Embedding
+
Vector Database
把历史记忆转成向量保存。
例如用户以前说过:
我养了一只叫旺财的柯基。
保存:
文本
↓
Embedding
↓
Vector Database
几个月以后用户问:
你还记得我的狗叫什么吗?
系统先进行向量检索:
当前问题
↓
Embedding
↓
向量搜索
↓
找到:
我养了一只叫旺财的柯基
↓
加入 Prompt
↓
调用大模型
最终 AI 回答:
记得,你的狗叫旺财。
这种方式本质上和 RAG 非常像。
可以叫:
Long-Term Memory
适合:
长期 AI 助手
个人知识库
AI Agent
用户画像
长期陪伴型 AI
六、用户画像记忆
还有一种非常实用的做法:
不保存所有聊天,而是提取重要信息。
例如聊天过程中提取:
{
"name": "小明",
"job": "Java Developer",
"interest": [
"Spring AI",
"Redis",
"AI Agent"
]
}
以后用户提问时:
用户画像
+
当前问题
↓
LLM
这样 AI 就能表现得像“认识这个用户”。
例如:
用户:
推荐一个适合我的 AI 项目。
AI:
你本身是 Java 开发,可以尝试用
Spring AI + Redis + RAG 做一个知识库系统。
这种方式特别适合:
AI 助手
推荐系统
智能客服
个性化 Agent
七、实际项目一般怎么组合?
真正的项目一般不会只用一种记忆。
比较常见的是:
短期记忆
↓
最近 10~20 条聊天
长期记忆
↓
向量数据库
用户画像
↓
MySQL / Redis
历史记录
↓
MySQL
最终请求:
System Prompt
+ 用户画像
+ 长期记忆检索结果
+ 最近聊天记录
+ 当前问题
↓
LLM
这其实就是一个比较完整的大模型记忆系统。
八、总结
开发中常见的大模型记忆,可以记住这几种:
1. 全量历史对话
↓
实现最简单
2. 滑动窗口
↓
只保留最近 N 条
3. 摘要记忆
↓
压缩旧聊天
4. 数据库记忆
↓
MySQL / Redis 持久化
5. 向量记忆
↓
Embedding + Vector Database
6. 用户画像
↓
保存长期重要信息
如果只是做普通聊天项目:
ChatMemory
+
Redis / MySQL
基本够用。
如果要做真正的 AI Agent:
短期记忆
+
长期向量记忆
+
用户画像
+
RAG
会更加完整。
所以,大模型所谓的“记住用户”,本质上并不是模型突然拥有了记忆。
而是:
程序负责保存、检索和管理记忆,大模型负责理解这些记忆并生成回答。