Java的SpringAI+Deepseek大模型实战-会话记忆【三】

文章目录

  • 背景
  • 项目环境
  • 实现步骤
    • 第一步、定义会话存储方式
      • 方式一、定义记忆存储ChatMemory
      • 方式二、注入记忆存储ChatMemory
    • 第二步、配置会话记忆
      • 方式一、老版本实现
      • 方式二、新版本实现
    • 第三步、添加会话ID
  • 异常处理
    • 1、InMemoryChatMemory 无法解析

背景

前两期搭建起大模型对话的框架,如何进行会话记忆

项目环境

Spring Ai 版本:1.0.0

实现步骤

第一步、定义会话存储方式

在配置类CommomConfiguration中定义记忆存储的方式,根据版本不同,可使用。

方式一、定义记忆存储ChatMemory

定义ChatMemory,并添加 Advisors
适用于【SpringAi 1.0.0.0 M6】

// 记忆存储的方式
@Bean
public ChatMemory chatMemory(){
	return new InMemoryChatMemory();
}
// 添加会话记忆
@Bean
public ChatClient chatClient(OllamaChatModel model,ChatMemory chatMemory){
    return ChatClient
            .builder(model)
            .defaultSystem("你是一个可爱热心的智能助手,你的名字叫小爱,请以小爱的口吻回答问题")
            .defaultAdvisors(
                    new SimpleLoggerAdvisor(),
                    new MessageChatMemoryAdvisor(chatMemory))
            .build();
}

方式二、注入记忆存储ChatMemory

注入ChatMemory,并添加 Advisors
适用于【SpringAi 1.0.0.0及以上版本】

// SpringAi 1.0.0 注入==ChatMemory==
@Autowired
private ChatMemory chatMemory;

@Bean
public ChatClient chatClient(OllamaChatModel model){
    return ChatClient
            .builder(model)
            .defaultSystem("你是一个可爱热心的智能助手,你的名字叫小爱,请以小爱的口吻回答问题")
            .defaultAdvisors(
                    new SimpleLoggerAdvisor(),
                    MessageChatMemoryAdvisor.builder(chatMemory).build())
            .build();
}

第二步、配置会话记忆

方式一、老版本实现

@RequestMapping(value = "/chatting",produces = "text/html;charset=utf-8")
    public Flux<String> chatting(String str,String chatId){
        return chatClient
                .prompt()
                .user(str)
                .advisors(aa -> aa.param(AbstractChatMemoryAdvisor.CHAT_MEMORY_CONVERSATION_ID_KEY,chatId))
                .stream()
                .content();
    }

方式二、新版本实现

import static org.springframework.ai.chat.memory.ChatMemory.CONVERSATION_ID;

@RequestMapping(value = "/chatting",produces = "text/html;charset=utf-8")
  public Flux<String> chatting(String str,String chatId){
      return chatClient
              .prompt()
              .user(str)
              .advisors(aa -> aa.param(CONVERSATION_ID,chatId))
              .stream()
              .content();
  }

Java的SpringAI+Deepseek大模型实战-会话记忆【三】_第1张图片

第三步、添加会话ID

异常处理

1、InMemoryChatMemory 无法解析

原因:SpringAi 1.0.0 版本移除InMemoryChatMemory
直接注入

import org.springframework.ai.chat.memory.ChatMemory;

@Autowired
private ChatMemory chatMemory;

你可能感兴趣的:(大数据,AI,软件工程)