自從chatGPT爆火后,各種第三方接入的聊天機器人都上了一個檔次,出于好奇我也決定自己對接他的api弄個聊天機器人玩玩
獲取key
通過官方api文檔可知,調(diào)用接口前必須要有一個key作為鑒權(quán)信息,那我們先獲取這個key。
點擊進(jìn)入OpenAi官網(wǎng)api頁面,點擊左上角的Login跳入登錄界面(沒有賬號就注冊一個)。

使用java sdk調(diào)用
除了http調(diào)用,OpenAi有各種語言封裝好的sdk可直接使用,這里使用的是java sdk,其他語言可以參考:https://platform.openai.com/docs/libraries/community-libraries
java sdk github地址:https://github.com/TheoKanning/openai-java
第一步:添加maven依賴
<dependency>
<groupId>com.theokanning.openai-gpt3-java</groupId>
<artifactId>client</artifactId>
<version>0.9.0</version>
</dependency>
這里artifactId使用api和client都行,client包括api,最新版本可以去maven倉庫找
第二步:測試用例
public static void main(String[] args) {
String token = "你申請的key";
// 構(gòu)建openai api對象,由于處理時間比較長,建議設(shè)置一個合理的超時時間
OpenAiService service = new OpenAiService(token, Duration.ofSeconds(60));
CompletionRequest completionRequest = CompletionRequest.builder()
.prompt("如果有一輛車,車?yán)锩孀诵∶餍〖t小黃,請問車是誰的?")
.model("text-davinci-003")
.temperature(0.9d)
.maxTokens(150)
.stop(Arrays.asList("Human:", "AI:"))
.echo(true)
.build();
service.createCompletion(completionRequest).getChoices().forEach(System.out::println);
}
結(jié)果:

實現(xiàn)對話
怎么實現(xiàn)上下文連貫的對話呢,很簡單,就是把聊天記錄都提交上去,其中需要加上對話雙方的名字,雙方的對話中間采用\n\n分割,例如這里我將自己取名為Human,將機器人取名為AI,名稱后面緊跟著冒號,冒號后面表示人物說的內(nèi)容,結(jié)尾使用AI:,表示需要機器人接著回答:
public static void main(String[] args) {
String token = "你申請的key";
// 構(gòu)建openai api對象,由于處理時間比較長,建議設(shè)置一個合理的超時時間
OpenAiService service = new OpenAiService(token, Duration.ofSeconds(60));
CompletionRequest completionRequest = CompletionRequest.builder()
.prompt("Human:如果有一輛車,車?yán)锩孀诵∶餍〖t小黃,請問車是誰的?\n\nAI:")
.model("text-davinci-003")
.temperature(0.9d)
.maxTokens(150)
.stop(Arrays.asList("Human:", "AI:"))
.echo(true)
.build();
service.createCompletion(completionRequest).getChoices().forEach(System.out::println);
}
結(jié)果:

輸入:
.prompt("Human:如果有一輛車,車?yán)锩孀诵∶餍〖t小黃,請問車是誰的?\n\nAI:車屬于擁有者,也就是誰把車購買來用來坐小明小紅小黃。如果擁有者不是小明小紅小黃中的任何一個人,那么車就屬于那個擁有者。\n\nHuman:不對,車屬于“如果”的\n\nAI:")
結(jié)果:

參數(shù)解析
官方對參數(shù)的解釋:https://platform.openai.com/docs/api-reference/completions/create
prompt:你需要提問的問題,或者對話內(nèi)容
temperature:我把他理解為回答的準(zhǔn)確性,介于0-2之間,越大回答與問題越不想干,可以認(rèn)為思想越跳越,這里建議取0.9
model:模型,模型有很多,可以都嘗試一下,在上面參數(shù)解釋旁邊就可以選
maxTokens:可以理解為回答結(jié)果的分詞數(shù)量,越小輸出的答案字?jǐn)?shù)越少,這里是指答案返回的字?jǐn)?shù)少,而不是答案更簡潔的文字輸出
echo:輸出是否攜帶上下文,設(shè)置為false則只輸出最后一個問題的回答