<groupId>com.theokanning.openai-gpt3-java</groupId>
<artifactId>service</artifactId>
<version>0.11.1</version>
</dependency>

1.1.2、安裝完成后,可以參考以下的代碼案例,通過(guò)綁定密鑰來(lái)調(diào)用chatGPT模型——

@GetMapping("/ai")
public void sendMsg() throws InterruptedException {
System.out.println("開始提問題~");
//GPT_TOKEN即你的代碼密鑰
OpenAiService service = new OpenAiService(GPT_TOKEN,Duration.ofSeconds(10000));
CompletionRequest completionRequest = CompletionRequest.builder()
//使用的模型
.model("text-davinci-003")
//輸入提示語(yǔ)
.prompt("你是一個(gè)工作助手,請(qǐng)幫忙設(shè)計(jì)一份活動(dòng)策劃書")
//該值越大每次返回的結(jié)果越隨機(jī),即相似度越小,可選參數(shù),默認(rèn)值為 1,取值 0-2
.temperature(0.5)
//返回結(jié)果最大分詞數(shù)
.maxTokens(2048)
//與temperature類似
.topP(1D)
.build();
service.createCompletion(completionRequest).getChoices().forEach(System.out::println);
Thread.sleep(6000);
}

需要注意的是,若是部署在有”魔法代理”的Linux云服務(wù)商,代碼需要相應(yīng)做一下調(diào)整,否則是無(wú)法訪問到ChatGPT的,只會(huì)出現(xiàn)以下異常提示:

java.net.ConnectException:Failed to connect to api.openai.com/2a03:2880:f10c:283:face:b00c:0:25de:443]

當(dāng)日我在這個(gè)問題上就踩了一個(gè)坑。

解決的辦法很簡(jiǎn)單,只需要做以下調(diào)整——

public void send1Msg() throws InterruptedException {

System.out.println("開始提問題~");
//需要額外設(shè)置一個(gè)能訪問chatGPT的魔法訪問代理
ObjectMapper mapper = defaultObjectMapper();
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("127.0.0.1", 8889));
OkHttpClient client = defaultClient(GPT_TOKEN,Duration.ofSeconds(10000))
.newBuilder()
.proxy(proxy)
.build();
Retrofit retrofit = defaultRetrofit(client, mapper);
OpenAiApi api = retrofit.create(OpenAiApi.class);

//將設(shè)置的代理傳給OpenAiService即可
OpenAiService service = new OpenAiService(api);
CompletionRequest completionRequest = CompletionRequest.builder()
.model("text-davinci-003")
.prompt("你是一個(gè)工作助手,情幫忙設(shè)計(jì)一份活動(dòng)策劃書,設(shè)計(jì)一份活動(dòng)策劃書")
.temperature(0.5)
.maxTokens(2048)
.topP(1D)
.build();
service.createCompletion(completionRequest).getChoices().forEach(System.out::println);
Thread.sleep(6000);
}

1.2、Go

官方推薦的是sashabaranov開源的go-gpt3 。

1.2.1、需要先安裝以下依賴包——

go get github.com/sashabaranov/go-openai

1.2.2、該開源項(xiàng)目提供的參考案例如下——

package main
import (
"context"
"fmt"
openai "github.com/sashabaranov/go-openai"
)
func main() {
client := openai.NewClient("your token")
resp, err := client.CreateChatCompletion(
context.Background(),
openai.ChatCompletionRequest{
Model: openai.GPT3Dot5Turbo,
Messages: []openai.ChatCompletionMessage{
{
Role: openai.ChatMessageRoleUser,
Content: "Hello!",
},
},
},
)
if err != nil {
fmt.Printf("ChatCompletion error: %v\n", err)
return
}
fmt.Println(resp.Choices[0].Message.Content)
}

1.3、Python

先下載Python版本的open庫(kù)——

$ pip install openai

