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();}

在這里插入圖片描述

第三步、添加會話ID

異常處理

1、InMemoryChatMemory 無法解析

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

import org.springframework.ai.chat.memory.ChatMemory;@Autowired
private ChatMemory chatMemory;

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/87121.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/87121.shtml
英文地址,請注明出處:http://en.pswp.cn/web/87121.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Python3完全新手小白的學習手冊 10 文件和異常

文章目錄 讀取文件讀取文件的全部內容 相對路徑和絕對路徑訪問文件中的各行使用文件的內容包含100萬位的大型文件圓周率值中包含你的生日嗎&#xff1f; 寫入文件寫入一行寫入多行 異常處理ZeroDivisionError異常使用try-except代碼塊else代碼塊處理FileNotFoundError異常分析文…

VC Spyglass:工具簡介

相關閱讀 VC Spyglasshttps://blog.csdn.net/weixin_45791458/category_12828932.html?spm1001.2014.3001.5482 傳統上&#xff0c;基于仿真的動態驗證技術一直是功能驗證的核心方式。隨著現代SoC設計日益復雜&#xff0c;靜態驗證技術的引入變得愈發重要。 Synopsys的 VC Sp…

AWS RDS Aurora全局數據庫轉區域數據庫實戰指南:無縫遷移零停機

Aurora全局數據庫是AWS提供的跨區域高可用解決方案,但在某些場景下,我們需要將其轉換為普通區域數據庫。本文將詳細介紹這一轉換過程,并分享關鍵技術要點和實戰經驗。 一、全局數據庫與區域數據庫概述 AWS RDS Aurora全局數據庫是一種跨區域部署的數據庫架構,主要用于災備…

C++之路:函數重載與運算符重載

目錄 函數重載運算符重載C運算符重載范圍對照表注意事項 運算符重載語法全局運算符重載類內運算符重載下面以一個一元運算符為例&#xff0c;介紹特性1&#xff1a;下面介紹特性3&#xff1a;&#xff08;必須類內重載的運算符?&#xff09; 函數重載 函數重載是指同一個作用域…

七、SpringCloud 項目遷移至 K8s

七、SpringCloud 項目遷移至 K8s 文章目錄 七、SpringCloud 項目遷移至 K8s1、環境準備1.1 集群規劃1.2 SpringCloud 項目架構及遷移需求分析 2、遷移 Eureka 集群2.1 構建及容器化2.2 部署至 K8s2.3 創建通信Service 3、遷移網關服務3.1 構建及容器化3.2 部署至 K8s3.3 創建Se…

通過具有一致性嵌入的大語言模型實現端到端乳腺癌放射治療計劃制定|文獻速遞-最新論文分享

Title 題目 End-to-end breast cancer radiotherapy planning via LMMs with consistency embedding 通過具有一致性嵌入的大語言模型實現端到端乳腺癌放射治療計劃制定 01 文獻速遞介紹 近年來&#xff0c;受大型語言模型&#xff08;LLM&#xff09;啟發的新一代人工智…

MCP Chart Server服務本地部署案例

一、MCP Chart Server介紹 MCP Chart Server是一個專業的圖表生成服務&#xff0c;支持多種圖表類型&#xff0c;適用于數據可視化和分析。 MCP Chart Server是一種用于生成和呈現圖表的服務器端軟件。它提供了一個簡單而強大的方式&#xff0c;讓開發人員和系統管理員可以輕…

復合型浪涌保護器五大核心技術重構電氣防護體系

開篇&#xff1a;從傳統防護到智能守護的技術跨越 在電氣設備面臨浪涌威脅的防護場景中&#xff0c;浪涌保護器&#xff08;SPD&#xff09;始終扮演著關鍵角色。面對傳統SPD在漏電流、續流等方面的技術局限&#xff0c;行業領先企業通過技術整合開發出復合型SPD&#xff0c;以…

c# 詳細分析Task.sleep和Thread.sleep 的區別、使用場景和應用示例

文章目錄 Task.Delay vs Thread.Sleep 詳細分析與使用場景核心區別詳細分析Thread.SleepTask.Delay 性能考量綜合示例高級用法組合延遲與超時實現指數退避重試 總結建議 Task.Delay vs Thread.Sleep 詳細分析與使用場景 核心區別 Task.Delay 和 Thread.Sleep 都用于在代碼中引…

Vue 3 中的 `h` 函數詳解

