Spring Ai 如何配置以及如何搭建

Spring Ai 如何配置以及如何搭建

解釋什么是Spring ai

首先,我們用Spring ai 其實不是去了解他的LLM,以及底層用的一些東西,Spring AI,提供給我們的其實是對各種大模型快速調用,提供了大模型API的作用,Spring AI 的核心定位是提供對大模型的標準化調用接口和集成工具,而非訓練自有模型或直接管理知識庫。它的主要目標是簡化AI能力在Java應用中的接入流程,通過抽象化和模塊化設計,讓開發者能快速對接多種大模型服務。

前期工作

首先我們要加入spring ai 的依賴,如果你用的是Maven,就加入如下配置:這里為什么要單獨對spring-ai-core這個進行版本的限定,因為你可能之前引入過Spring ai ,所以為了避免版本不一致,后期我主動在倉庫刪掉了不一致的版本,不想刪的可以顯示指定。如下

<dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-model-openai</artifactId><version>1.0.0</version></dependency><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-core</artifactId><version>1.0.0</version></dependency>

目前大家應該都用的是阿里的倉庫,但是現在配了阿里的倉庫好像還是不能下載,具體可能每個人的環境不同,不能下載的通過如下路徑,到阿里倉庫搜索上面的依賴下載:
https://maven.aliyun.com/
在這里插入圖片描述
然后放到你自己本地的Maven倉庫,也不用什么命令。直接打開你的倉庫,路徑為如下,點進去看見這兩個文件了注意我的是在D盤:D:\repository\org\springframework\experimental\ai
引入之后,就直接創建一個Controller就可以了代碼如下:特別注意的是不同版本的AI實現不同,具體大家有用不同的版本可以自己搜索。1.0.0這個版本如下:
在這里插入圖片描述

private final ChatClient chatClient;  // 直接注入具體實現public TestController(ChatClient.Builder chatClientBuilder) {this.chatClient = chatClientBuilder.build();}@GetMapping("/chat")public String callAi(@RequestParam String message){return chatClient.prompt().user(message)  // 設置用戶消息.call()         // 執行調用.content();     // 獲取響應內容}

代碼簡單的調用就完成了。下面是我們的配置,如果你要調用ChatGpt,那么就得配置Gpt的key,這個和阿里大模型,通義千問(Qwen)類似,一樣得配置key
在yml中或者是你自己項目里面的配置文件中添加如下配置:api-key就是Key,base-url是代理網址

springai:openai:# OpenAI keyapi-key: base-url: # 添加超時配置chat:options:model: gpt-3.5-turbo  # 默認模型temperature: 0.7      # 控制生成隨機性
在這里插入代碼片

到此Spring ai 就配置完了。感謝大家的閱讀,謝謝,本篇博客就是在幫大家快速搭建環境,細節東西后續更新

關于大家為啥創建了chatClient報紅,說沒有這個Bean的錯誤,那是因為你引入的依賴版本不對,把你的包路徑鼠標點進去,你大概率會發現,雖然你依賴里面引入了,但是還是用的舊版本,情況一這個原因大概率就是idea緩存還是指向了舊的版本。情況二是因為你之前引入了別的版本,手動修改之后,多個版本在你的Libraries中,你可以手動將別的版本刪掉,或者清理緩存,或者是將你類中的import全部刪掉,手動引入對應版本的jar包。下面這一行會報錯!!!
private final ChatClient chatClient;

還有的是會報ChatClient.Builder,沒有Builder這個方法,也是因為上面這個原因,版本的原因。

public TestController(ChatClient.Builder chatClientBuilder) {this.chatClient = chatClientBuilder.build();}

具體我們看源碼,1.0.0這個版本就是bulider,采用了建造者模式和分層初始化的思想
在這里插入圖片描述
我們看第一個create
最簡創建創建調用(隱藏觀測系統細節)
第二個create
允許自定義觀測系統

建造者模式的應用

static Builder builder(ChatModel chatModel) {return builder(chatModel, ObservationRegistry.NOOP, null);
}static Builder builder(/*全參數*/) {return new DefaultChatClientBuilder(chatModel, registry, convention);
}

為什么Spring要這么設計?
延遲初始化:
Builder 允許在構建時(build()調用時)才真正創建客戶端
避免在Spring容器啟動階段立即連接AI服務
代替方案

