Spring AI(5) :对话机器人-会话记忆

本章代码已分享至Gitee:https://gitee.com/lengcz/ai-study.git

文章目录

会话记忆

大模型是不具备记忆功能的,要想让大模型记住之前聊天的内容,唯一的办法就是把之前聊天的内容与新的提示词一起发给大模型。

openAI 请求大模型

assistant 就是大模型回复的消息

配置cors 跨域

由于前端网页和后端接口不在同一个域名和端口,所以这里就涉及到跨域问题,需要先配置允许跨域。

java 复制代码
@Configuration
public class WebMvcConfiguration implements WebMvcConfigurer {

    @Override
    public void addCorsMappings(org.springframework.web.servlet.config.annotation.CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedOrigins("*")
                .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
                .allowedHeaders("*");
    }
}

如何实现会话记忆

  1. 定义会话存储方式

    spring AI 为我们定义了存储会话的接口,spring AI 已经提供了一个默认的会话会话记忆InMemoryChatMemory

  2. 配置会话记忆Advisor

java 复制代码
    @Bean
    public ChatMemory chatMemory(){
        return  new InMemoryChatMemory();
    }

    @Bean
    public ChatClient chatClient(OllamaChatModel ollamaChatModel){
        return ChatClient.builder(ollamaChatModel)
                .defaultSystem("你是一个热心的智能助手,你的名字叫小可爱,请以小可爱的名义回答用户的问题。")
                .defaultAdvisors(new SimpleLoggerAdvisor()
                ,new MessageChatMemoryAdvisor(chatMemory())
                ) //环绕增强,SimpleLoggerAdvisor 用于简单日志
                .build();
    }
  1. 添加会话id,让前端传入chatId,不同会话使用不同的chatId,这样就可以区分不同会话的聊天了。
java 复制代码
    @RequestMapping(value = "/stream_chat",produces = "text/html;charset=utf-8;")
    public Flux<String> stream_chat(String prompt,String chatId) {
        return chatClient.prompt()
                .user(prompt)
                .advisors(a->a.param(CHAT_MEMORY_CONVERSATION_ID_KEY,chatId))
                .stream()
                .content(); //stream() 表示流式输出
    }

启动服务器测试,第一个会话聊天中,AI记住了上文的苹果数量。而后面新开的会话聊天中,显然并不知道分什么,这样就实现了会话记忆和会话的隔离。

这里将前端页面放在了同一个工程,仅是方便demo运行。

访问前端:http://localhost:8080/aichat.html

遇到的问题

跨域问题

注意配置跨域。

相关推荐
CappuccinoRose1 小时前
Rust学习文档(二)
开发语言·后端·学习·rust
kingwebo'sZone1 小时前
C#事件声明办法
java·前端·c#
Q渡劫1 小时前
MinIO 从下载到集成 Spring Boot 完整教程
spring boot·spring·maven
冻感糕人~1 小时前
大模型学习指南:收藏这份AI Agent四层工程地图(小白程序员必备)
java·大数据·人工智能·学习·大模型·agent·大模型学习
lymboy2 小时前
Spring AI的工具调用循环,本质就是ReAct:一次源码级拆解
人工智能·spring·react.js
一路向北North2 小时前
Spring AI(6) :对话机器人-会话历史
java·人工智能·spring
高铭杰3 小时前
万物皆可KV(1)TIDB存储布局分析
java·前端·tidb
Dovis(誓平步青云)3 小时前
《如何在CentOS 7中添加Plex官方软件源:解决文件磁盘难管理难题》
linux·运维·服务器·后端·生成对抗网络·centos
RuoyiOffice3 小时前
超级个体接私活必看:后端+前端+移动端三端一体企业管理系统怎么选(2026)
java·spring boot·vue·uniapp·全栈·企业管理·接私活