在 Spring Boot 中使用 OpenAI ChatGPT API
一、概述
在本教程中,我們將學習如何在 Spring Boot 中調用 OpenAI ChatGPT API。我們將創建一個 Spring Boot 應用程序,它將通過調用 OpenAI ChatGPT API 生成對提示的響應。
2. OpenAI ChatGPT API
在開始本教程之前,讓我們探索一下我們將在本教程中使用的 OpenAI ChatGPT API。我們將調用創建聊天完成 API來生成對提示的響應。
2.1. API 參數和身份驗證
我們來看看API的強制請求參數:
-
**model**
——這是我們將向其發送請求的模型的版本。該模型有幾個版本可用。我們將使用gpt-3.5-turbo
模型,這是該模型公開可用的最新版本 -
**messages**
——消息是對模型的提示。每條消息都需要兩個字段:role
和content
。role
字段指定消息的發送者。它將在請求中為“user”
,在響應中為“assistant”
。content
字段是實際消息
為了使用 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響應
API 響應將是一個帶有一些元數據和一個choices
字段的 JSON 對象。 choices
字段將是一個對像數組。每個對像都有一個text
字段,其中包含對提示的響應。
choices
數組中的對像數將等於請求中可選的n
參數。如果未指定n
參數,則choices
數組將包含單個對象。
這是一個示例響應:
{ "id": "chatcmpl-123", "object": "chat.completion", "created": 1677652288, "choices": [{ "index": 0, "message": { "role": "assistant", "content": "\n\nHello there, how may I assist you today?" }, "finish_reason": "stop" }], "usage": { "prompt_tokens": 9, "completion_tokens": 12, "total_tokens": 21 } }
響應中的usage
字段將包含提示和響應中使用的令牌數。這用於計算 API 調用的成本。
3.代碼示例
我們將創建一個將使用 OpenAI ChatGPT API 的 Spring Boot 應用程序。為此,我們將創建一個 Spring Boot Rest API,它接受提示作為請求參數,將其傳遞給 OpenAI ChatGPT API,並將響應作為響應主體返回。
3.1.依賴關係
首先,讓我們創建一個 Spring Boot 項目。我們需要此項目的Spring Boot Starter Web依賴項:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
3.2. DTO
接下來我們創建一個DTO對應OpenAI ChatGPT API的請求參數:
`public class ChatRequest {
private String model;
private List
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
}`
我們還定義Message
類:
`public class Message {
private String role;
private String content;
// constructor, getters and setters
}`
同樣,讓我們為響應創建一個 DTO:
`public class ChatResponse {
private List
// constructors, getters and setters
public static class Choice {
private int index;
private Message message;
// constructors, getters and setters
}
}`
3.3.控制器
接下來,讓我們創建一個控制器,它將接受提示作為請求參數並將響應作為響應主體返回:
`@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
註釋來注入我們將在下一節中創建的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;
}
}`
在這裡,我們向基礎RestTemplate
添加了一個攔截器並添加了Authorization
標頭。
3.5.特性
最後,讓我們在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. 運行應用
我們現在可以運行該應用程序並在瀏覽器中對其進行測試:
如我們所見,應用程序生成了對提示的響應。請注意,響應可能會有所不同,因為它是由模型生成的。
5.結論
在本教程中,我們探索了 OpenAI ChatGPT API 以生成對提示的響應。我們創建了一個 Spring Boot 應用程序,它調用 API 來生成對提示的響應。