会话记忆持久化:用数据库存住每一轮对话
作者:程序员马丁
note
Ragent AI —— 从 0 到 1 纯手工打造企业级 Agentic RAG,拒绝 Demo 玩具!AI 时代,助你拿个offer。
上一篇咱们实现了三种记忆管理策略——滑动窗口、摘要压缩、混合策略——让 Agent 在同一个会话里能在有限的 Token 预算内保留最有用的信息。记忆管理的问题解决了,但还有一个更基础的问题没有碰过:
所有记忆都存在 JVM 内存里。
这会带来几个问题:
- 进程一重启,记忆就没了。 你跑 Demo 的时候可能没感觉,但真要上线,服务一重启,所有用户的对话历史就清零了。
- 没有用户和会话的概念。 现在的
InMemoryChatMemory就是一个裸的ArrayList,如果两个用户同时用同一个 Agent 实例,消息会混在一起——用户 A 的退款记录被用户 B 看到。 - 没法回看历史。 用户关掉客服窗口再打开,之前聊过的内容就找不到了,更别说像 ChatGPT 侧边栏那样展示历史会话列表。
这三个问题的根源都是一样的:记忆没有持久化,也没有隔离。
这一篇,咱们用 PostgreSQL 把记忆写进数据库,同时引入用户和会话两个维度的隔离,让记忆在重启后依然存在、在多实例间共享、在不同用户之间隔离。
本项目中具体代码已上传 GitHub TinyAgent,大家 Clone 项目后,将代码分支切换到 1.7.x,默认主分支是最新代码。运行前复制
.env.example为.env,把自己的 API Key 填进去,默认阿里云百炼平台;.env已加入.gitignore,切分支时不会丢。