SpringBoot?整合ChatGPT?API項(xiàng)目實(shí)戰(zhà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ǔ)全接口示例
該接口功能較多,支持最常用的問(wèn)答功能。
(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ù)解析:
字段 說(shuō)明
model 可選參教。語(yǔ)言模型,這里選擇的是text-davinci-003
prompt 必選參數(shù)。即用戶的輸入。
max_tokens 可選參數(shù),默認(rèn)值為 16。最大分詞數(shù),會(huì)影響返回結(jié)果的長(zhǎng)度.
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
訪問(wèn)地址: 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)描述您的需求-支持中文、英語(yǔ)、日本語(yǔ)等</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ò)問(wèn)題我們需要等待,通常內(nèi)容越長(zhǎng)等待越久 如果長(zhǎng)時(shí)間沒(méi)反應(yīng)請(qǐng)刷新頁(yè)面重試" 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”)。
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>
(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);
到此這篇關(guān)于SpringBoot 整合ChatGPT API項(xiàng)目實(shí)戰(zhàn)的文章就介紹到這了,更多相關(guān)SpringBoot 整合ChatGPT API項(xiàng)目?jī)?nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Java調(diào)用ChatGPT(基于SpringBoot和Vue)實(shí)現(xiàn)可連續(xù)對(duì)話和流式輸出的ChatGPT API
- SpringBoot?整合ChatGPT?API項(xiàng)目實(shí)戰(zhàn)教程
- Java SpringBoot集成ChatGPT實(shí)現(xiàn)AI聊天
- springboot+chatgpt+chatUI Pro開發(fā)智能聊天工具的實(shí)踐
- SpringBoot整合chatGPT的項(xiàng)目實(shí)踐
- 基于ChatGPT+SpringBoot實(shí)現(xiàn)智能聊天AI機(jī)器人接口并上線至服務(wù)器的方法
- SpringBoot3.0自定stater模塊的操作流程(chatGPT提供的49種場(chǎng)景)
- SpringBoot3.0整合chatGPT的完整步驟
相關(guān)文章
Spring?+?ECharts實(shí)現(xiàn)數(shù)據(jù)可視化的案例詳解
Apache?ECharts是一個(gè)基于?JavaScript?的開源可視化圖表庫(kù),在網(wǎng)頁(yè)上實(shí)現(xiàn)數(shù)據(jù)的可視化,非常好用,本文將通過(guò)一個(gè)簡(jiǎn)單的demo來(lái)給大家介紹一下Spring?+?ECharts如何數(shù)據(jù)可視化,需要的朋友可以參考下2023-07-07
使用Lombok時(shí)@JsonIgnore注解失效解決方案
這篇文章主要為大家介紹了使用Lombok時(shí)@JsonIgnore注解失效問(wèn)題解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06
Idea2023創(chuàng)建springboot不能選擇java8的解決方法(最新推薦)
在idea2023版本創(chuàng)建springboot的過(guò)程中,選擇java版本時(shí)發(fā)現(xiàn)沒(méi)有java8版本,只有java17和java20,遇到這樣的問(wèn)題如何解決呢,下面小編給大家分享Idea2023創(chuàng)建springboot不能選擇java8的解決方法,感興趣的朋友一起看看吧2024-01-01
Java創(chuàng)建數(shù)組的3種方式代碼舉例
數(shù)組是相同類型數(shù)據(jù)的有序集合,數(shù)組描述的是若干個(gè)相同類型的數(shù)據(jù)按照一定的先后次序排列組合而成,其中每一個(gè)數(shù)據(jù)稱為數(shù)組的元素,可以通過(guò)下標(biāo)進(jìn)行訪問(wèn),這篇文章主要給大家介紹了關(guān)于Java創(chuàng)建數(shù)組的3種方式,需要的朋友可以參考下2024-01-01
java發(fā)起http請(qǐng)求獲取返回的Json對(duì)象方法
下面小編就為大家分享一篇java發(fā)起http請(qǐng)求獲取返回的Json對(duì)象方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-03-03
對(duì)比Java講解Kotlin中?.與!!.的區(qū)別
這篇文章主要給大家介紹了關(guān)于對(duì)比Java,實(shí)例講解Kotlin中?.與!!.的區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用kotlin具有一定參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-06-06

