ChatGPT官方API比較好的地方在于內測過程中調用是免費的兄旬,沒有次數(shù)限制龙优。此外,API接口調用不需要梯子或代理(使用代理反而可能會報錯“Error communicating with OpenAI”)贴唇,只需要API Key就可以了丽柿,且當前API Key使用免費。
? ? ? ? 盡管ChatGPT 官方API還在內測而沒有使用文檔省核,但我們知道該模型應該也屬于文本補全模型(completion)稿辙,與GPT3模型保持一致。我們可以類比GPT3模型來猜測其調用方式气忠,然后得出ChatGPT模型調用方式邻储。
1 GPT3模型調用(ChatGPT官方API請參考第2部分)
? ? ? ? 現(xiàn)有大多數(shù)ChatGPT API實際上是OpenAI GPT3模型接口,模型名稱為“text-davinci-003”旧噪,調用費用為0.02美元/1000tokens吨娜,折合下來差不多0.1元400~500字。這個字數(shù)包括問題和返回結果字數(shù)淘钟。
GPT3模型調用方式如下宦赠,輸入主要有7個參數(shù):
model:模型名稱,text-davinci-003
prompt:問題或待補全內容,例如“how are you”勾扭。
temperature:控制結果隨機性毡琉,0.0表示結果固定,隨機性大可以設置為0.9妙色。
max_tokens:最大返回字數(shù)(包括問題和答案)桅滋,通常漢字占兩個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模型調用基本一致敛滋,各個參數(shù)可參考上文介紹。下面各個參數(shù)目前是類比猜測出來的兴革,沒有conversation_id之類的绎晃。后續(xù),如果新的參數(shù)更新杂曲,將在本文中及時進行更新庶艾,敬請關注。
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數(shù)量為4097咱揍,即max_tokens最大設置為4097減去prompt問題的token數(shù)量。
需要注意棚饵,上述輸入?yún)?shù)增加stream煤裙,即是否采用控制流的方式輸出。
如果stream取值為False噪漾,那么返回結果與第1節(jié)GPT3接口一致硼砰,完全返回全部文字結果,可通過response["choices"][0]["text"]進行讀取欣硼。但是题翰,字數(shù)越多,等待返回時間越長,時間可參考控制流讀出時的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)