1733 字
约 5 分钟
5
大模型记忆怎么做?开发中常见的 5 种实现方式

大模型记忆怎么做?开发中常见的 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

会更加完整。

所以,大模型所谓的“记住用户”,本质上并不是模型突然拥有了记忆。

而是:

程序负责保存、检索和管理记忆,大模型负责理解这些记忆并生成回答。

大模型记忆怎么做?开发中常见的 5 种实现方式
http://www.clxhxhhr.top/posts/613/
作者
clxstart
发布于
2026-09-14
许可协议
CC BY-NC-SA 4.0
评论
0 条
还没有评论,先写一条吧。