安裝完成后,可以參考以下的代碼案例,通過(guò)綁定密鑰來(lái)調(diào)用chatGPT模型——

import os
import openai

# Load your API key from an environment variable or secret management service
openai.api_key = os.getenv("OPENAI_API_KEY")

response = openai.Completion.create(model="text-davinci-003", prompt="Say this is a test", temperature=0, max_tokens=7)

1.4、Node

先下載Node版本的openai庫(kù)——

$ npm install openai

安裝完成后,可以參考以下的代碼案例,通過(guò)綁定密鑰來(lái)調(diào)用chatGPT模型——

const { Configuration, OpenAIApi } = require("openai");
const configuration = new Configuration({
apiKey: process.env.OPENAI_API_KEY,
});
const openai = new OpenAIApi(configuration);
const response = await openai.createCompletion({
model: "text-davinci-003",
prompt: "Say this is a test",
temperature: 0,
max_tokens: 7,
});

二、密鑰認(rèn)證

OpenAi API是需要使用API密鑰進(jìn)行認(rèn)證訪問。密鑰獲取方式,需要登錄https://platform.openai.com/account/api-keys頁(yè)面。

接著點(diǎn)擊【Create new secret key】生成一個(gè)新的密鑰,需要注意一點(diǎn)是,該密鑰生成時(shí)就得保存下來(lái),否則過(guò)后是無(wú)法再進(jìn)行查看的,例如,我的密鑰庫(kù)里先前已有一條密鑰,但現(xiàn)在無(wú)法再去確定這條密鑰是什么了。

順便提一點(diǎn)是,chatGPT是有免費(fèi)額度的,調(diào)用API會(huì)消耗掉這些額度,我們可以在點(diǎn)擊左邊菜單【Usage】查看——

在調(diào)用OpenAiAPI請(qǐng)求時(shí),需要在HTTP請(qǐng)求報(bào)頭中包含該API密鑰,例如——

Authorization: Bearer OPENAI_API_KEY

三、GPT請(qǐng)求設(shè)置

官方提供了一個(gè)curl通過(guò)密鑰調(diào)用API的請(qǐng)求案例,需要將案例里的$OPENAI_API_KEY替換為自己的API密鑰,在開啟了代理的服務(wù)器上運(yùn)行,可以基于該案例測(cè)試服務(wù)器是否能正常調(diào)用到ChatGPT——

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": "這是一個(gè)測(cè)試請(qǐng)求!"}],
"temperature": 0.7
}'

我在自己的服務(wù)器上運(yùn)行了,返回結(jié)果如下——

這個(gè)請(qǐng)求表示,查詢gpt-3.5-turbo模型完成文本處理,提示語(yǔ)為”這是一個(gè)測(cè)試請(qǐng)求!”,響應(yīng)結(jié)果如下——

{
"id": "chatcmpl-75U8z1PVwDb0pA0EPhOMZVC1q7q11",
"object": "chat.completion",
"created": 1681541869,
"model": "gpt-3.5-turbo",
"usage": {
"prompt_tokens": 14,
"completion_tokens": 46,
"total_tokens": 60
},
"choices": [{
"message": {
"role": "assistant",
"content": "您好,這是一個(gè)回復(fù)測(cè)試請(qǐng)求的信息。請(qǐng)問您有什么需要測(cè)試的具體內(nèi)容或問題嗎?我會(huì)盡力幫助您解決問題。"
},
"finish_reason": "stop",
"index": 0
}]
}

Request body各字段說(shuō)明——

四、開發(fā)中添加敏捷信息審核層

首先得提一下2023年4月11日網(wǎng)信發(fā)布的一份《生成式人工智能服務(wù)管理辦法(征求意見稿)》,里面第四條明確表示,生成式人工智能算法或服務(wù)應(yīng)當(dāng)遵守法律法規(guī)的要求,尊重社會(huì)公德、公序良俗。這就意味著,未來(lái)在使用這類Ai接口進(jìn)行輸入/輸出時(shí),必須針對(duì)內(nèi)容進(jìn)行違規(guī)內(nèi)容信息的過(guò)濾。

