Spring AI(5) :对话机器人-会话记忆 本章代码已分享至Gitee:https://gitee.com/lengcz/ai-study.git文章目录会话记忆配置cors 跨域如何实现会话记忆遇到的问题跨域问题会话记忆大模型是不具备记忆功能的要想让大模型记住之前聊天的内容唯一的办法就是把之前聊天的内容与新的提示词一起发给大模型。openAI 请求大模型assistant 就是大模型回复的消息配置cors 跨域由于前端网页和后端接口不在同一个域名和端口所以这里就涉及到跨域问题需要先配置允许跨域。ConfigurationpublicclassWebMvcConfigurationimplementsWebMvcConfigurer{OverridepublicvoidaddCorsMappings(org.springframework.web.servlet.config.annotation.CorsRegistryregistry){registry.addMapping(/**).allowedOrigins(*).allowedMethods(GET,POST,PUT,DELETE,OPTIONS).allowedHeaders(*);}}如何实现会话记忆定义会话存储方式spring AI 为我们定义了存储会话的接口spring AI 已经提供了一个默认的会话会话记忆InMemoryChatMemory配置会话记忆AdvisorBeanpublicChatMemorychatMemory(){returnnewInMemoryChatMemory();}BeanpublicChatClientchatClient(OllamaChatModelollamaChatModel){returnChatClient.builder(ollamaChatModel).defaultSystem(你是一个热心的智能助手你的名字叫小可爱请以小可爱的名义回答用户的问题。).defaultAdvisors(newSimpleLoggerAdvisor(),newMessageChatMemoryAdvisor(chatMemory()))//环绕增强,SimpleLoggerAdvisor 用于简单日志.build();}添加会话id让前端传入chatId不同会话使用不同的chatId这样就可以区分不同会话的聊天了。RequestMapping(value/stream_chat,producestext/html;charsetutf-8;)publicFluxStringstream_chat(Stringprompt,StringchatId){returnchatClient.prompt().user(prompt).advisors(a-a.param(CHAT_MEMORY_CONVERSATION_ID_KEY,chatId)).stream().content();//stream() 表示流式输出}启动服务器测试第一个会话聊天中AI记住了上文的苹果数量。而后面新开的会话聊天中显然并不知道分什么这样就实现了会话记忆和会话的隔离。这里将前端页面放在了同一个工程仅是方便demo运行。访问前端http://localhost:8080/aichat.html遇到的问题跨域问题注意配置跨域。