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

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

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

1、開始咯

我們來看看如何在 Spring Boot 中調用 OpenAI ChatGPT API。

我們將創(chuàng)建一個 Spring Boot 應用程序,該應用程序將通過調用 OpenAI ChatGPT API 生成對提示的響應。

2、OpenAI ChatGPT API

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

2.1 API 參數與認證

我們看一下API的強制請求參數:

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

為了使用 API 進行身份驗證,我們將生成一個 OpenAI API 密鑰。我們將在調用 API 時在 Authorization 標頭中設置此密鑰。

cURL 格式的示例請求如下所示:

$ 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 還接受許多可選參數來修改響應。

接著,我們將重點關注一個簡單的請求,但讓我們看一下一些有助于調整響應的可選參數:

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

2.2 API Response

API 響應將是一個帶有一些元數據和選擇字段的 JSON 對象。選擇字段將是一個對象數組。每個對象都有一個文本字段,其中包含對提示的響應。

選擇數組中的對象數量將等于請求中的可選 n 參數。如果未指定 n 參數,則選項數組將包含單個對象。

具體代碼:

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

響應中的使用字段將包含提示和響應中使用的令牌數量。這用于計算 API 調用的成本。

3、具體案例

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

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

3.1 添加依賴

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

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

3.2 DTO

接下來,我們創(chuàng)建一個與 OpenAI ChatGPT API 的請求參數對應的 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 類:

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

然后,我們?yōu)轫憫獎?chuàng)建一個 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)建一個控制器,它將接受提示作為請求參數并返回響應作為響應正文:

@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 注釋來注入我們將在下一節(jié)中創(chuàng)建的 RestTemplate bean;
  • 使用 RestTemplate bean,我們使用 postForObject() 方法調用 OpenAI ChatGPT API。 postForObject() 方法將 URL、請求對象和響應類作為參數;
  • 最后,我們讀取回復的選擇列表并返回第一個回復。

3.4 RestTemplate

我們定義一個自定義 RestTemplate bean,它將使用 OpenAI API 密鑰進行身份驗證:

@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

然后,就可以運行程序了。

4、總結

我們探索了 OpenAI ChatGPT API 以生成對提示的響應。我們創(chuàng)建了一個 Spring Boot 應用程序,它調用 API 來生成對提示的響應。

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

相關文章

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

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

    本文介紹了基于Spring Boot和Vue3的無感知刷新Token的實現,包括后端token構造和刷新邏輯,以及前端的請求處理和緩存機制
    2025-03-03
  • Java?超詳細講解字符流

    Java?超詳細講解字符流

    字符流就是在字節(jié)流的基礎上,加上編碼,形成的數據流,字符流出現的意義是因為字節(jié)流在操作字符時,可能會有中文導致的亂碼,所以由字節(jié)流引申出了字符流
    2022-04-04
  • Eclipse中創(chuàng)建Web項目最新方法(2023年)

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

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

    Java如何在 Word 中設置上、下標

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

    Java數據結構之圖的路徑查找算法詳解

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

    SpringBoot動態(tài)數據源連接測試的操作詳解

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

    java實現合并單元格的同時并導出excel示例

    這篇文章主要給大家介紹了關于java實現合并單元格的同時并導出excel的相關資料,文中先進行了簡單的介紹,之后給出了詳細的示例代碼,相信對大家具有一定的參考價值,需要的朋友們下面來一起看看吧。
    2017-03-03
  • Reactive Programming入門概念詳解

    Reactive Programming入門概念詳解

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

    java實現文件分片上傳并且斷點續(xù)傳的示例代碼

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

    SpringTask實現定時任務方法講解

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

最新評論