注冊(cè)個(gè)網(wǎng)站要多少錢跟我學(xué)seo從入門到精通
1、開始咯
我們來(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
在開始具體講解之前,讓我們先探討一下我們將在本教程中使用的 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 模型,這是該模型公開的最新版本;
- message:消息是對(duì)模型的提示。每條消息都需要兩個(gè)字段:角色和內(nèi)容。角色字段指定消息的發(fā)送者。請(qǐng)求中它將是“用戶”,響應(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 添加依賴
首先,我們創(chuàng)建一個(gè) Spring Boot 項(xiàng)目。我們需要該項(xiàng)目的 Spring Boot Starter Web 依賴:
<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 類:
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 setterspublic 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")@Autowiredprivate 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 requestChatRequest request = new ChatRequest(model, prompt);// call the APIChatResponse response = restTemplate.postForObject(apiUrl, request, ChatResponse.class);if (response == null || response.getChoices() == null || response.getChoices().isEmpty()) {return "No response";}// return the first responsereturn 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)類作為參數(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)。