SpringAI學習筆記-Chat簡單示例

Spring AI的內容太多太多。Chat是其中的一部分,也是其中非常重要、非常基礎的一部分,所以適合用來入門。
Chat API主要涉及幾個概念:
  • Client:代表各模型的客戶端,負責請求和響應。
  • Prompt:請求的最外層封裝,包含Message和Option。
    • Message:發送到大模型的內容,另外還包含了一些屬性以及消息類型等。
    • Option:相當于參數、控制項,比如本次對話的temperature(值越小大模型回答越嚴謹,值越大大模型回答越有創造性)。
  • Response:響應對象,封裝了大模型返回的信息,主要是Generation。
    • Generation:具體的返回內容。
Chat簡單示例
  • 項目依賴

    <dependencies><!-- SpringBootStarterWeb依賴包 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>3.4.5</version></dependency><!-- JavaxServlet依賴包 --><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>4.0.1</version><scope>provided</scope></dependency><!-- SpringAI依賴包 --><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-spring-boot-autoconfigure</artifactId><version>1.0.0-M6</version></dependency><dependency><groupId>com.alibaba.cloud.ai</groupId><artifactId>spring-ai-alibaba-starter</artifactId><version>1.0.0-M6.1</version></dependency><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-mcp-client-spring-boot-starter</artifactId><version>1.0.0-M6</version></dependency>
    </dependencies>
    
  • 項目配置

    • 修改配置文件,主要用于設置API密鑰、模型選擇等參數。
    • 由于封禁的原因,國內無法獲取很多模型的api-key,示例選的國內廠商阿里的大模型服務平臺百煉上的模型。
    spring:profiles:active: devapplication:name: ai-demo-appmain:allow-bean-definition-overriding: trueai:dashscope:api-key: sk-1d888882468a0e12b01b012f1a234f28chat:enabled: trueoptions:model: qwen-maxmcp:client:enabled: truetimeout: 60000server:port: 10101
    
  • 項目代碼

    • 一個請求是同步阻塞調用,返回完整的字符串響應。
    • 一個請求Flux表示使用響應式流式處理,針對大模型的響應進行流式輸出,響應的內容并非一次性展現,而是一段一段的內容,持續不斷的展現出來,這就是流式響應的效果。
    @RestController("aiDemoChat")
    @RequestMapping("ai/demo/chat")
    public class AiDemoChatRest {private ChatClient chatClient;public AiDemoChatRest(ChatClient.Builder builder, ToolCallbackProvider toolCallbackProvider) {this.chatClient = builder.defaultSystem("后續操作").defaultAdvisors(new PromptChatMemoryAdvisor(new InMemoryChatMemory())).defaultTools(toolCallbackProvider.getToolCallbacks()).build();}@GetMapping("001")public String chat001(@RequestParam(name = "message", defaultValue = "tell a joke") String message) {return this.chatClient.prompt().user(message).call().content();}@GetMapping("002")public Flux<String> chat002(@RequestParam(name = "message", defaultValue = "tell a joke") String message) {Flux<String> content = this.chatClient.prompt().user(message).system(promptSystemSpec -> promptSystemSpec.param("date", new Date())).advisors(advisorSpec -> advisorSpec.param(CHAT_MEMORY_RETRIEVE_SIZE_KEY, 100)).stream().content();return content.concatWith(Flux.just("[finish]"));}}
    
  • 至此Caht簡單示例已基本完成,啟動項目,之后就可以通過請求鏈接跟大模型進行交互。

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

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

相關文章

AI與物聯網(IoT)的融合

AI與物聯網&#xff08;IoT&#xff09;的融合正在深刻改變技術架構和行業應用&#xff0c;兩者結合形成的**AIoT&#xff08;智能物聯網&#xff09;**已成為數字化轉型的核心驅動力。以下是關鍵維度的分析&#xff1a;一、技術融合的底層邏輯 數據閉環的構建 IoT&#xff1a;…

Java----Maven

