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

如何在?Spring?Boot?中使用?OpenAI?ChatGPT?API

 更新時(shí)間:2023年08月24日 10:46:02   作者:江帥帥  
這篇文章主要介紹了如何在Spring?Boot中使用OpenAI?ChatGPT?API,我們探索了 OpenAI ChatGPT API 以生成對(duì)提示的響應(yīng),我們創(chuàng)建了一個(gè) Spring Boot 應(yīng)用程序,它調(diào)用 API 來(lái)生成對(duì)提示的響應(yīng),需要的朋友可以參考下

1、開(kāi)始咯

我們來(lái)看看如何在 Spring Boot 中調(diào)用 OpenAI ChatGPT API。

我們將創(chuàng)建一個(gè) Spring Boot 應(yīng)用程序,該應(yīng)用程序?qū)⑼ㄟ^(guò)調(diào)用 OpenAI ChatGPT API 生成對(duì)提示的響應(yīng)。

2、OpenAI ChatGPT API

在開(kāi)始具體講解之前,讓我們先探討一下我們將在本教程中使用的 OpenAI ChatGPT API。我們將調(diào)用創(chuàng)建聊天完成 API 來(lái)生成對(duì)提示的響應(yīng)。

2.1 API 參數(shù)與認(rèn)證

我們看一下API的強(qiáng)制請(qǐng)求參數(shù):

  • model:這是我們將向其發(fā)送請(qǐng)求的模型的版本。該模型有幾個(gè)版本可用。我們將使用 gpt-3.5-turbo 模型,這是該模型公開(kāi)的最新版本;
  • message:消息是對(duì)模型的提示。每條消息都需要兩個(gè)字段:角色和內(nèi)容。角色字段指定消息的發(fā)送者。請(qǐng)求中它將是“用戶(hù)”,響應(yīng)中它將是“助手”。內(nèi)容字段是實(shí)際的消息。

為了使用 API 進(jìn)行身份驗(yàn)證,我們將生成一個(gè) OpenAI API 密鑰。我們將在調(diào)用 API 時(shí)在 Authorization 標(biāo)頭中設(shè)置此密鑰。

cURL 格式的示例請(qǐng)求如下所示:

$ curl https://api.openai.com/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d '{
    "model": "gpt-3.5-turbo",
    "messages": [{"role": "user", "content": "Hello!"}]
  }'

此外,該 API 還接受許多可選參數(shù)來(lái)修改響應(yīng)。

接著,我們將重點(diǎn)關(guān)注一個(gè)簡(jiǎn)單的請(qǐng)求,但讓我們看一下一些有助于調(diào)整響應(yīng)的可選參數(shù):

  • n:如果我們想增加生成的響應(yīng)數(shù)量,可以指定。默認(rèn)值為 1;
  • temperature:控制響應(yīng)的隨機(jī)性。默認(rèn)值為 1(最隨機(jī));
  • max_tokens:用于限制響應(yīng)中令牌的最大數(shù)量。默認(rèn)值是無(wú)窮大,這意味著響應(yīng)將與模型可以生成的一樣長(zhǎng)。一般來(lái)說(shuō),最好將此值設(shè)置為合理的數(shù)字,以避免生成很長(zhǎng)的響應(yīng)并產(chǎn)生很高的成本。

2.2 API Response

API 響應(yīng)將是一個(gè)帶有一些元數(shù)據(jù)和選擇字段的 JSON 對(duì)象。選擇字段將是一個(gè)對(duì)象數(shù)組。每個(gè)對(duì)象都有一個(gè)文本字段,其中包含對(duì)提示的響應(yīng)。

選擇數(shù)組中的對(duì)象數(shù)量將等于請(qǐng)求中的可選 n 參數(shù)。如果未指定 n 參數(shù),則選項(xiàng)數(shù)組將包含單個(gè)對(duì)象。

具體代碼:

{
  "id": "chatcmpl-123",
  "object": "chat.completion",
  "created": 1677652288,
  "choices": [{
    "index": 0,
    "message": {
      "role": "assistant",
      "content": "\n\n 來(lái)啦,老弟……"
    },
    "finish_reason": "stop"
  }],
  "usage": {
    "prompt_tokens": 9,
    "completion_tokens": 12,
    "total_tokens": 21
  }
}

響應(yīng)中的使用字段將包含提示和響應(yīng)中使用的令牌數(shù)量。這用于計(jì)算 API 調(diào)用的成本。

