news 2026/7/28 23:36:45

MessageWindowChatMemory、Session API与向量长期记忆怎么选?Spring AI记忆架构指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MessageWindowChatMemory、Session API与向量长期记忆怎么选?Spring AI记忆架构指南

文章摘要

Spring AI项目做多轮对话时,开发者会遇到三类“记忆”:MessageWindowChatMemory保存近期消息,Session API通过事件流和上下文压缩管理复杂Agent会话,向量长期记忆则从大量历史事实中检索相关内容。三者解决的问题不同,不能简单互相替代。本文从Token成本、工具调用、多Agent、持久化、检索准确性和合规删除等方面,给出企业项目的分层选型方法。

一、先区分四个概念

Chat History

完整聊天记录,用于页面展示、审计、分析和导出。

短期Chat Memory

模型当前上下文所需的近期消息,用于理解“继续”“第二点”等指代。

Session状态

Agent运行过程中的结构化事件,包括工具调用、检查点、人工输入、任务状态和Agent切换。

长期记忆

跨会话保存的偏好、项目事实、历史决策和重要事件。

很多系统失败,是因为把四类数据全部塞进一个消息表。

二、MessageWindowChatMemory

它维护最近N条消息:

旧消息 → 超出窗口后淘汰 近期消息 → 进入下一次模型Prompt

优点:

  • 简单;
  • 延迟低;
  • 行为清晰;
  • 容易接入ChatClient Advisor。

缺点:

  • 长对话会遗忘早期信息;
  • N条消息不等于稳定Token数;
  • 不适合复杂工具轨迹;
  • 不提供长期语义检索。

三、适用场景

适合:

  • FAQ助手;
  • 简单客服;
  • 短时技术问答;
  • 单Agent;
  • 对话通常少于几十轮。

典型架构:

Chat History数据库 +MessageWindowChatMemory +MessageChatMemoryAdvisor

四、窗口大小不要只按消息数

一条消息可能只有两个字,也可能是一份两万字报告。

应该做Token预算:

模型上下文:128K System与工具:20K RAG证据:30K 输出预留:8K 安全余量:10K 可用历史:60K

只设置maxMessages=100可能轻易超过上下文。

五、Session API解决什么问题

Session API把会话视为事件序列,而不是简单消息数组。

事件包括:

  • 用户消息;
  • 模型消息;
  • 工具调用;
  • 工具结果;
  • Agent切换;
  • 摘要;
  • 人工输入;
  • 任务状态变化。

优势:

事件溯源 上下文压缩 工具消息完整 多Agent就绪 恢复与重放

六、什么时候用Session API

适合:

  • 多步骤Agent;
  • 多Agent协作;
  • 工具调用很多;
  • 任务运行时间长;
  • 需要断点恢复;
  • 需要完整事件审计;
  • 需要人工中断与继续。

例如售前方案Agent:

读取需求 → 检索知识 → 生成提纲 → 人工确认 → 查询产品能力 → 生成方案 → 审核 → 导出文件

这不是普通窗口记忆可以完整表达的。

七、Session API的代价

  • 架构更复杂;
  • 事件Schema需要治理;
  • 存储量更大;
  • 重放需要版本兼容;
  • 压缩策略需要评测;
  • 多Agent权限更难。

简单FAQ不需要为了“先进”而使用Session API。

八、向量长期记忆

历史事实或偏好被转换为Embedding:

记忆文本 → 向量 → Vector Store

新请求到来时:

当前问题 → 检索相关记忆 → 加入Prompt

它按语义相关性取内容,而不是按时间顺序取最近消息。

九、适合什么场景

  • 跨会话偏好;
  • 长期项目背景;
  • 大量历史事件;
  • 用户画像;
  • 过去决策;
  • 相似案例。

不适合:

  • 精确订单状态;
  • 当前审批结果;
  • 余额;
  • 权限;
  • 强一致业务数据。

这些信息必须实时查询业务系统。

十、向量长期记忆的风险

1. 错误记忆永久化

模型生成的错误总结被写入长期记忆。

2. 过时记忆

用户岗位或偏好已经变化。

3. 权限泄露

其他用户或租户的记忆被召回。

4. 删除不完整

原始消息删除后,摘要和向量仍然存在。

十一、三种方案对比