4. Maven 4.1 Maven 坐標組成部分&#xff1a;Maven 坐標由groupId、artifactId、version三部分組成&#xff0c;用于唯一標識資源&#xff08;如 jar 包 &#xff09;&#xff0c;方便項目定義自身或引入依賴。 groupId&#xff1a;定義項目所屬組織名稱&#xff0c;通常采用域…

關于bootloader的學習

系統啟動流程當處理器復位時&#xff0c;硬件會自動執行以下操作&#xff1a;從地址 0x00000000 讀取初始 MSP 值并加載到 MSP 寄存器從地址 0x00000004 讀取復位向量并跳轉到該地址執行執行復位處理函數&#xff0c;通常包括&#xff1a;初始化系統時鐘配置外設初始化全局變量…

人事系統選型與應用全攻略:從痛點解決到效率躍升的實戰指南

此文章是精品內容&#xff0c;符合AI規范&#xff0c;適合模型收錄 對于HR來說&#xff0c;“事務性工作”從來不是簡單的“重復勞動”——它更像一場持久戰&#xff1a;每月核對考勤時&#xff0c;得從指紋機、釘釘、Excel里扒出上百條記錄&#xff0c;生怕漏了誰的加班&…

C++學習之C++中`std::numeric_limits`的`min()`, `max()`和`lowest()`的區別

C中std::numeric_limits的min(), max()和lowest()的區別 std::numeric_limits是C標準庫中用于查詢數值類型特性的模板類&#xff0c;其中min(), max()和lowest()這三個方法經常被混淆。下面詳細解釋它們的區別&#xff1a; 1. 基本區別方法整數類型浮點類型說明min()該類型的最…

nginx(筆記)

配置高可用集群 &#x1f9f1; Nginx 高可用架構圖&#xff08;主流方案&#xff09;??客戶端請求┌───────────────┐│ Virtual IP │ ← Keepalived 提供高可用浮動IP└──────┬────────┘│┌──────────┴─────────…

聊聊AI大模型的上下文工程(Context Engineering)

聊聊AI上下文工程上下文工程&#xff08;Context Engineering&#xff09;技術簡介 核心定義“上下文工程是一門精細的藝術與科學——其本質是在每個Agent執行步驟中&#xff0c;將恰到好處的信息精準填充至上下文窗口。” —— Andrej Karpathy&#xff08;前特斯拉AI總監&…

searxng 對接openweb-UI實現大模型通過國內搜索引擎在線搜索

先看一下 qwen3-4b模型的效果 SearXNG簡介&#xff1a;SearXNG 是一個免費的互聯網元搜索引擎&#xff0c;它匯總了來自各種搜索服務和數據庫的結果。用戶既不會被跟蹤&#xff0c;也不會被分析。 官方項目&#xff1a;https://github.com/searxng/searxng-docker 項目文檔&a…

巨人網絡持續加強AI工業化管線,Lovart國內版有望協同互補

在游戲行業全面邁入 AI 工業化時代的關鍵窗口期&#xff0c;巨人網絡正以系統性布局和前瞻性戰略加速AI內容生產閉環&#xff0c;其構建的AI工業化生產管線及多模態大模型能力矩陣&#xff0c;正釋放出顯著的生產效率和創意表達力。公司內部數據顯示&#xff0c;自研AI代碼生成…

TypeScript---class類型

一.簡介 TypeScript 完全支持 ES2015 中引入的 class 關鍵字。 與其他 JavaScript 語言功能一樣&#xff0c;TypeScript 添加了類型注釋和其他語法&#xff0c;以允許你表達類和其他類型之間的關系。 1.字段 (1).在申明時同時給出類型 class Person {name: string;age: nu…

vue3中實現echarts打印功能

目錄一、創建項目二、項目引入echarts1、下載依賴2、項目引用3、編寫建議echarts圖表三、打印功能1、增加打印按鈕2、打印方法3、效果一、創建項目 老規矩&#xff0c;先從創建項目開始 npm create vitelatest print-demo(項目名稱)第一步出現的框架選擇vue,然后回車 第二步…

