OpenAI官方发布ChatGPT API接口gpt-3.5-turbo

目录

 

一、介绍

 二、官方使用案例

 三、我写的案例(支持上下文)


一、介绍

https://platform.openai.com/docs/models/overview

 二、官方使用案例

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

const configuration = new Configuration({
  apiKey: process.env.OPENAI_API_KEY,
});
const openai = new OpenAIApi(configuration);

const completion = await openai.createChatCompletion({
  model: "gpt-3.5-turbo",
  messages: [{role: "user", content: "Hello world"}],
});
console.log(completion.data.choices[0].message);

 三、我写的案例(支持上下文)

let openAiType = 2 //1达芬奇 2turbo

const chatAdd = async (req, res) => { 
  const {
    talkId = '',
    name = '',
    messageType = '1',
    message = '',
    modelType = '1',
    promptType = '1',
    isNeedContext = true,
  } = req.body

    let prompt = ''
      let messages = []
      if (openAiType === 1) {
        if (promptType === '1') {
          if (currentChatList.length > 0 && isNeedContext === true) {
            let shotChatList = currentChatList
            if (currentChatList.length > 6) {
              shotChatList = currentChatList.slice(currentChatList.length - 6)
            }
            shotChatList.forEach((item) => {
              let { messageType, message } = item
              if (messageType === '1') {
                prompt += `YOU:${message}\n`
              } else if (messageType === '2') {
                //message = encodeURIComponent(message)
                prompt += `AI:${message}\n`
              }
            })
          }
          prompt += `YOU:${message}\nAI:`
        } else if (promptType === '2') {
          if (currentChatList.length > 0 && isNeedContext === true) {
            let shotChatList = currentChatList
            if (currentChatList.length > 6) {
              shotChatList = currentChatList.slice(currentChatList.length - 6)
            }
            shotChatList.forEach((item) => {
              const { messageType, message } = item
              if (messageType === '1') {
                prompt += `\n/* Command: ${message} */\n`
              } else if (messageType === '2') {
                //message = encodeURIComponent(message)
                prompt += `${message}\n`
              }
            })
          }
          prompt += `<|endoftext|>/* I start with a blank HTML page, and incrementally modif it via <script> injection. Written for Chrome. */\n/* Command: Add "Hello World", by adding an HTML DOM node */\nvar helloWorld = document.createElement('div');\nhelloWorld.innerHTML = 'Hello World';\ndocument.body.appendChild(helloWorld);\n/* Command: Clear the page. */\nwhile (document.body.firstChild) {\n  document.body.removeChild(document.body.firstChild);\n}\n\n/* Command: ${message} */\n`
        }
      } else if (openAiType === 2) {
        if (currentChatList.length > 0 && isNeedContext === true) {
          let shotChatList = currentChatList
          if (currentChatList.length > 6) {
            shotChatList = currentChatList.slice(currentChatList.length - 6)
          }
          shotChatList.forEach((item) => {
            let { messageType, message } = item
            if (messageType === '1') {
              messages = [...messages, { role: 'user', content: message }]
            } else if (messageType === '2') {
              messages = [...messages, { role: 'assistant', content: message }]
            }
          })
        }
        messages = [...messages, { role: 'user', content: message }]
      }

      let completion
      let historyAccountIndex = currentAccountIndex
      let errorData = ''
      try {
        if (openAiType === 1) {
          let hooks = [
            {
              value: '1',
              lable: 'text-davinci-003',
            },
            {
              value: '2',
              lable: 'code-davinci-002',
            },
          ]
          let resultIndex = hooks.findIndex((item) => item.value === modelType)
          let model = 'text-davinci-003'
          if (resultIndex >= 0) {
            model = hooks[resultIndex].lable
          }
          const completionRes = await openai
            .createCompletion({
              model,
              // prompt:
              //   'YOU:你好\n你好。很高兴见到你。\nYOU:你叫什么名字\n我叫小爱。很高兴见到你!\nYOU:介绍一下元宵节\n',
              prompt,
              max_tokens: 2048,
            })
            .catch((err) => {
              errorData = err
              if (err?.response?.data?.error?.type === 'insufficient_quota') {
                console.log('配额不足,已经自动更新账号')
                const hostname = os.hostname()
                if (hostname !== 'LAPTOP-4KDIA4A3') {
                  customSendEmail({
                    subject: '配额不足,已经自动更新账号',
                    html: `historyAccountIndex:${historyAccountIndex},currentAccountIndex: ${currentAccountIndex}`,
                  })
                }
                changeOpenAI()
              }
            })
          completion = completionRes.data
        } else if (openAiType === 2) {
          const completionRes = await openai
            .createChatCompletion({
              model: 'gpt-3.5-turbo',
              messages,
            })
            .catch((err) => {
              errorData = err
              if (err?.response?.data?.error?.type === 'insufficient_quota') {
                console.log('配额不足,已经自动更新账号')
                const hostname = os.hostname()
                if (hostname !== 'LAPTOP-4KDIA4A3') {
                  customSendEmail({
                    subject: '配额不足,已经自动更新账号',
                    html: `historyAccountIndex:${historyAccountIndex},currentAccountIndex: ${currentAccountIndex}`,
                  })
                }
                changeOpenAI()
              }
            })
          completion = completionRes.data
        }
      } catch (error) {
        res.send({
          code: 200,
          data: {
            historyAccountIndex,
            currentAccountIndex,
            isRobotBusy: true,
            errorData,
          },
          message: '失败-机器人无应答【1】',
        })
        return
      }

      if (
        Array.isArray(completion.choices) &&
        completion.choices.length > 0 &&
        (completion.choices[0].text ||
          (completion.choices[0].message &&
            completion.choices[0].message.content))
      ) {
        const values = []
        let robotMessage
        if (openAiType === 1) {
          robotMessage = completion.choices[0].text
          robotMessage = robotMessage.replace(/\n/, '')
        } else if (openAiType === 2) {
          robotMessage = completion.choices[0].message.content
          robotMessage = robotMessage.replace(/\n/, '').replace(/\n/, '')
        }

        //robotMessage = decodeURIComponent(robotMessage)
        values.push(`(
          '${uid}',
          '${talkId}',
          '${name}',
          '${messageType}',
          '${message}',
          '${now}',
          '${now}',
          '新增'
        )`)
        const uidForRobot = uuidv4()
        values.push(`(
          '${uidForRobot}',
          '${talkId}',
          'robot',
          '2',
          '${robotMessage}',
          '${now + 1000}',
          '${now + 1000}',
          '新增'
        )`)
        const valuesStr = values.join(',')

        let err = await runSql(
          `INSERT INTO chat (
            uid,
            talkId,
            name,
            messageType,
            message,
            createTime,
            updateTime,
            remarks
        )
        VALUES ${valuesStr}`
        )
        if (err) {
          res.send({
            code: 400,
            data: {
              err: err.stack,
            },
            message: '添加失败',
          })
        } else {
          await refreshRedis({ tableName: 'chat' })
          res.send({
            code: 200,
            data: {
              robotMessage,
            },
            message: '添加成功',
          })
        }
      } else {
        res.send({
          code: 400,
          data: {
            currentAccountIndex,
            completion,
          },
          message: '失败-机器人无应答【2】',
        })
      }
}

参考链接:

https://chat.xutongbao.top

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

徐同保

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值