一、前言
最近很火的chatgpt,而官方的api是免费的,出于好奇,我也想试试,前期准备工作就是需要有个openai账号,可移步我上一篇文章,如何申请注册gpt账号(文章没通过,掘金不给发,所以自行申请吧,加油)。
二、过程
1、安装
首先是安装官方的包,包有python版本和nodejs库版本,我们安装nodejs库版本,有了这个我们才能使用具体的功能。建议用国内源cnpm下载,国外源经常下载失败。
cnpm install openai
2、引入和使用
首先是通过require引入两个基础api,
const { Configuration, OpenAIApi } = require("openai");
然后通过官网获取到的密钥,个人的有配额限制,就不放在这里了。
超额了会报429错误,提示你超额了。
还有使用的模型名称,具体问题等配置项的变量。
// 变量
const aikey = "sk-xzxxxxxxxxxxxxx"
const aimode = "text-davinci-002"
const questions = "你是ai,会带来什么?"
然后通过Configuration和OpenAIApi,搞定我们请求的header参数,大部分都是必须携带apiKey参数。
const configuration = new Configuration({
apiKey: aikey,
'Content-Type': 'application/json',
});
const openai = new OpenAIApi(configuration);
最后就是调用openai携带的createCompletion函数,该函数将会返回文本类型
let response
try{
response = await openai.createCompletion({
model: aimode,
prompt: questions,
temperature: 0.5,
max_tokens: 600,
top_p: 1,
frequency_penalty: 1,
presence_penalty: 1.0,
stop: ["ai"],
});
console.log(response)
}catch(e){
}
触发请求就能得到这样子的效果,返回的response.choices[0].text就是问题的答案。
三、 createCompletion函数细节讲解
1、model
作为必要参数,而且本文选用的是问题+答案的模式,所以我们可选用的模型有
text-davinci-003, text-davinci-002, text-curie-001, text-babbage-001, text-ada-001,
上述模型不具备上下文聊天的能力,要聊天的话,请使用createChatCompletion函数,后面抽空整理一下,
可用模型有gpt-4、gpt-4-0314、gpt-4-32k、gpt-4-32k-0314、gpt-3.5-turbo、gpt-3.5-turbo-0301
其他模型可以访问该网址 查看。
2、prompt
生成结果的提示文本,即你想要得到的内容描述。
3、suffix
加在生成结果的本文后缀。
4、max_tokens
生成结果时的最大 tokens 数,不能超过模型的上下文长度,一般最大可设置为2048,新的gpt-4似乎就是4096。
tokens数和字符之间换算,大概就是:这相当于大约一个字符的 3/4(所以 100 个tokens数 ~= 75 个英文字符)
更精确的可以通过 OpenAI Tokenizer分词器去计算。
5、temperature
控制结果的随机性,范围在0~2, 0是固定结果,值越大结果越随机,
6、top_p
跟temperature类似,不过值在0~1之间,默认值为1,如果设置成0.1,则代表取得是前10%概率质量的结果,描述上有点模糊,建议多试试。
7、n
每个问题prompt要给的答案数,这里设置多了,会快速消耗配额的,请注意。
8、stream
是否返回部分进度。
9、logprobs
类似日志的东西,没用过。
10、echo
除了完成之外回显提示。
11、stop
最大长度为 4 的字符串列表,一旦生成的 tokens 包含其中的内容,将停止生成并返回结果。
12、presence_penalty
主题的重复度,区间也是-2~2, -2的重复度最高,基本上是围绕一个主题来谈问题
13、frequency_penalty
字符的重复度,区间是-2~2, -2的重复字符最多
14、best_of
best_of在服务器端生成完成并返回“最佳”(每个标记具有最高对数概率的那个)。
无法流式传输结果。
与 一起使用时n,best_of控制候选完成的数量并n指定要返回的数量 -best_of必须大于n。
PS: 我是地霊殿__三無,一起来见证一下openai吧