ChatGpt聊天API使用

安輝發表於2023-03-03

昨天ChatGpt釋出了聊天API,新增了兩個模型,目前還是測試階段

  • gpt-3.5-turbo 功能強大的GPT-3.5模型,專門針對聊天做了最佳化
  • gpt-3.5-turbo-0301 此模型只支援到今年6月份

所以我們直接是用gpt-3.5-turbo模型就行了,相對於之前的text-davinci-003模型,gpt-3.5-turbo模型使用成本降低了90%。我昨天第一時間呼叫API使用了,返回結果速度變快的,簡單的問題3秒內就返回結果了,寫文章的問答10多秒也能回覆了,並且回覆質量也比之前的text-davinci-003模型要好。

使用gpt-3.5-turbo聊天模型整合到應用程式中能做什麼?有哪些使用場景

  • 寫文章
  • 寫程式碼
  • 回答問題
  • 聊天
  • 翻譯
  • 模擬遊戲中的角色,例如NPC

ChatGpt API早期使用者

Snapchat

Snapchat的創始人推出了 My AI for Snapchat+,My AI 為 Snapchatter 提供了一個友好的、可自定義的聊天機器人,讓他們觸手可及,可以提供建議,甚至可以在幾秒鐘內為朋友寫一句俳句。Snapchat 是日常交流和訊息傳遞的場所,每月有 7.5 億 Snapchatter。

Quizlet

Quizlet是一個全球學習平臺,有超過 6000 萬學生使用它來學習、練習和掌握他們正在學習的任何內容。Quizlet 在過去三年中一直與 OpenAI 合作,在多個用例中利用 GPT-3,包括詞彙學習和練習測試。隨著 ChatGPT API 的推出,Quizlet 推出了 Q-Chat,這是一種完全自適應的 AI 導師,可讓學生根據透過有趣的聊天體驗提供的相關學習材料提出自適應問題。

Instacart

Instacart正在增強 Instacart 應用程式,使客戶能夠詢問食物並獲得鼓舞人心的、可購買的答案。這使用 ChatGPT 以及 Instacart 自己的 AI 和來自其 75,000 多家零售合作伙伴商店位置的產品資料來幫助客戶發現開放式購物目標的想法,例如“我如何製作美味的魚炸玉米餅?” 或“對我的孩子來說,什麼是健康的午餐?” Instacart 計劃在今年晚些時候推出“Ask Instacart”。

Shop

Shop是 Shopify 的消費者應用程式,有 1 億購物者使用它來尋找和購買他們喜愛的產品和品牌。ChatGPT API 用於為 Shop 的新購物助手提供動力。當購物者搜尋商品時,導購會根據他們的需求進行個性化推薦。Shop 的新人工智慧購物助手將透過掃描數百萬種產品來簡化應用程式內購物,以快速找到買家正在尋找的東西,或者幫助他們發現新東西。

Speak

Speak是一款人工智慧語言學習應用程式,專注於打造流利口語的最佳途徑。他們是韓國發展最快的英語應用程式,並且已經在使用 Whisper API 為新的 AI 語音配套產品提供支援,並迅速將其推向全球其他地區。Whisper 為各個級別的語言學習者提供了人類水平的準確性,解鎖了真正的開放式會話練習和高度準確的反饋。

API使用

api使用跟之前差不多,呼叫起來很方便。申請api key什麼的我就不說了,網上教程一大堆。

例如使用Java如何呼叫,用Idea新建一個maven專案,依賴hutool工具包。

<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.8.10</version>
</dependency>

然後新建一個測試類,其實就是呼叫一下api,程式碼很少,就不一一解釋了

public static void main(String[] args) {
    String url="https://api.openai.com/v1/chat/completions";//api url
    List<ChoiceMessage> list=new ArrayList<>();
    list.add(new ChoiceMessage("user","你好"));//問題

    GptTurbo gptTurbo=new GptTurbo();
    gptTurbo.setModel("gpt-3.5-turbo");//模型
    gptTurbo.setMessages(list);
    gptTurbo.setUser("1");//使用者標識
    HttpResponse response = HttpRequest.post(url)
            .headerMap(null, false)
            .bearerAuth(Constants.TOKEN)//API Token,openai官方生成token
            .body(JSON.toJSONString(gptTurbo))
            .timeout(5 * 60 * 1000)
            .execute();
    String jsonResult=response.body();
    System.out.println(jsonResult);
}

GptTurbo實體類:

