1. 项目概述
作为一名长期从事企业级Java开发的工程师,我最近在探索如何将大语言模型(LLM)能力整合到现有系统中。在这个过程中,最让我头疼的就是如何实现像ChatGPT那样的多轮对话体验。经过几周的实践和踩坑,我总结出了三种在Spring AI中实现对话记忆(ChatMemory)的方案,从最简单的内存存储到生产级的Redis方案,希望能帮助到有同样需求的开发者。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心概念解析
2.1 为什么需要对话记忆?
大语言模型本质上是无状态的(Stateless),这意味着每次请求都是独立的。举个例子,如果你先问"Java中的Spring是什么?",接着问"它有什么优势?",模型并不知道第二个问题中的"它"指的是什么。这种体验显然不符合用户预期。
2.2 Spring AI中的记忆机制
Spring AI通过ChatMemory接口和Advisor机制优雅地解决了这个问题。其核心原理是:
- 将历史对话存储在某种介质中(内存、数据库或Redis)
- 在每次请求时,自动将相关历史记录拼接到当前问题前
- 将完整的上下文发送给模型
- 存储新的问答对供下次使用
这种机制完美模拟了人类对话中的"记忆"能力。
3. 环境准备
3.1 项目结构
我采用了Maven多模块结构:
code复制spring-ai-parent (父POM)
└── ChatMemory (子模块)
3.2 关键依赖
父POM中需要定义Spring AI和Alibaba AI的依赖管理:
xml复制<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-bom</artifactId>
<version>${spring-ai.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud.ai</groupId>
<artifactId>spring-ai-alibaba-bom</artifactId>
<version>${spring-ai-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
