题目
如何持久化 Spring AI 的对话记忆,并通过会话标识隔离不同用户和对话?
答案
使用持久化的 ChatMemoryRepository 保存消息,再由 ChatMemory 实现选择本轮需要的历史,例如使用 MessageWindowChatMemory 管理窗口。关系数据库可以采用 JDBC 仓库,并通过 MessageChatMemoryAdvisor 接入调用链。
每次调用传入会话标识,例如通过 `ChatMemory.CONVERSATION_ID` 设置。该标识由服务端创建或验证,并关联租户与用户;不能让用户随意填入另一个人的会话 ID。
持久化不等于无限保存完整审计记录。窗口会裁剪消息,完整事件与业务操作状态应按需要另存。同一会话并发请求还要控制顺序,避免历史覆盖。
按 Spring AI 2.0.1 文档,JdbcChatMemoryRepository 不保存工具调用消息及工具返回消息。因此需要完整 Agent 执行恢复时,必须选择支持这些消息的存储方案或自行持久化,不能仅靠该仓库。
参考:[Spring AI Chat Memory](https://docs.spring.io/spring-ai/reference/api/chat-memory.html)。