// 替代方案(不推薦)
public TestController(ChatClient chatClient) {this.chatClient = chatClient;
}

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

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

相關文章

FCC認證三星XR頭顯加速全球量產,微美全息AI+AR技術引領智能眼鏡硬件創新

據悉&#xff0c;三星(SSNGY.US)XR頭顯Project Moohan目前已獲得美國FCC認證&#xff0c;FCC認證表明該款頭顯即將上市&#xff0c;之前三星財報會議也表明確認將于今年年底推出XR頭顯。此前有報道稱&#xff0c;該設備將采用索尼旗艦級 OLEDoS 顯示屏&#xff0c;像素密度高達…

洛谷P1595講解(加強版)+錯排講解

前言接我原先的文章&#xff0c;因為一場考試&#xff0c;讓我對這道題記憶深刻注&#xff1a;&#xff08;因為那道題&#xff0c;所以80分&#xff09;正文1.分析題目題目&#xff1a;某人寫了 n 封信和 n 個信封&#xff0c;如果所有的信都裝錯了信封。求所有信都裝錯信封共…

提升化工制造質量的 7 種方法

盡管化工制造屬于制造業的一個子類別&#xff0c;但它是一個廣泛的范疇&#xff0c;涵蓋了基礎化學品、樹脂和合成纖維、農藥和化肥、涂料和粘合劑&#xff0c;甚至消費類化合物&#xff08;如肥皂和清潔化學品&#xff09;等所有領域。盡管這些細分領域差異巨大&#xff0c;但…

從“數據壟斷”到“全民共建”:Dataparts如何重構智能時代的數據流通規則?

從“數據壟斷”到“全民共建”&#xff1a;Dataparts如何重構智能時代的數據流通規則&#xff1f;在杭州某科技園區的會議室里&#xff0c;一場關于“AI大模型訓練數據”的討論正在激烈進行。某頭部AI企業的技術總監指著屏幕上的“對話場景零件庫”說&#xff1a;“過去我們花3…

31 HTB Union 機器 - 中等難度

