欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring?AI聊天功能開發(fā)步驟

 更新時(shí)間:2024年04月29日 09:30:32   作者:乄bluefox  
本文給大家介紹Spring?AI聊天功能開發(fā)步驟,首先引入依賴,繼承父版本的springboot依賴,最好是比較新的依賴,結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧

一、引入依賴

繼承父版本的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

aae8a14bf78540c3a18b2617210e996c.png

<!--配置本項(xiàng)目的倉庫:因?yàn)閙aven中心倉庫還沒有更新spring ai的jar包-->
    <repositories>
<!--        &lt;!&ndash;快照版本的倉庫&ndash;&gt;-->
<!--        <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基礎(chǔ)教程之整數(shù)運(yùn)算

    Java基礎(chǔ)教程之整數(shù)運(yùn)算

    Java的整數(shù)運(yùn)算與C語言相同,遵循四則運(yùn)算規(guī)則,下面這篇文章主要給大家介紹了關(guān)于Java基礎(chǔ)教程之整數(shù)運(yùn)算的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-03-03
  • 淺談Action+Service +Dao 功能

    淺談Action+Service +Dao 功能

    下面小編就為大家?guī)硪黄獪\談Action+Service +Dao 功能。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-07-07
  • java線性表排序示例分享

    java線性表排序示例分享

    這篇文章主要介紹了java線性表排序示例,需要的朋友可以參考下
    2014-03-03
  • 深入解析Java中volatile的底層原理

    深入解析Java中volatile的底層原理

    這篇文章主要介紹了深入解析Java中volatile的底層原理,volatile關(guān)鍵字用于保證變量的可見性和禁止指令重排序,即當(dāng)一個(gè)線程修改了volatile變量的值,其他線程能夠立即看到這個(gè)變量的最新值,而不是使用緩存中的舊值,需要的朋友可以參考下
    2023-07-07
  • Java wait和notifyAll實(shí)現(xiàn)簡單的阻塞隊(duì)列

    Java wait和notifyAll實(shí)現(xiàn)簡單的阻塞隊(duì)列

    這篇文章主要介紹了Java wait和notifyAll實(shí)現(xiàn)簡單的阻塞隊(duì)列,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • Classloader隔離技術(shù)在業(yè)務(wù)監(jiān)控中的應(yīng)用詳解

    Classloader隔離技術(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

    這篇文章主要介紹了詳解Spring Boot Oauth2緩存UserDetails到Ehcache,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-08-08
  • 如何利用 Either 和 Option 進(jìn)行函數(shù)式錯(cuò)誤處理

    如何利用 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
  • Java設(shè)計(jì)模式之觀察者模式

    Java設(shè)計(jì)模式之觀察者模式

    這篇文章主要介紹了Java設(shè)計(jì)模式之觀察者模式,觀察者模式,是一種行為性模型,又叫發(fā)布-訂閱模式,他定義對(duì)象之間一種一對(duì)多的依賴關(guān)系,使得當(dāng)一個(gè)對(duì)象改變狀態(tài),則所有依賴于它的對(duì)象都會(huì)得到通知并自動(dòng)更新,需要的朋友可以參考下
    2023-11-11
  • Maven在不同的環(huán)境獲取不同配置文件的方法

    Maven在不同的環(huán)境獲取不同配置文件的方法

    這篇文章主要介紹了Maven在不同的環(huán)境獲取不同配置文件的方法,需要的朋友可以參考下
    2023-10-10

最新評(píng)論