其實(shí)OpenAi有針對(duì)這塊內(nèi)容審核提供了開放的API接口,可以免費(fèi)使用。

若想在聊天API的輸出中添加一個(gè)敏捷信息攔截層,就可以在輸入/輸出信息時(shí),調(diào)用該接口。例如,存在這樣一份API接口調(diào)用案例——

curl https://api.openai.com/v1/moderations \
-X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d '{"input": "測(cè)試一句話"}'

響應(yīng)返回內(nèi)容如下——

{
"id": "modr-75k0nHCOc0SR88t9xCNBHctPDMO8d",
"model": "text-moderation-004",
"results": [{
"flagged": false,
"categories": {
"sexual": false,
"hate": false,
"violence": false,
"self-harm": false,
"sexual/minors": false,
"hate/threatening": false,
"violence/graphic": false
},
"category_scores": {
"sexual": 0.00012780998076777905,
"hate": 0.00013749735080637038,
"violence": 1.4757171129531343e-07,
"self-harm": 5.410008441231184e-09,
"sexual/minors": 1.5541245375061408e-06,
"hate/threatening": 6.1530336381565576e-09,
"violence/graphic": 2.9580141003293647e-08
}
}]
}

categories和category_scores具體字段值對(duì)應(yīng)的說(shuō)明如下表格所示——

官方表示目前該審核接口仍在不斷努力提高分類器的準(zhǔn)確性,特別是仇恨、自殘和暴力等內(nèi)容的分類。值得注意一點(diǎn)是,對(duì)非英語(yǔ)語(yǔ)言的支持目前是有限的,也就是說(shuō),中文的審核支持比較有限。

除了使用OpenAi提供的輸入/輸出信息審核接口,還可以開發(fā)敏感詞過(guò)濾系統(tǒng),將傳給ChatGPT以及響應(yīng)返回的數(shù)據(jù),進(jìn)行敏感詞過(guò)濾。

四、模型調(diào)用

4.1、模型列表

OpenAi提供了多種模型,可以通過(guò)執(zhí)行以下查詢指令,查詢出API支持的模型類型——

curl https://api.openai.com/v1/models -H "Authorization: Bearer $OPENAI_API_KEY"

出現(xiàn)出來(lái)的結(jié)果如下,應(yīng)該有數(shù)十個(gè)模型,我用的最多是gpt-3.5-turbo,這是目前比較標(biāo)準(zhǔn)的型號(hào)版本——

{
"data": [
{
"id": "text-davinci-003",
"object": "model",
"created": 1669599635,
"owned_by": "openai-internal",
"permission": [...],
"root": "text-davinci-003",
"parent": null
},

{
"id": "gpt-3.5-turbo",
"object": "model",
"created": 1677610602,
"owned_by": "openai",
"permission": [...],
"root": "gpt-3.5-turbo",
"parent": null
},
.....
],
"object": "list"
}

4.2、查詢指定GPT模型詳情

可以基于以上模型類表接口,查詢出具體模型實(shí)例的詳情,包括模型的基本信息、所有者及權(quán)限等——

curl https://api.openai.com/v1/models/gpt-3.5-turbo \
-H "Authorization: Bearer $OPENAI_API_KEY"

查詢出gpt-3.5-turbo的模型詳情如下——

{
"id": "gpt-3.5-turbo",
"object": "model",
"created": 1677610602,
"owned_by": "openai",
"permission": [
{
"id": "modelperm-BmdmcAa1aQwToDxri3DFbZw9",
"object": "model_permission",
"created": 1681343255,
"allow_create_engine": false,
"allow_sampling": true,
"allow_logprobs": true,
"allow_search_indices": false,
"allow_view": true,
"allow_fine_tuning": false,
"organization": "*",
"group": null,
"is_blocking": false
}
],
"root": "gpt-3.5-turbo",
"parent": null
}