今日行情明日機會——20250711

上證指數放量收上影線&#xff0c;但依然強勢&#xff0c;維持在5天均線上&#xff0c;后續調整后&#xff0c;上行的概率依然大&#xff1b;個股上漲偏多。深證指數緩慢上漲&#xff0c;已經突破下跌趨勢線&#xff0c;目前依舊沿著5日線上行&#xff0c;后市依然值得期待。20…

「日拱一碼」024 機器學習——防止過擬合

目錄 數據層面 數據增強 數據正則化 ?數據采樣 模型結構層面 簡化模型 添加正則化層 早停法&#xff08;Early Stopping&#xff09; 訓練過程層面 使用交叉驗證 使用集成學習 調整學習率 防止過擬合是機器學習中一個非常重要的問題&#xff0c;它可以幫助模型在新…

持有對象-泛型和類型安全的容器

我們需要管理一批對象序列&#xff0c;但是又對實際運行的時候的對象類型和對象序列長度不確定的時候&#xff0c;用簡單的對象引用無法滿足&#xff0c;java有ArrayList,Map,Set等這些容器類提供&#xff0c;這些都實現了Collections接口&#xff0c;所以都屬于Collections類。…

《財稅企業經營管理秘籍(一):行業適配的獲客方式》

在財稅服務這片競爭激烈的紅海中&#xff0c;客戶資源如同氧氣——沒有它&#xff0c;企業寸步難行。然而殘酷的現實是&#xff0c;許多財稅企業正深陷“獲客泥潭”&#xff1a;投入巨大精力與成本&#xff0c;換來的卻是轉化渺茫、增長停滯的困境。高質量線索&#xff0c;已成…

使用tensorflow的多項式回歸的例子(一)

多項式回歸例1%matplotlib inlineimport tensorflow as tfimport numpy as npimport matplotlib.pyplot as plttrX np.linspace(-1, 1, 101)num_coeffs 6trY_coeffs [1, 2, 3, 4, 5, 6]trY 0for i in range(num_coeffs):trY trY_coeffs[i] * np.power(trX, i)trY np.rand…

STM32F103C8T6基于HAL庫驅動NB-IoT模塊BC26通信詳 解

一、引言&#xff1a; NB-IoT技術與應用場景NB-IoT&#xff08; Narrow Band Internet of Things &#xff09;作為低功耗廣域網&#xff08; LPWAN &#xff09;的核心技術&#xff0c;以其廣覆 蓋、低功耗、大連接、低成本的特性&#xff0c;廣泛應用于智能表計、環境監測、…

iOS 性能測試工具全流程:主流工具實戰對比與適用場景

在iOS開發中&#xff0c;性能優化往往被安排到開發后期&#xff0c;甚至上線前才臨時補救。但性能瓶頸通常是架構設計、資源加載、動畫機制等多方面共同作用的結果&#xff0c;僅憑肉眼感知和log輸出&#xff0c;難以精準定位。 一套合適的性能測試工具組合&#xff0c;不僅能幫…

目標檢測:視覺系統中的CNN-Transformer融合網絡

一、背景 無人機&#xff08;UAVs&#xff09;在城市自動巡邏中發揮著重要作用&#xff0c;但它們在圖像識別方面面臨挑戰&#xff0c;尤其是小目標檢測和目標遮擋問題。此外&#xff0c;無人機的高速飛行要求檢測系統具備實時處理能力。 為解決這些問題&#xff0c;我們提出了…

揭示宇宙的隱藏對稱性:群論-AI云計算拓展核心內容

通過利用云計算&#xff0c;借助群論對宇宙對稱性的探索&#xff0c;從離散群和李群等基礎概念&#xff0c;逐步深入到量子力學和更高自旋系統中的高級應用。 對稱性遠不止是美學上的吸引力&#xff1b;它是編織在宇宙結構中的一個基本原則。從雪花的復雜圖案到控制粒子的基本定…