Spring?AI聊天功能開發(fā)步驟
一、引入依賴
繼承父版本的springboot依賴,最好是比較新的依賴。
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.2.4</version> <relativePath/> <!-- lookup parent from repository --> </parent> <dependency> <!-- 熱部署插件--> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency>
jdk版本
<properties> <java.version>17</java.version> </properties>
springAI版本
根據(jù)官網(wǎng):Spring AI
選擇穩(wěn)定版本0.8.1
引入依賴:
<properties> <java.version>17</java.version> <spring-ai.version>0.8.1</spring-ai.version> </properties> <dependencies> <!--spring ai的starter依賴,啟動(dòng)依賴,起步依賴--> <dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-openai-spring-boot-starter</artifactId> </dependency> </dependencies> <!--相當(dāng)于是繼承一個(gè)父項(xiàng)目:spring-ai-bom父項(xiàng)目--> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-bom</artifactId> <version>${spring-ai.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
由于阿里云的倉庫還沒更新springai的maven坐標(biāo),所以需要配置其他倉庫,加入下面的依賴
快照版本是如果你使用下面這種先行版則選擇這個(gè)版本的倉庫,一般我們使用穩(wěn)定版本的maven
<!--配置本項(xiàng)目的倉庫:因?yàn)閙aven中心倉庫還沒有更新spring ai的jar包--> <repositories> <!-- <!–快照版本的倉庫–>--> <!-- <repository>--> <!-- <id>spring-snapshot</id>--> <!-- <name>Spring Snapshots</name>--> <!-- <url>https://repo.spring.io/snapshot</url>--> <!-- <releases>--> <!-- <enabled>false</enabled>--> <!-- </releases>--> <!-- </repository>--> <!--里程碑版本的倉庫--> <repository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>https://repo.spring.io/milestone</url> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories>
二、寫配置
在自己的yml文件里面配置springAI的信息
server: port: 8080 spring: application: name: #寫自己的項(xiàng)目名 ai: openai: # api-key: sk-xxx #寫自己的key ## 可以寫直接地址,也可以寫中轉(zhuǎn)地址(鏡像地址) # base-url: https://api.openai.com api-key: sk-xxx #寫自己的key #這個(gè)是我在淘寶買的key,一般配上中轉(zhuǎn)地址 base-url: https://apikeyplus.com/ #這個(gè)是我買的淘寶中轉(zhuǎn)地址 chat: options: model: gpt-3.5-turbo #版本 temperature: 0.3F #溫度 mvc: async: request-timeout: -1
這里提示一下用買的中轉(zhuǎn)地址不用科學(xué)上網(wǎng)也可以使用。
在這里我遇到了一個(gè)問題,不知道為什么我用自己的chatgpt3賬號(hào)去官網(wǎng)申請了一個(gè)key,但是卻用不了那個(gè)key,加上魔法也訪問不了會(huì)超時(shí),有大佬會(huì)解決可以留言一下!?。?/strong>
報(bào)錯(cuò)信息部分如下:I/O error on POST request for "https://api.openai.com/v1/chat/completions": Connection timed out: connect] with root cause
申請地址的官方網(wǎng)址:https://platform.openai.com/api-keys
三、寫接口
@Slf4j @RestController public class ChatController { /** * spring-ai 自動(dòng)裝配的,可以直接注入使用 */ @Resource private OpenAiChatClient openAiChatClient; /** * 調(diào)用OpenAI的接口 * * @param msg 我們提的問題 * @return */ @RequestMapping(value = "/ai/chat") public String chat(@RequestParam(value = "msg",defaultValue = "給我講一個(gè)笑話") String msg) { log.info("發(fā)送的消息是:{}",msg); String call = openAiChatClient.call(msg); log.info("返回的消息是:{}",call); return call; } /** * 調(diào)用OpenAI的接口 * * @param msg 我們提的問題 * @return */ @RequestMapping(value = "/ai/chat2") public Object chat2(@RequestParam(value = "msg") String msg) { ChatResponse chatResponse = openAiChatClient.call(new Prompt(msg)); return chatResponse.getResult().getOutput().getContent(); } /** * 調(diào)用OpenAI的接口 * * @param msg 我們提的問題 * @return */ @RequestMapping(value = "/ai/chat3") public Object chat3(@RequestParam(value = "msg") String msg) { //可選參數(shù)在配置文件中配置了,在代碼中也配置了,那么以代碼的配置為準(zhǔn),也就是代碼的配置會(huì)覆蓋掉配置文件中的配置 ChatResponse chatResponse = openAiChatClient.call(new Prompt(msg, OpenAiChatOptions.builder() //.withModel("gpt-4-32k") //gpt的版本,32k是參數(shù)量,參數(shù)量越大回答的問題質(zhì)量會(huì)越好,準(zhǔn)確率會(huì)越高 .withTemperature(0.4F) //溫度越高,回答得比較有創(chuàng)新性,但是準(zhǔn)確率會(huì)下降,溫度越低,回答的準(zhǔn)確率會(huì)更好 .build())); return chatResponse.getResult().getOutput().getContent(); } /** * 調(diào)用OpenAI的接口 * 流式訪問,一個(gè)一個(gè)字的輸出 * @param msg 我們提的問題 * @return */ @RequestMapping(value = "/ai/chat4") public Object chat4(@RequestParam(value = "msg") String msg) { //可選參數(shù)在配置文件中配置了,在代碼中也配置了,那么以代碼的配置為準(zhǔn),也就是代碼的配置會(huì)覆蓋掉配置文件中的配置 Flux<ChatResponse> flux = openAiChatClient.stream(new Prompt(msg, OpenAiChatOptions.builder() //.withModel("gpt-4-32k") //gpt的版本,32k是參數(shù)量 .withTemperature(0.4F) //溫度越高,回答得比較有創(chuàng)新性,但是準(zhǔn)確率會(huì)下降,溫度越低,回答的準(zhǔn)確率會(huì)更好 .build())); flux.toStream().forEach(chatResponse -> { System.out.println(chatResponse.getResult().getOutput().getContent()); }); return flux.collectList(); //數(shù)據(jù)的序列,一序列的數(shù)據(jù),一個(gè)一個(gè)的數(shù)據(jù)返回 } }
測試:http://localhost:8080/ai/chat3?msg=java是什么
四、問題
最后還是希望有大佬能解決我上面寫配置那邊的問題(自己搞的key科學(xué)上網(wǎng)也會(huì)報(bào)錯(cuò))?。。?/p>
到此這篇關(guān)于Spring AI聊天功能開發(fā)的文章就介紹到這了,更多相關(guān)Spring AI聊天功能開發(fā)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java wait和notifyAll實(shí)現(xiàn)簡單的阻塞隊(duì)列
這篇文章主要介紹了Java wait和notifyAll實(shí)現(xiàn)簡單的阻塞隊(duì)列,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-10-10Classloader隔離技術(shù)在業(yè)務(wù)監(jiān)控中的應(yīng)用詳解
這篇文章主要為大家介紹了Classloader隔離技術(shù)在業(yè)務(wù)監(jiān)控中的應(yīng)用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08詳解Spring Boot Oauth2緩存UserDetails到Ehcache
這篇文章主要介紹了詳解Spring Boot Oauth2緩存UserDetails到Ehcache,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-08-08如何利用 Either 和 Option 進(jìn)行函數(shù)式錯(cuò)誤處理
這篇文章主要介紹了如何利用 Either 和 Option 進(jìn)行函數(shù)式錯(cuò)誤處理。在 Java 中,錯(cuò)誤的處理在傳統(tǒng)上由異常以及創(chuàng)建和傳播異常的語言支持進(jìn)行。但是,如果不存在結(jié)構(gòu)化異常處理又如何呢?,需要的朋友可以參考下2019-06-06