ChatGPT自從推出之後風靡全世界,而身為工程師,這時候最關心的就是有沒有API可以使用,這樣就可以串接更多的服務,而不是局限於ChatGPT提供的介面中。
這篇文章會帶大家簡單的認識OpenAI目前有提供哪些API讓大家使用,如何何提供驗證,以及使用需要付出的錢錢又是多少。
在正式進到OpenAI的API之前,我們得先知道一些無聊但必要的事情
如果很在意自己的資料會不會被OpenAI拿去訓練model,接下來的部分請看仔細了~
OpenAI 如何利用拿到的資料
- API類的服務:OpenAI目前不會拿API類服務所得到的資料做訓練,也就是說,如果是用API key去打OpenAI的API的話,這部分的資料是不會被拿去使用的。
- 非API類的服務:非API類的服務包括ChatGPT、DALL-E等,OpenAI目前會把拿到的資料拿去做訓練,雖然會經過一些處理,但會回饋給model繼續增進能力。
如果想要/不想要自己輸入的資料被拿去訓練,OpenAI目前都有提供表格可以填寫。
資料來源:https://help.openai.com/en/articles/7039943-data-usage-for-consumer-services-faq
OpenAI API 計費方式
ChatGPT目前是免費的,但回到現實,OpenAI總是需要賺錢,所以在API這邊,他們是有收費的,收費的詳細說明在這個頁面。
收費會被以下幾個因素影響:
- API endpoint的功能:文字、圖片、音訊等等的計費方式不同,文字是看有幾個tokens;圖片是看圖片大小及張數;音訊則是看長度。
- 模型:GPT-3.5 turbo與GPT-4同為Chat endpoint可以選的模型,但他們的價錢差了20倍。
- Input/Output:某些endpoint針對輸入及輸出有不同的計費方式,以目前官網公布的GPT-3.5 Turbo為例,4K context (支援input+output合計4096 tokens以下)的input就是每1000個tokens收0.0015美金,但output則是每1000個tokens收0.002美金。
所以在玩耍的同時,別忘了寫個程式算一下自己花了多少錢。
怎麼跟OpenAI的API互動
- 取得OpenAI的API key
首先,登入OpenAI官網,登入後選擇API,進到下圖的介面後,點選右上角User的頭像,會出現選單,點選View API Keys。接著進到下下圖的頁面後,便可以自己產生API key了!
- 選擇自己要使用的語言
目前官方有支援的有Python以及Node.js,其他語言則有熱心人士開發統合,可以在這裡找到,如果找不到的話,就等你來開發啦!如果只是要簡單用curl試試看當然也可以,畢竟他本質就是API,支援的語言只是將打API的過程包成library而已,API使用的說明在這邊可以找到。 - 打開你的編輯器/IDE/Terminal,我們要開始寫code啦~
接下來我會以Python作為主要範例,其他語言就以此類推。要跟OpenAI取得聯繫最重要的就是提供API key,以下是 curl 以及使用Python library提供API key的方法。
這裡我想特別提醒,API Key這種secret是不應該隨手寫在code裡面的,如果是自己在本地測試還好,如果是公司的話,請記得要放在key management相關的服務中,千萬不要明碼寫著還推到github repository中。
curl https://api.openai.com/v1/models \
-H "Authorization: Bearer $OPENAI_API_KEY"
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
OpenAI API 種類簡介
目前OpenAI提供了五組主要的API,以及其他一些輔助用的API,接下來會一一講解他們分別的功能。OpenAI官方文件在此。此處寫的是 2023/09 的版本,OpenAI改版非常快,可能過沒多久就是新版了,再麻煩大家自己去官網看看有沒有改版囉。
- Chat: Given a list of messages comprising a conversation, the model will return a response.
翻成白話文就是,你給他一串話,OpenAI的model就會回你話,其實也就是大家熟知的ChatGPT在做的事,只是沒有web UI可以使用而已。這個endpoint要注意的是,他不會記住你上次跟他說了什麼話,所以如果要連續對話的話,需要把之前的內容也一起回傳回去,詳細的做法之後的文章會介紹。 - Image: Given a prompt and/or an input image, the model will generate a new image.
OpenAI目前支援三種圖片產生方式,第一種,給一段敘述(prompt),AI會根據給的敘述產生出圖片;第二種,給一段敘述(prompt)加上想被修改的圖片,AI會根據給的敘述去加工給的圖片;第三種,給一張圖片,AI會隨便亂改,不要問我這個功能要幹嘛,我也還沒參透。 - Audio: Turn audio into text.
OpenAI目前支援兩種不同的語音功能,第一種是將一段語音轉換成同語言的文字(p.s. 我剛剛試了台語的,他會變成中文字),假如是多種語言混雜的,文字也會是多種語言混雜的(日文歌中的日式英文很大機率會是片假名,但我不知道他的判斷標準);第二種則是將一段任意語言的語音翻譯成英文,目前就只支援翻譯成英文,沒有其他語言。 - Embeddings: Get a vector representation of a given input that can be easily consumed by machine learning models and algorithms.
這部分就是熟悉傳統machine learning的人知道的那個embedding,此endpoint為給OpenAI任一單字或一段文字,他會回傳1536維的向量。目前使用的model是Ada v2。 - Fine-tuning: Manage fine-tuning jobs to tailor a model to your specific training data.
這是一個蠻有趣的endpoint,如果需要客製化的chat,可以用這個endpoint去讓openAI幫你用你給的資料訓練一個比較客製化的model。例如你想要他不管怎樣都回正向的話語,就可以提供一些範例的input/output,這個endpoint就會回傳專為你的資料fine-tune過的模型編號,之後就可以用chat endpoint直接呼叫你的客製化模型。
這篇帶大家簡單看完目前OpenAI API的入門資訊,包括計費方式、Access方式以及目前可以使用的endpoints,下一篇會更深入地講解其中幾個endpoint怎麼使用,當然,也會提供範例程式讓大家可以一起玩玩看。
如果有什麼許願想知道的也歡迎留言~我如果有辦法解答的話會努力回覆的!