GPT-3.5模型可以理解和生成自然語(yǔ)言或代碼,在GPT-3.5版本當(dāng)中,最有能力和最具成本收益的模型是GPT-3.5-turbo,它是基于原有的3.5版本模型進(jìn)行的迭代優(yōu)化,可以更好地完成傳統(tǒng)任務(wù)。目前最新模型是GPT-4,具有更先進(jìn)的常識(shí)和推理能力,但還沒有開放免費(fèi)API接口。

以下是GPT-3.5模型列表介紹——

官方推薦使用GPT-3.5-turbo而不是其他GPT-3.5模型,因?yàn)樗某杀靖?。gpt-3.5-turbo的性能與text-davinci-003相似,但每個(gè)token的價(jià)格是它的10%,官方推薦在大多數(shù)情況下使用gpt-3.5-turbo。

五、圖像生成調(diào)用

給定一個(gè)提示和/或一個(gè)輸入圖像,模型會(huì)生成一個(gè)新的圖像,例如,我想讓它畫一只胖貓——

curl https://api.openai.com/v1/images/generations \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d '{
"prompt": "畫一只可愛的大胖貓",
"n": 2,
"size": "1024x1024"
}'

然后,它確實(shí)給我畫了兩張圖——

{
"created": 1681547551,
"data": [
{
"url": "https://oaidalleapiprodscus.blob.core.windows.net/private/org-LqdibnOuIlW8xc7Lfh2REsXo/user-6D0yIziBFiX73mCUwNwOwczJ/img-jKdFuRLINlkCeFL1QCWFZtId.png?st=2023-04-15T07%3A32%3A31Z&se=2023-04-15T09%3A32%3A31Z&sp=r&sv=2021-08-06&sr=b&rscd=inline&rsct=image/png&skoid=6aaadede-4fb3-4698-a8f6-684d7786b067&sktid=a48cca56-e6da-484e-a814-9c849652bcb3&skt=2023-04-15T08%3A28%3A22Z&ske=2023-04-16T08%3A28%3A22Z&sks=b&skv=2021-08-06&sig=Rbe8x3ZdEcoScQOXrkxGAe1G8rGOrO%2B4wzmzZwotP68%3D"
},
{
"url": "https://oaidalleapiprodscus.blob.core.windows.net/private/org-LqdibnOuIlW8xc7Lfh2REsXo/user-6D0yIziBFiX73mCUwNwOwczJ/img-00FKmNWnDm5p21CS89UPm56T.png?st=2023-04-15T07%3A32%3A31Z&se=2023-04-15T09%3A32%3A31Z&sp=r&sv=2021-08-06&sr=b&rscd=inline&rsct=image/png&skoid=6aaadede-4fb3-4698-a8f6-684d7786b067&sktid=a48cca56-e6da-484e-a814-9c849652bcb3&skt=2023-04-15T08%3A28%3A22Z&ske=2023-04-16T08%3A28%3A22Z&sks=b&skv=2021-08-06&sig=KVsxjwPIsJFC0cFEjRqVPrcckGxipp5BiiUmayPmqMM%3D"
}
]
}

通過(guò)圖url鏈接,可以查看圖片,若是在代碼里,可以直接丟給<img src=””>里顯示出圖片。不過(guò),我讓openai給我畫的是一只胖貓,圖一我還能理解,但是,圖二,這個(gè)貓屁股著實(shí)有些離譜了(自帶??)……

體驗(yàn)下來(lái),感覺與midjourney還是有較大區(qū)別的,只能說(shuō),勉強(qiáng)能用吧。

圖像生成接口參數(shù)如下——

六、ChatGPT使用技巧和注意事項(xiàng)

6.1、調(diào)整temperature參數(shù)