维度MessageWindowSession API向量长期记忆
目标近期对话Agent事件与状态跨会话相关事实
读取方式最近N条事件重放/压缩语义检索
工具调用基础完整不适合作为轨迹
多Agent较弱可共享
Token控制窗口淘汰压缩Top K
复杂度
顺序精确精确不保证
长期保存不适合可持久化适合

十二、生产系统通常是组合

普通客服

Chat History +MessageWindow

复杂客服Agent

Chat History +Session API +上下文压缩

个人助理

Chat History +MessageWindow +长期向量记忆

多Agent项目

Session API +长期记忆 +独立业务状态

十三、长期记忆写入策略

不要把每句话都写入长期记忆。

写入前判断:

是否长期有效 是否经过用户确认 是否包含敏感信息 是否已有重复 是否需要过期

结构示例:

{"memoryId":"M1001","subjectId":"U1008","type":"PREFERENCE","content":"输出技术方案时优先给出Java示例","sourceConversationId":"C9001","confidence":0.95,"expiresAt":null}

十四、上下文压缩要结构化

长会话可以压缩为:

目标 已确认事实 关键决策 未解决问题 工具结果 下一步

示例:

{"goal":"完成客户RAG方案","confirmedFacts":["客户使用PostgreSQL","数据不能出私有云"],"decisions":["向量库选择pgvector"],"openQuestions":["并发目标尚未确认"]}

原始事件用于审计,模型只加载压缩结果和近期消息。

十五、合规删除要覆盖派生数据

用户删除会话时要检查:

原始消息 窗口Memory Session事件 摘要 向量记忆 缓存 文件 评测样本

建立source_message_idsource_conversation_id才能追踪派生数据。

十六、决策树

只需要最近对话? → MessageWindowChatMemory 需要工具轨迹、恢复和多Agent? → Session API 需要跨会话偏好和事实? → 向量长期记忆 需要页面展示和审计? → 独立Chat History

十七、推荐起步架构

多数Spring AI企业项目可以先使用:

PostgreSQL Chat History +JdbcChatMemoryRepository +MessageWindowChatMemory

出现长任务、多Agent、工具轨迹和断点恢复后,再引入Session API。

只有业务明确需要跨会话个性化时,再增加长期向量记忆。

总结

三类记忆的分工是:

MessageWindow → 最近发生了什么 Session API → Agent执行过程发生了什么 向量长期记忆 → 过去哪些事实与当前问题相关

选型关键不是谁更高级,而是业务需要时间顺序、执行状态还是语义相关性。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/28 23:35:06

HarmonyOS应用开发实战:猫猫大作战-HUD 拆成独立子组件、用 `@Prop` 接收父组件得分/时间为锚点,把 @Prop 声明与传递、单向只

前言 前面我们用 State 让数据驱动 UI,所有状态都在 Index 这一个组件里。但实战中组件要拆分——HUD、棋盘、底部栏各自独立,才好维护复用。拆分后遇到第一个问题:父组件的得分怎么传给子组件 HUD? State 只在当前组件有效&…

作者头像 李华
网站建设 2026/7/28 23:33:47

3个步骤掌握MouseClick:从零开始实现鼠标自动化点击

3个步骤掌握MouseClick:从零开始实现鼠标自动化点击 【免费下载链接】MouseClick 🖱️ MouseClick 🖱️ 是一款功能强大的鼠标连点器和管理工具,采用 QT Widget 开发 ,具备跨平台兼容性 。软件界面美观 ,操…

作者头像 李华
网站建设 2026/7/28 23:32:28

计算机毕业设计之BBS论坛系统

本系统为用户而设计制作BBS论坛系统,旨在实现BBS论坛智能化、现代化管理。本BBS论坛自动化系统的开发和研制的最终目的是将BBS论坛的运作模式从手工记录数据转变为网络信息查询管理,从而为现代管理人员的使用提供更多的便利和条件。使BBS论坛系统数字化、…

作者头像 李华
网站建设 2026/7/28 23:32:18

Codex本地部署与DeepSeek接入:图形化配置实现AI编程助手低成本化

最近在折腾 AI 编程工具,发现 Codex 确实好用,但默认只能用 OpenAI 的模型,对国内开发者来说,账号、网络、费用都是不小的门槛。有没有办法让它用上 DeepSeek 这类国内模型呢?答案是肯定的。经过一番摸索,我整理了一套完整的 Codex 本地部署与 DeepSeek 接入方案,全程图…

作者头像 李华