SpringBoot 整合 ChatGPT API 項(xiàng)目實(shí)戰(zhàn)
-
一、準(zhǔn)備工作
-
二、補(bǔ)全接口示例
-
三、申請(qǐng)API-KEY
-
四、JavaScript調(diào)用API
-
五、SpringBoot使用ChatGPT API
體驗(yàn)到了ChatGPT的強(qiáng)大之后,那么我們會(huì)想,如果我們想基于ChatGPT開發(fā)一個(gè)自己的聊天機(jī)器人,這個(gè)能搞定嗎?
ChatGPT平臺(tái)已經(jīng)為技術(shù)提供了一個(gè)入口了,很簡(jiǎn)單的就是實(shí)現(xiàn)了。
一、準(zhǔn)備工作
(1)已成功注冊(cè) OpenAI 的賬號(hào)。
(2)創(chuàng)建 API KEY,這個(gè) API KEY 是用于 HTTP 請(qǐng)求身份驗(yàn)證的,可以創(chuàng)建多個(gè)。注意這個(gè)創(chuàng)建之后需要馬上復(fù)制好保存,關(guān)閉彈框之后就看不到了。
(3)官方 API 文檔鏈接:
https://platform.openai.com/docs/api-reference/authentication
(4)注意 API 調(diào)用是收費(fèi)的,但是 OpenAI 已經(jīng)為我們免費(fèi)提供了18美元的用量,足夠大家放心使用。
二、補(bǔ)全接口示例
該接口功能較多,支持最常用的問答功能。
(1)請(qǐng)求方式,Post
(2)url:https://api.openai.com/v1/completions
(3)請(qǐng)求體 (json)。
{
??"model": "text-davinci-003",
??"prompt": "Say this is a test",
??"max_tokens": 7,
??"temperature": 0,
??"top_p": 1,
??"n": 1,
??"stream": false
}
(4)接口文檔
https://platform.openai.com/docs/api-reference/completions/create
請(qǐng)求參數(shù)解析:
字段 | 說明 |
model | 可選參數(shù)。語言模型,這里選擇的是text-davinci-003 |
prompt | 必選參數(shù)。即用戶的輸入。 |
max_tokens | 可選參數(shù),默認(rèn)值為 16。最大分詞數(shù),會(huì)影響返回結(jié)果的長度。 |
temperature | 可選參數(shù),默認(rèn)值為 1,取值 0-2。該值越大每次返回的結(jié)果越隨機(jī),即相似度越小。 |
top_p | 可選參數(shù),與temperature類似。 |
n | 可選參數(shù),默認(rèn)值為 1。表示對(duì)每條prompt生成多少條結(jié)果。 |
stream | 可選參數(shù),默認(rèn)值為false。表示是否回流部分結(jié)果。 |
三、申請(qǐng)API-KEY
訪問地址:
https://platform.openai.com/account/api-keys
登錄賬號(hào),然后創(chuàng)建API KEY:
這個(gè) API KEY 是用于 HTTP 請(qǐng)求身份驗(yàn)證的,可以創(chuàng)建多個(gè)。注意這個(gè)創(chuàng)建之后需要馬上復(fù)制好保存,關(guān)閉彈框之后就看不到了。
四、JavaScript調(diào)用API
直接可以使用js+html開發(fā)一個(gè)對(duì)話,具體的源碼如下:
<!doctype html>
<html class="no-js" lang="">
???<head>
??????<meta charset="utf-8">
??????<meta http-equiv="x-ua-compatible" content="ie=edge">
??????<title>Ai - Chat</title>
??????<meta name="description" content="">
??????<meta name="viewport" content="width=device-width, initial-scale=1">
??????<style>
?????????#chatgpt-response {
????????????font-family: "宋體";
????????????font-size: 20px;
????????????color: #0000FF;
????????????font-weight: bold;
?????????}
</style>
??????<script>
?????????async function callCHATGPT() {
????????????var responseText1 = document.getElementById("chatgpt-response");
????????????responseText1.innerHTML = ""
????????????function printMessage(message) {
???????????????var responseText = document.getElementById("chatgpt-response");
???????????????var index = 0;
???????????????// 創(chuàng)建一個(gè)定時(shí)器,每隔一段時(shí)間打印一個(gè)字符
???????????????var interval = setInterval(function() {
?????????????????????responseText.innerHTML += message[index];
?????????????????????index++;
?????????????????????// 當(dāng)打印完成時(shí),清除定時(shí)器
?????????????????????if (index >= message.length) {
????????????????????????clearInterval(interval);
?????????????????????}
??????????????????},
??????????????????150); // 每隔50毫秒打印一個(gè)字符
????????????}
????????????var xhr = new XMLHttpRequest();
????????????var url = "https://api.openai.com/v1/completions";
????????????xhr.open("POST", url, true);
????????????xhr.setRequestHeader("Content-Type", "application/json");
????????????xhr.setRequestHeader("Authorization", "Bearer API-KEY");
????????????xhr.onreadystatechange = function() {
???????????????if (xhr.readyState === 4 && xhr.status === 200) {
??????????????????var json = JSON.parse(xhr.responseText);
??????????????????var response = json.choices[0].text;
??????????????????// 將CHATGPT的返回值輸出到文本框
??????????????????var responseText = document.getElementById("chatgpt-response");
??????????????????var index = 0;
??????????????????// 創(chuàng)建一個(gè)定時(shí)器,每隔一段時(shí)間打印一個(gè)字符
??????????????????var interval = setInterval(function() {
????????????????????????responseText.innerHTML += response[index];
????????????????????????index++;
????????????????????????// 當(dāng)打印完成時(shí),清除定時(shí)器
????????????????????????if (index >= response.length) {
???????????????????????????clearInterval(interval);
????????????????????????}
?????????????????????},
?????????????????????50); // 每隔50毫秒打印一個(gè)字符
???????????????}
????????????};
????????????var data = JSON.stringify({
???????????????"prompt": document.getElementById("chat-gpt-input").value,
???????????????"max_tokens": 2048,
???????????????"temperature": 0.5,
???????????????"top_p": 1,
???????????????"frequency_penalty": 0,
???????????????"presence_penalty": 0,
???????????????"model": "text-davinci-003"
????????????});
????????????console.log(data);
????????????await printMessage('正在思考,請(qǐng)等待......');
????????????await xhr.send(data);
?????????}
</script>
???</head>
???<body>
??????<div class="filter-menu text-center mb-40">
?????????<h4>與Ai對(duì)話,請(qǐng)描述您的需求-支持中文、英語、日本語等</h4>
??????</div>
??????<textarea class="form-control" id="chat-gpt-input" placeholder="輸入描述" rows="3" resize="none"
?????????style="width: 135%; margin: 0 auto; background-color: #f4f4f4; color: #333; border: 1px solid #ccc; border-radius: 12px;"></textarea>
??????<button onclick="callCHATGPT()" autocomplete="off" class="btn btn-large" href="#"
?????????style="background-color: #333; color: #f4f4f4; border-radius: 10px">
?????????<span class="spinner-border spinner-border-sm" role="status" aria-hidden="true"></span>回答
??????</button>
??????<textarea class="form-control" id="chatgpt-response"
?????????placeholder="請(qǐng)耐心等待回答 Ai生成它很快,但是由于網(wǎng)絡(luò)問題我們需要等待,通常內(nèi)容越長等待越久 如果長時(shí)間沒反應(yīng)請(qǐng)刷新頁面重試" rows="26" resize="none"
?????????style="width: 150%;height: auto; margin: 0 auto; background-color: #f4f4f4; color: #333; border: 1px solid #ccc; border-radius: 10px; overflow: scroll;"
?????????readonly="true"></textarea>
注意:需要替換自己的api-key,修改這一行代碼:
xhr.setRequestHeader("Authorization", "Bearer API-KEY")。
運(yùn)行一下html,看下效果:
五、SpringBoot使用ChatGPT API
(1)構(gòu)建一個(gè)Spring Boot項(xiàng)目,這里使用的是2.7.6版本;
(2)引入依賴:
<dependency>
????<groupId>com.theokanning.openai-gpt3-java</groupId>
????<artifactId>service</artifactId>
????<version>0.10.0</version>
</dependency>
官網(wǎng)鏈接地址:https://platform.openai.com/docs/libraries/community-libraries
(3)請(qǐng)求代碼:
String token = "API-KEY ";//System.getenv("OPENAI_TOKEN");
OpenAiService service = new OpenAiService(token);
CompletionRequest completionRequest = CompletionRequest.builder()
????????.model("text-davinci-003")
????????.prompt("今天天氣怎么樣?")
????????.temperature(0.5)
????????.maxTokens(2048)
????????.topP(1D)
????????.frequencyPenalty(0D)
????????.presencePenalty(0D)
????????.build();
service.createCompletion(completionRequest).getChoices().forEach(System.out::println);
請(qǐng)?zhí)鎿QAPI-KEY。
運(yùn)行程序:
我就是我,是顏色不一樣的煙火。文章來源:http://www.zghlxwxcb.cn/news/detail-419062.html
我就是我,是與眾不同的小蘋果。文章來源地址http://www.zghlxwxcb.cn/news/detail-419062.html
到了這里,關(guān)于SpringBoot 整合 ChatGPT API 項(xiàng)目實(shí)戰(zhàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!