SpringBoot?整合ChatGPT?API項(xiàng)目實(shí)戰(zhàn)教程
準(zhǔn)備工作
(1)已成功注冊 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 可選參教。語言模型,這里選擇的是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”)。
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)目內(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種場景)
- SpringBoot3.0整合chatGPT的完整步驟
相關(guān)文章
Java基于余弦方法實(shí)現(xiàn)的計(jì)算相似度算法示例
這篇文章主要介紹了Java基于余弦方法實(shí)現(xiàn)的計(jì)算相似度算法,簡單說明了余弦相似性的概念、原理并結(jié)合實(shí)例形式分析了java實(shí)現(xiàn)余弦相似性算法的相關(guān)操作技巧,需要的朋友可以參考下2017-08-08
Springboot實(shí)現(xiàn)密碼的加密解密
這篇文章主要為大家詳細(xì)介紹了Springboot實(shí)現(xiàn)密碼的加密解密,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-11-11
Java中Controller引起的Ambiguous?mapping問題及解決
這篇文章主要介紹了Java中Controller引起的Ambiguous?mapping問題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-10-10
SpringBoot應(yīng)用啟動(dòng)流程源碼解析
這篇文章主要介紹了SpringBoot應(yīng)用啟動(dòng)流程源碼解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04
Java實(shí)現(xiàn)的上傳并壓縮圖片功能【可等比例壓縮或原尺寸壓縮】
這篇文章主要介紹了Java實(shí)現(xiàn)的上傳并壓縮圖片功能,可實(shí)現(xiàn)圖片的等比例壓縮或原尺寸壓縮,涉及java文件讀寫、轉(zhuǎn)換、傳輸?shù)认嚓P(guān)操作技巧,需要的朋友可以參考下2018-07-07
Spring AOP日志框架實(shí)現(xiàn)過程圖解
這篇文章主要介紹了Spring AOP日志框架實(shí)現(xiàn)過程圖解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09