3、具體案例

我們將創(chuàng)建一個(gè)使用 OpenAI ChatGPT API 的 Spring Boot 應(yīng)用程序。

為此,我們將創(chuàng)建一個(gè) Spring Boot Rest API,該 API 接受提示作為請(qǐng)求參數(shù),將其傳遞給 OpenAI ChatGPT API,并將響應(yīng)作為響應(yīng)正文返回。

3.1 添加依賴(lài)

首先,我們創(chuàng)建一個(gè) Spring Boot 項(xiàng)目。我們需要該項(xiàng)目的 Spring Boot Starter Web 依賴(lài):

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

3.2 DTO

接下來(lái),我們創(chuàng)建一個(gè)與 OpenAI ChatGPT API 的請(qǐng)求參數(shù)對(duì)應(yīng)的 DTO:

public class ChatRequest {
    private String model;
    private List<Message> messages;
    private int n;
    private double temperature;
    public ChatRequest(String model, String prompt) {
        this.model = model;
        this.messages = new ArrayList<>();
        this.messages.add(new Message("user", prompt));
    }
    // getters and setters
}

繼續(xù)定義 Message 類(lèi):

public class Message {
    private String role;
    private String content;
    // constructor, getters and setters
}

然后,我們?yōu)轫憫?yīng)創(chuàng)建一個(gè) DTO:

public class ChatResponse {
    private List<Choice> choices;
    // constructors, getters and setters
    public static class Choice {
        private int index;
        private Message message;
        // constructors, getters and setters
    }
}

3.3 控制器

我們創(chuàng)建一個(gè)控制器,它將接受提示作為請(qǐng)求參數(shù)并返回響應(yīng)作為響應(yīng)正文:

@RestController
public class ChatController {
    @Qualifier("openaiRestTemplate")
    @Autowired
    private RestTemplate restTemplate;
    @Value("${openai.model}")
    private String model;
    @Value("${openai.api.url}")
    private String apiUrl;
    @GetMapping("/chat")
    public String chat(@RequestParam String prompt) {
        // create a request
        ChatRequest request = new ChatRequest(model, prompt);
        // call the API
        ChatResponse response = restTemplate.postForObject(apiUrl, request, ChatResponse.class);
        if (response == null || response.getChoices() == null || response.getChoices().isEmpty()) {
            return "No response";
        }
        // return the first response
        return response.getChoices().get(0).getMessage().getContent();
    }
}

分析一下代碼中一些重要部分:

  • 我們使用 @Qualifier 注釋來(lái)注入我們將在下一節(jié)中創(chuàng)建的 RestTemplate bean;
  • 使用 RestTemplate bean,我們使用 postForObject() 方法調(diào)用 OpenAI ChatGPT API。 postForObject() 方法將 URL、請(qǐng)求對(duì)象和響應(yīng)類(lèi)作為參數(shù);
  • 最后,我們讀取回復(fù)的選擇列表并返回第一個(gè)回復(fù)。

3.4 RestTemplate

我們定義一個(gè)自定義 RestTemplate bean,它將使用 OpenAI API 密鑰進(jìn)行身份驗(yàn)證:

@Configuration
public class OpenAIRestTemplateConfig {
    @Value("${openai.api.key}")
    private String openaiApiKey;
    @Bean
    @Qualifier("openaiRestTemplate")
    public RestTemplate openaiRestTemplate() {
        RestTemplate restTemplate = new RestTemplate();
        restTemplate.getInterceptors().add((request, body, execution) -> {
            request.getHeaders().add("Authorization", "Bearer " + openaiApiKey);
            return execution.execute(request, body);
        });
        return restTemplate;
    }
}

3.5 Properties

在 application.properties 文件中提供 API 的屬性:

openai.model=gpt-3.5-turbo
openai.api.url=https://api.openai.com/v1/chat/completions
openai.api.key=your-api-key

然后,就可以運(yùn)行程序了。

4、總結(jié)

我們探索了 OpenAI ChatGPT API 以生成對(duì)提示的響應(yīng)。我們創(chuàng)建了一個(gè) Spring Boot 應(yīng)用程序,它調(diào)用 API 來(lái)生成對(duì)提示的響應(yīng)。

