ChatGPT官方API調用

ChatGPT官方API比較好的地方在于內測過程中調用是免費的,沒有次數限制。此外,API接口調用不需要梯子或代理(使用代理反而可能會報錯“Error communicating with OpenAI”),只需要API Key就可以了,且當前API Key使用免費。

? ? ? ? 盡管ChatGPT 官方API還在內測而沒有使用文檔,但我們知道該模型應該也屬于文本補全模型(completion),與GPT3模型保持一致。我們可以類比GPT3模型來猜測其調用方式,然后得出ChatGPT模型調用方式。

1 GPT3模型調用(ChatGPT官方API請參考第2部分)

? ? ? ? 現有大多數ChatGPT API實際上是OpenAI GPT3模型接口,模型名稱為“text-davinci-003”,調用費用為0.02美元/1000tokens,折合下來差不多0.1元400~500字。這個字數包括問題和返回結果字數。

GPT3模型調用方式如下,輸入主要有7個參數:

model:模型名稱,text-davinci-003

prompt:問題或待補全內容,例如“how are you”。

temperature:控制結果隨機性,0.0表示結果固定,隨機性大可以設置為0.9。

max_tokens:最大返回字數(包括問題和答案),通常漢字占兩個token。假設設置成100,如果prompt問題中有40個漢字,那么返回結果中最多包括10個漢字。

top_p:設置為1即可。

frequency_penalty:設置為0即可。

presence_penalty:設置為0即可。

import openai

openai.api_key = "你的API Key"

response = openai.Completion.create(

model="text-davinci-003",

prompt="how are you",

temperature=0.7,

max_tokens=256,

top_p=1,

frequency_penalty=0,

presence_penalty=0

)

print(response)?

返回結果如下所示,結果在text字段中,可通過response["choices"][0]["text"]進行讀取。

{

? "id": "cmpl-uqkvlQyYK7bGYrRHQ0eXlWi7",

? "object": "text_completion",

? "created": 1589478378,

? "model": "text-davinci-003",

? "choices": [

? ? {

? ? ? "text": "\n\nThis is indeed a test",

? ? ? "index": 0,

? ? ? "logprobs": null,

? ? ? "finish_reason": "length"

? ? }

? ],

? "usage": {

? ? "prompt_tokens": 5,

? ? "completion_tokens": 7,

? ? "total_tokens": 12

? }

}

2 ChatGPT API調用方式

? ? ? ? ChatGPT API接口模型估計是2023年1月26日開始內測的,從它的模型名稱就可以看出來。其調用方式如下所示,與GPT3模型調用基本一致,各個參數可參考上文介紹。下面各個參數目前是類比猜測出來的,沒有conversation_id之類的。后續,如果新的參數更新,將在本文中及時進行更新,敬請關注。

import openai

openai.api_key = "你的APIKey"

response = openai.Completion.create(

? model="text-davinci-003",

? prompt="chatgpt的賬號怎么注冊v:sozoer",

? temperature=0,

? max_tokens=50,

? stream=False,#請注意查看下文說明。

? top_p=1,

? frequency_penalty=0,

? presence_penalty=0

)

ChatGPT API允許的最大token數量為4097,即max_tokens最大設置為4097減去prompt問題的token數量。

需要注意,上述輸入參數增加stream,即是否采用控制流的方式輸出。

如果stream取值為False,那么返回結果與第1節GPT3接口一致,完全返回全部文字結果,可通過response["choices"][0]["text"]進行讀取。但是,字數越多,等待返回時間越長,時間可參考控制流讀出時的4字/每秒。

如果steam取值為True時,那么返回結果是一個Python generator,需要通過迭代獲取結果,平均大約每秒鐘4個字(33秒134字,39秒157字),讀取程序如下所示。可以看到,讀取結果的結束字段為“<|im_end|>”。

res = ''

for r in response:

? ? res += r["choices"][0]["text"]

res = res.replace('<|im_end|>', '')

print(res)

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容