代码
controller/ZhipuChatMemoryController.java
java
package org.example.controller;
import org.example.advisor.CallAdvisor1;
import org.example.advisor.CallAdvisor2;
import org.example.advisor.SimpleMessageChatMemoryAdvisor;
import org.example.entity.Book;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.client.advisor.MessageChatMemoryAdvisor;
import org.springframework.ai.chat.memory.ChatMemory;
import org.springframework.ai.chat.memory.MessageWindowChatMemory;
import org.springframework.ai.zhipuai.ZhiPuAiChatOptions;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Flux;
@RestController
@RequestMapping("/chatMemory")
public class ZhipuChatMemoryController {
// 声明 ChatClient 实例,用于与 AI 模型进行交互
private final ChatClient chatClient;
/**
* 构造函数,初始化 ChatClient 并配置聊天内存顾问
* @param builder ChatClient.Builder 实例,用于构建 ChatClient
*/
public ZhipuChatMemoryController(ChatClient.Builder builder) {
// 创建 MessageWindowChatMemory,用于管理对话历史消息窗口
MessageWindowChatMemory windowChatMemory = MessageWindowChatMemory.builder()
.build();
// 创建 MessageChatMemoryAdvisor,用于管理对话内存
MessageChatMemoryAdvisor chatMemoryAdvisor = MessageChatMemoryAdvisor.builder(windowChatMemory)
.build();
// 构建 ChatClient,设置默认Advisors
this.chatClient = builder
.defaultAdvisors(chatMemoryAdvisor)
.build();
}
/**
* 处理聊天请求
* @param question 用户问题
* @param sessionId 会话ID,用于区分不同用户的对话上下文
* @return AI 模型的响应内容
*/
@GetMapping("/messageChatMemoryAdvisor")
public String messageChatMemoryAdvisor(@RequestParam(name = "question") String question,
@RequestParam(name = "sessionId") String sessionId) {
String content = chatClient.prompt()
.user(question)
// 把会话ID存入上下文,确保对话记忆与特定会话关联
.advisors(advisorSpec -> advisorSpec.param(ChatMemory.CONVERSATION_ID, sessionId))
.call()
.content();
return content;
}
}
效果

AI可以记住我的名字
