Skip to content

Spring AI 记忆机制

1. 通用思想:它在 Agent 里是什么?

记忆机制解决的是大模型“天生无状态”的问题。模型每次调用默认都像第一次见你一样,不记得前面聊了什么,也不知道任务进行到了哪一步。

从 Agent 角度看,记忆通常分两类:

  • 短期记忆:维持当前会话上下文,知道刚刚说了什么
  • 长期记忆:跨会话存储用户事实、偏好或结构化知识

Spring AI 官方主要解决的是前者,也就是会话级上下文记忆。它帮你把对话窗口管理起来,但不等于自动帮你构建完整的业务长期记忆系统。

2. Spring AI 落点:由哪些抽象和链路承载?

核心抽象

  • ChatMemory:记忆抽象,决定“保留哪些消息、什么时候淘汰”
  • ChatMemoryRepository:底层存储与读取仓库
  • MessageChatMemoryAdvisor:官方推荐的记忆注入 Advisor

记忆在请求链中的介入方式

记忆不是在模型返回之后“顺带记录一下”,而是在调用前由 Advisor 把当前会话相关消息取出来,注入到 Prompt 里,让模型在本轮推理时看到这些上下文。

高频边界

  • ChatMemory 是为了给模型保上下文,不是为了做全量聊天历史归档
  • 所有 Memory Advisor 都依赖 conversationId,漏了就会报错
  • 当前官方实现里,工具调用中间交换的内部消息并不会自动进 Memory,这对复杂多步 Agent 是个重要边界

3. 项目口径:在我的项目里怎么落地?

在我的 [[苍穹外卖AI客服]] 项目里,我不会把 Spring AI 的 ChatMemory 直接等同于“用户记忆系统”。它更适合维持当前对话轮次上下文,比如用户刚问过哪个订单、当前这轮退单任务做到哪一步。

真正涉及业务准确性的长期记忆,我做的是双轨制:

  • 对“口味偏好、饮食习惯”这类可容忍 LLM 提炼误差的信息,可以异步让模型抽取再存
  • 对“取消订单、退款成功”这类强一致性事实,不能只依赖模型记忆提炼,而是由 Java 端直接解析 ToolResponseMessage 并写入数据库

所以我会对面试官强调:Spring AI 的 ChatMemory 对我来说是会话级短期记忆,而不是完整业务记忆系统。真正生产级的长期记忆和审计记录,仍然要靠后端的强类型存储和代码规则来兜底。


相关链接:[[AI Agent 记忆系统]] | [[上下文工程]] | [[Spring AI Tool Calling]] | [[Spring AI 与我的项目]] | [[苍穹外卖AI客服]]