ChatGPT官方API目前还在内测当中,OpenAI官网上也没有任何接口介绍和文档。这对于开发和调用来说不怎么方便。但是,比较好的地方在于内测过程中调用是免费的,没有次数限制。此外,API接口调用不需要梯子或代理(使用代理反而可能会报错“Error communicating with OpenAI”),只需要API Key就可以了,且当前API Key使用免费。
尽管ChatGPT 官方API还在内测而没有使用文档,但我们知道该模型应该也属于文本补全模型(completion),与GPT3模型保持一致。我们可以类比GPT3模型来猜测其调用方式,然后得出ChatGPT模型调用方式。
1 GPT3模型调用
现有大多数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=
"请关注“乐乐感知学堂”公众号,公众号内输入“名称”即可获得模型名称。",
-
prompt=
"请用100字中文介绍RdChat。",
-
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)
3 ChatGPT API接口效果
下图为调用结果效果图。后续,如果新的参数更新,将在本文中及时进行更新,敬请关注。
转载:https://blog.csdn.net/suiyingy/article/details/128844721