@Data
public class GptTurbo {
    private String model;
    private List<ChoiceMessage> messages;
    private String user;//使用者id
}

ChoiceMessage實體類:

@Data
public class ChoiceMessage {
    private String role;
    private String content;

    public ChoiceMessage() {
    }

    public ChoiceMessage(String role, String content) {
        this.role = role;
        this.content = content;
    }
}

返回json結果:

{"id":"chatcmpl-6ps2CsxhVlF1HQkfOml9PQAyaK2qK","object":"chat.completion","created":1677820456,"model":"gpt-3.5-turbo-0301","usage":{"prompt_tokens":9,"completion_tokens":19,"total_tokens":28},"choices":[{"message":{"role":"assistant","content":"\n\n你好,有什麼可以幫助您的嗎?"},"finish_reason":"stop","index":0}]}

當然你也可以直接使用curl方式,開啟終端輸入,下面程式碼把YOUR_API_KEY替換成openai申請的key就行了:

curl https://api.openai.com/v1/chat/completions \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -d '{
  "model": "gpt-3.5-turbo",
  "messages": [{"role": "user", "content": "Hello!"}]
}'

api的引數說明

  • model 模型模型列表
  • messages 訊息,這是一個陣列,可以傳多個訊息,每個訊息必須有一個角色,參考連結
  • temperature 溫度,控制結果的隨機性,如果希望結果更有創意可以嘗試 0.9,或者希望有固定結果可以嘗試 0.0
  • top_p 一種替代溫度取樣的方法,稱為核取樣,其中模型考慮具有 top_p 機率質量的標記的結果。所以 0.1意味著只考慮構成前 10% 機率質量的標記。我們通常建議改變這個或temperature但不是兩者。
  • n 預設為1,為每個輸入訊息生成多少個聊天完成選項。
  • stream 如果設定,將傳送部分訊息增量,就像在 ChatGPT 中一樣。當令牌可用時,令牌將作為純資料伺服器傳送事件data: [DONE]傳送,流由訊息終止。
  • stop API 將停止生成更多令牌的最多 4 個序列。
  • max_tokens 生成的答案允許的最大標記數。預設情況下,模型可以返回的標記數為(4096 - 提示標記)。
  • presence_penalty 懲罰 -2.0 和 2.0之間的數字。正值會根據到目前為止是否出現在文字中來懲罰新標記,從而增加模型談論新主題的可能性。
  • frequency_penalty 頻率懲罰 -2.0 和 2.0之間的數字。正值會根據新標記在文字中的現有頻率對其進行懲罰,從而降低模型逐字重複同一行的可能性。
  • logit_bias 地圖 接受一個 json 物件,該物件將標記(由標記器中的標記 ID 指定)對映到從 -100 到 100 的關聯偏差值。從數學上講,偏差會在取樣之前新增到模型生成的 logits 中。確切的效果因模型而異,但 -1 和 1 之間的值應該會減少或增加選擇的可能性;像 -100 或 100 這樣的值應該導致相關令牌的禁止或獨佔選擇。
  • user 使用者的唯一識別符號,可以幫助 OpenAI 監控和檢測濫用行為

大部分引數都用不上,正常情況使用module、messages、user這三個引數就行了,我之前以為user是用來區分上下文的,後面發現為理解錯了,user就是用來檢測濫用行為,例如你被起訴了,可以透過user找到使用者的記錄,如果要區分上下文,那就messages傳多個物件,但是這樣的話產生的token就變多了,對上下文支援還不是很友好,期待chatgpt的繼續更新。

參考官方連結:

ChatGPT和Whisper介紹: https://openai.com/blog/introducing-chatgpt-and-whisper-apis
聊天介紹:https://platform.openai.com/docs/guides/chat
聊天API呼叫:https://platform.openai.com/docs/guides/chat/introduction

Whisper

Whisper是我們於 2022 年 9 月開源的語音轉文字模型,已獲得開發者社群的極大讚譽,但也很難執行。我們現在已經透過我們的 API 提供了 large-v2 模型,它提供了方便的按需訪問,價格為 0.006 美元/分鐘。此外,與其他服務相比,我們高度最佳化的服務堆疊可確保更快的效能。

Whisper API 可透過我們的transcriptions(以源語言轉錄)或translations(轉錄成英文)端點使用,並接受多種格式(m4a、mp3、mp4、mpeg、mpga、wav、webm):

簡單體驗

如果您只是想體驗一下,微信搜尋小程式:「Ai聊天寫作機器人」
image

相關文章