文章目錄
- 背景
- 項目環境
- 實現步驟
- 第一步、定義會話存儲方式
- 方式一、定義記憶存儲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();}
第三步、添加會話ID
異常處理
1、InMemoryChatMemory 無法解析
原因:SpringAi 1.0.0 版本移除InMemoryChatMemory
直接注入
import org.springframework.ai.chat.memory.ChatMemory;@Autowired
private ChatMemory chatMemory;