在vue项目里如何使用openai

2,041 阅读3分钟

一、前言

最近很火的chatgpt,而官方的api是免费的,出于好奇,我也想试试,前期准备工作就是需要有个openai账号,可移步我上一篇文章,如何申请注册gpt账号(文章没通过,掘金不给发,所以自行申请吧,加油)。

二、过程

1、安装

首先是安装官方的包,包有python版本和nodejs库版本,我们安装nodejs库版本,有了这个我们才能使用具体的功能。建议用国内源cnpm下载,国外源经常下载失败。

cnpm install openai

2、引入和使用

首先是通过require引入两个基础api,

const { Configuration, OpenAIApi } = require("openai");

然后通过官网获取到的密钥,个人的有配额限制,就不放在这里了。

超额了会报429错误,提示你超额了。

image.png

还有使用的模型名称,具体问题等配置项的变量。

// 变量
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就是问题的答案。

image.png

三、 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在服务器端生成完成并返回“最佳”(每个标记具有最高对数概率的那个)。

无法流式传输结果。

与 一起使用时nbest_of控制候选完成的数量并n指定要返回的数量 -best_of必须大于n

PS: 我是地霊殿__三無,一起来见证一下openai吧

Snipaste_2022-07-19_15-30-26.jpg