chatGPT-Api接口實現(xiàn)對話

自從chatGPT爆火后,各種第三方接入的聊天機器人都上了一個檔次,出于好奇我也決定自己對接他的api弄個聊天機器人玩玩

獲取key

通過官方api文檔可知,調(diào)用接口前必須要有一個key作為鑒權(quán)信息,那我們先獲取這個key。
點擊進(jìn)入OpenAi官網(wǎng)api頁面,點擊左上角的Login跳入登錄界面(沒有賬號就注冊一個)。

WechatIMG920.jpeg

使用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é)果:


202302152230416.png
實現(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é)果:


202302152238263.png

輸入:

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

結(jié)果:


202302152244669.png
參數(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則只輸出最后一個問題的回答

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容