到此這篇關(guān)于如何在 Spring Boot 中使用 OpenAI ChatGPT API的文章就介紹到這了,更多相關(guān)Spring Boot使用 OpenAI ChatGPT API內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • springboot+vue3無(wú)感知刷新token實(shí)戰(zhàn)教程

    springboot+vue3無(wú)感知刷新token實(shí)戰(zhàn)教程

    本文介紹了基于Spring Boot和Vue3的無(wú)感知刷新Token的實(shí)現(xiàn),包括后端token構(gòu)造和刷新邏輯,以及前端的請(qǐng)求處理和緩存機(jī)制
    2025-03-03
  • Java?超詳細(xì)講解字符流

    Java?超詳細(xì)講解字符流

    字符流就是在字節(jié)流的基礎(chǔ)上,加上編碼,形成的數(shù)據(jù)流,字符流出現(xiàn)的意義是因?yàn)樽止?jié)流在操作字符時(shí),可能會(huì)有中文導(dǎo)致的亂碼,所以由字節(jié)流引申出了字符流
    2022-04-04
  • Eclipse中創(chuàng)建Web項(xiàng)目最新方法(2023年)

    Eclipse中創(chuàng)建Web項(xiàng)目最新方法(2023年)

    在Java開(kāi)發(fā)人員中,最常用的開(kāi)發(fā)工具應(yīng)該就是Eclipse,下面這篇文章主要給大家介紹了關(guān)于Eclipse中創(chuàng)建Web項(xiàng)目2023年最新的方法,需要的朋友可以參考下
    2023-09-09
  • Java如何在 Word 中設(shè)置上、下標(biāo)

    Java如何在 Word 中設(shè)置上、下標(biāo)

    這篇文章主要介紹了Java如何在 Word 中設(shè)置上、下標(biāo),幫助大家更好的利用Java處理文檔,感興趣的朋友可以了解下
    2020-09-09
  • Java數(shù)據(jù)結(jié)構(gòu)之圖的路徑查找算法詳解

    Java數(shù)據(jù)結(jié)構(gòu)之圖的路徑查找算法詳解

    這篇文章主要為大家詳細(xì)介紹了java數(shù)據(jù)結(jié)構(gòu)中圖的路徑查找算法,文中的示例代碼講解詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-11-11
  • SpringBoot動(dòng)態(tài)數(shù)據(jù)源連接測(cè)試的操作詳解

    SpringBoot動(dòng)態(tài)數(shù)據(jù)源連接測(cè)試的操作詳解

    這篇文章主要介紹了SpringBoot動(dòng)態(tài)數(shù)據(jù)源連接測(cè)試的操作步驟,文中通過(guò)代碼示例和圖文結(jié)合的方式給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-03-03
  • java實(shí)現(xiàn)合并單元格的同時(shí)并導(dǎo)出excel示例

    java實(shí)現(xiàn)合并單元格的同時(shí)并導(dǎo)出excel示例

    這篇文章主要給大家介紹了關(guān)于java實(shí)現(xiàn)合并單元格的同時(shí)并導(dǎo)出excel的相關(guān)資料,文中先進(jìn)行了簡(jiǎn)單的介紹,之后給出了詳細(xì)的示例代碼,相信對(duì)大家具有一定的參考價(jià)值,需要的朋友們下面來(lái)一起看看吧。
    2017-03-03
  • Reactive Programming入門(mén)概念詳解

    Reactive Programming入門(mén)概念詳解

    這篇文章主要為大家介紹了Reactive Programming入門(mén)概念詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • java實(shí)現(xiàn)文件分片上傳并且斷點(diǎn)續(xù)傳的示例代碼

    java實(shí)現(xiàn)文件分片上傳并且斷點(diǎn)續(xù)傳的示例代碼

    本文主要介紹了java實(shí)現(xiàn)文件分片上傳并且斷點(diǎn)續(xù)傳的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • SpringTask實(shí)現(xiàn)定時(shí)任務(wù)方法講解

    SpringTask實(shí)現(xiàn)定時(shí)任務(wù)方法講解

    通過(guò)重寫(xiě)Schedu lingConfigurer方法實(shí)現(xiàn)對(duì)定時(shí)任務(wù)的操作,單次執(zhí)行、停止、啟動(dòng)三個(gè)主要的基本功能,動(dòng)態(tài)的從數(shù)據(jù)庫(kù)中獲取配置的定時(shí)任務(wù)cron信息,通過(guò)反射的方式靈活定位到具體的類(lèi)與方法中
    2023-02-02

最新評(píng)論