第一階段 偵查nmap掃描oxdfparrot$ nmap -p- --min-rate 10000 -oA scans/nmap-alltcp 10.10.11.128 Starting Nmap 7.80 ( https://nmap.org ) at 2021-11-19 08:29 EST Nmap scan report for 10.10.11.128 Host is up (0.092s latency). Not shown: 65534 filtered ports POR…

【數據分享】上市公司創新韌性數據(2007-2023)

數據介紹核心看點&#xff1a; 在復雜多變的市場環境中&#xff0c;企業如何通過創新維持競爭力&#xff1f;創新韌性是衡量企業在外部沖擊下保持創新活力的關鍵指標。本文分享2007-2023年上市公司創新韌性數據&#xff0c;為研究企業抗風險能力提供核心支持。數據概覽數據名稱…

服務器配置開機自啟動服務

一、配置啟動文件sudo vim /etc/systemd/system/smartailab-backend.service sudo vim /etc/systemd/system/reall3d-frontend.servicesudo vim /etc/systemd/system/Culture_Liquor-backend.servicevim /etc/systemd/system/Culture_Liquor-backend.service內容&#xff1a;[U…

Ubuntu 25.04更新了哪些內容揭秘

2025年4月,Canonical正式推出Ubuntu 25.04 版本,代號"Plucky Puffin(勇敢的海鸚)"。此次發布圍繞AI算力強化、桌面交互革新與跨架構支持三大核心方向展開,為開發者、創作者及企業用戶帶來多項突破性升級。 一、核心系統更新 systemd v257.4帶來了重要的上游更新…

PHP反序列化的CTF題目環境和做題復現第2集_POP鏈構造

1 通過pop參數get方式提交反序列信息 2 題目 http://192.168.1.8/fxl2/fxl2_pop.php <?php highlight_file(__FILE__);class a {protected $var;public function hello(){echo $this->var;} }class b {public $cla;public function __destruct(){$this->cla->…

攻防世界—fakebook(兩種方法)

一.審題這邊先進行測試&#xff0c;login和join都失敗了&#xff0c;所以沒獲取到什么消息。二.dirsearch工具掃描所以拿dirsearch掃一下&#xff0c;看看有沒有什么文件可以訪問。python3 dirsearch.py -u url可以看到當前目錄下存在flag.php,robots.txt等&#xff0c;訪問fla…

AI+物聯網如何重塑倉儲供應鏈?3個落地場景與系統架構設計思路

一、引言 在科技飛速發展的當下&#xff0c;AI與物聯網技術的融合為倉儲供應鏈領域帶來了革新契機。這種融合不僅優化了傳統運作模式&#xff0c;還催生出更智能、高效的管理方案&#xff0c;業財一體管理軟件也在其中發揮著關鍵作用。 二、AI物聯網在倉儲供應鏈的落地場景 &am…

C++ 內存管理(內存分布 , 管理方式 , new和delete實現原理)

目錄 1. C/C內存分布 練習: 2. C語言動態內存管理方式 2.1 malloc/calloc/realloc的區別 2.2 malloc的實現原理 2.3 內存塊分布與擴容 3. C動態內存管理方式 3.1 new/delete操作類內置類型 1. new操作內置類型 2. delete操作內置類型 3.2 new/delete操作類自定義類型…

1.2. qemu命令起虛擬機增加網絡配置

1. 網絡配置 常見的網絡模式分為tap網絡和基礎網絡模式兩種。 1.1. TAP網絡&#xff08;橋接模式&#xff09; 虛擬機直接接入宿主機物理網絡&#xff0c;獲得獨立IP 1.1.1. 使用tap方式起虛擬機網絡-netdev tap,idhostnet0,ifnametap0 \-device virtio-net-pci,netdevhostnet0…

分享一個Oracle表空間自動擴容與清理腳本

一、基礎環境準備&#xff08;首次執行&#xff09; -- 1. 創建表空間監控表&#xff08;存儲使用率、容量等信息&#xff09; create table monitor_tablespace_rate (tbs_name varchar2(50), -- 表空間名total_gb number, -- 總容量(GB)used_gb number, …

Flink Sql 按分鐘或日期統計數據量

一、環境版本 環境版本Flink1.17.0Kafka2.12MySQL5.7.33 【注意】Flink 1.13版本增加Cumulate Window&#xff0c;之前版本Flink Sql 沒有 Trigger 功能&#xff0c;長時間的窗口不能在中途觸發計算&#xff0c;輸出中間結果。比如每 10S 更新一次截止到當前的pv、uv。只能用T…

LeetCode 2460.對數組執行操作

給你一個下標從 0 開始的數組 nums &#xff0c;數組大小為 n &#xff0c;且由 非負 整數組成。 你需要對數組執行 n - 1 步操作&#xff0c;其中第 i 步操作&#xff08;從 0 開始計數&#xff09;要求對 nums 中第 i 個元素執行下述指令&#xff1a; 如果 nums[i] nums[i …

深入解析 @nestjs/typeorm的 forRoot 與 forFeature

nestjs/typeorm 是 NestJS 與 TypeORM 集成的官方模塊&#xff0c;提供了 forRoot() 和 forFeature() 兩個核心靜態方法用于配置數據庫連接和實體注冊。本文將深入解析這兩個方法的機制、使用場景和最佳實踐。 一、TypeOrmModule.forRoot() - 全局數據庫配置 forRoot() 方法用于…

關于simplifyweibo_4_moods數據集的分類問題

本來打算用情感分類數據集拿Transformer模型來練練手&#xff0c;發現訓練效果并不好。當我分析了這個數據集的標簽后發現問題了&#xff1a; 查看標簽的分布&#xff1a; import pandas as pd# 先直接讀取數據&#xff0c;不進行后續處理 data_file ~/data/simplifyweibo_4_m…

Custom SRP - Baked Light

https://catlikecoding.com/unity/tutorials/custom-srp/baked-light/本篇教程介紹將靜態光照烘焙到 light map 和 light prob 中.首先貼上我遇到的問題,希望遇到的同學幫忙解答:實踐本教程過程中,定義的 MetaPass 沒有效果, Unity 始終在使用默認的 meta pass,我使用的是 unit…

[Python]PTA:實驗2-3-1-for 求1到100的和

本題要求編寫程序&#xff0c;計算表達式 1 2 3 ... 100 的值。輸入格式&#xff1a;本題無輸入。輸出格式&#xff1a;按照以下格式輸出&#xff1a;sum 累加和代碼如下&#xff1a;x0 for i in range(1,101,1):xi print("sum {}".format(x))