我在前文調(diào)用API的參數(shù)當(dāng)中,有提及一個(gè)temperature參數(shù),翻譯過(guò)來(lái)叫溫度。該參數(shù)用于指定生成文本時(shí)的隨機(jī)性和多樣性,默認(rèn)值為1,介于 0 和 2 之間,較高的溫度值值(如 0.8)會(huì)導(dǎo)致GPT輸出內(nèi)容更隨機(jī),而較低的溫度值(如 0.2)會(huì)使其更加可以預(yù)測(cè)和具備確定性。

打一個(gè)比喻,ChatGPT中的溫度值就演員演戲——

較低的溫度值可以看作是“按照劇本表演”,演員是什么水平,就演出什么樣子。溫度值低生成的文本比較保守和確定,適合需要準(zhǔn)確性和連貫性的任務(wù),比如內(nèi)容摘要、機(jī)器翻譯等。

較高的溫度值可以看成“即興表演”,生成的文本可能更加隨機(jī)和多樣性,當(dāng)然,也可能更加糟糕,這種情況比較適合用來(lái)創(chuàng)作和探索性任務(wù),比如生成對(duì)話、創(chuàng)意寫作等。

當(dāng)然,這個(gè)temperature參數(shù)并非萬(wàn)能的,在某些文本內(nèi)容當(dāng)中,可能幾乎感受不到太多差別。

若溫度值設(shè)置為0,那么,模型將總會(huì)返回相同或非常相似的內(nèi)容,當(dāng)溫度高于0時(shí),每次提交相同的提示會(huì)導(dǎo)致生成不同內(nèi)容。官方表示,溫度值在0~1之間,基本上可以控制模型生成比較滿意的答案。

例如,當(dāng)用戶詢問“如何形容一只胖貓?”時(shí),聊天機(jī)器人可能會(huì)生成以下不同的回答:

在提問當(dāng)中,使用這個(gè)參數(shù)的方法很簡(jiǎn)單,只需要在提示語(yǔ)后面跟上“Use a temperature of 0.5”即可——

6.2、傳遞給API的數(shù)據(jù)是否會(huì)被存儲(chǔ)

用戶比較關(guān)心一個(gè)問題是,我們傳給ChatGPT的數(shù)據(jù)是否會(huì)被存儲(chǔ)。官方表示,自2023年3月1日起,將保留您的API數(shù)據(jù)30天,但不再使用通過(guò)API發(fā)送的數(shù)據(jù)來(lái)改進(jìn)模型。這就意味著,請(qǐng)勿傳輸涉及個(gè)人隱私或者安全相關(guān)的信息,避免數(shù)據(jù)泄漏。

本文章轉(zhuǎn)載微信公眾號(hào)@寫代碼的朱季謙

上一篇:

OLLama詳細(xì)的 api 介紹 不完全指南 python 直接調(diào)用 OLLama api 翻譯助手演示

下一篇:

AI開發(fā)實(shí)戰(zhàn)(002):自定義實(shí)現(xiàn) LangChang ChatModel 來(lái)集成 Claude 2 API 調(diào)用
#你可能也喜歡這些API文章!

我們有何不同?

API服務(wù)商零注冊(cè)

多API并行試用

數(shù)據(jù)驅(qū)動(dòng)選型,提升決策效率

查看全部API→
??

熱門場(chǎng)景實(shí)測(cè),選對(duì)API

#AI文本生成大模型API

對(duì)比大模型API的內(nèi)容創(chuàng)意新穎性、情感共鳴力、商業(yè)轉(zhuǎn)化潛力

25個(gè)渠道
一鍵對(duì)比試用API 限時(shí)免費(fèi)

#AI深度推理大模型API

對(duì)比大模型API的邏輯推理準(zhǔn)確性、分析深度、可視化建議合理性

10個(gè)渠道
一鍵對(duì)比試用API 限時(shí)免費(fèi)