h 函數是 Vue 3 中用于創建**虛擬 DOM 節點(VNode)**的核心函數&#xff0c;它是 Vue 渲染系統的基石。下面我將全面解釋它的作用、用法和重要性。 1. h 函數的基本概念 h 是 createVNode 的簡稱&#xff0c;來源于"hyperscript"的縮寫傳統。它的主要作用是&#x…

SoapCore 全面介紹:在 .NET Core 中實現 SOAP 服務的現代解決方案

一、什么是 SoapCore&#xff1f; 在現代微服務和 REST API 成為主流的今天&#xff0c;SOAP&#xff08;Simple Object Access Protocol&#xff09;看似已經被邊緣化&#xff0c;但在許多企業和政務系統中&#xff0c;SOAP 仍然是 重要的通信協議。特別是在金融、保險、醫療…

JDBC工具類和SQL 注入問題

在軟件開發中&#xff0c;數據庫安全與高效訪問一直是關鍵課題。本文將圍繞 SQL 注入問題的原理、解決方案&#xff0c;以及 JDBC 開發中的工具類演進和連接池技術展開探討&#xff0c;結合實際代碼示例&#xff0c;為開發者提供清晰的技術實踐指南。 SQL 注入問題的核心原理與…

2022年SEVC SCI2區,分數階蟻群算法FACA:一種基于分數階長期記憶的合作學習方法,深度解析+性能實測

目錄 1.摘要2.分數階微積分基礎知識3.分數階蟻群算法FACA4.分數階蟻群算法FACA數學證明與分析5.結果展示6.參考文獻7.代碼獲取8.算法輔導應用定制讀者交流 1.摘要 本文提出了一種新穎分數階蟻群算法&#xff08;Fractional-Order Ant Colony Algorithm&#xff0c; FACA&#…

java+vue+SpringBoo數字科技風險報告管理系統(程序+數據庫+報告+部署教程+答辯指導)

源代碼數據庫LW文檔&#xff08;1萬字以上&#xff09;開題報告答辯稿ppt部署教程代碼講解代碼時間修改工具 技術實現 開發語言&#xff1a;后端&#xff1a;Java 前端&#xff1a;vue框架&#xff1a;springboot數據庫&#xff1a;mysql 開發工具 JDK版本&#xff1a;JDK1.…

YOLOv12_ultralytics-8.3.145_2025_5_27部分代碼閱讀筆記-augment.py

augment.py ultralytics\data\augment.py 目錄 augment.py 1.所需的庫和模塊 2.class BaseTransform: 3.class Compose: 4.class BaseMixTransform: 5.class CutMix(BaseMixTransform): 6.class CopyPaste(BaseMixTransform): 7.def v8_transforms(dataset, img…

跨芯片 AI 算子庫 FlagGems 正式加入PyTorch 基金會生態項目體系

2025年北京智源大會 PyTorch Day China 論壇上&#xff0c;PyTorch 基金會執行董事 Matt White 宣布高性能通用 AI 算子庫 FlagGems 項目獲得批準&#xff0c;正式加入 PyTorch 生態項目體系。Pytorch基金會于6月26日在推特上進行了官方宣布。 作為唯一支持多種AI芯片架構的算…

vue + vue-router寫登陸驗證的同步方法和異步方法,及頁面組件的分離和后端代碼

先寫一個用vue cdn寫一個登陸驗證的小示例后端代碼 前端719.html <div id"app"><div id"loginForm">//路由層&#xff0c;登陸頁和后臺主頁<router-link to"/">Login</router-link><router-link to"/home&quo…

.netcore 一個mvc到靜態html實現

一、新建Mvc項目 Program.cs添加攔截 二、添加一個集成測試 將頁面轉為html到wwwroot下面 UnitGenHtml.cs using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Mvc.Testing; using Microsoft.VisualStudio.TestPlatform.TestHost;namespace SaaS.OfficialWeb…

實現Taro小程序+nut-ui左滑刪除效果

Taro小程序開發中&#xff0c;使用nut-ui組件&#xff0c;實現左滑刪除卡片效果&#xff08;自定義刪除按鈕樣式&#xff09; html代碼部分 <nut-swipe class"carBox" v-for"(item, index) in carList" :key"item" :ref"(el) > se…

LLM 系列(五):模型訓練篇

一個面向 Java 開發者的 Sring-Ai 示例工程項目&#xff0c;該項目是一個 Spring AI 快速入門的樣例工程項目&#xff0c;旨在通過一些小的案例展示 Spring AI 框架的核心功能和使用方法。 項目采用模塊化設計&#xff0c;每個模塊都專注于特定的功能領域&#xff0c;便于學習和…