找回密码
 立即注册
查看: 531|回复: 0

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

[复制链接]

2

主题

4

回帖

25

积分

新手上路

积分
25
发表于 2023-6-26 10:07:05 | 显示全部楼层 |阅读模式
免费chatGPT体验入口:
http://chat.xutongbao.top/
目录

一、介绍
二、官方使用案例
三、我写的案例(撑持上下文)
<hr/>
一、介绍

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 = &#39;&#39;,
    name = &#39;&#39;,
    messageType = &#39;1&#39;,
    message = &#39;&#39;,
    modelType = &#39;1&#39;,
    promptType = &#39;1&#39;,
    isNeedContext = true,
  } = req.body

    let prompt = &#39;&#39;
      let messages = []
      if (openAiType === 1) {
        if (promptType === &#39;1&#39;) {
          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 === &#39;1&#39;) {
                prompt += `YOU:${message}\n`
              } else if (messageType === &#39;2&#39;) {
                //message = encodeURIComponent(message)
                prompt += `AI:${message}\n`
              }
            })
          }
          prompt += `YOU:${message}\nAI:`
        } else if (promptType === &#39;2&#39;) {
          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 === &#39;1&#39;) {
                prompt += `\n/* Command: ${message} */\n`
              } else if (messageType === &#39;2&#39;) {
                //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(&#39;div&#39;);\nhelloWorld.innerHTML = &#39;Hello World&#39;;\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 === &#39;1&#39;) {
              messages = [...messages, { role: &#39;user&#39;, content: message }]
            } else if (messageType === &#39;2&#39;) {
              messages = [...messages, { role: &#39;assistant&#39;, content: message }]
            }
          })
        }
        messages = [...messages, { role: &#39;user&#39;, content: message }]
      }

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

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

        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: &#39;添加掉败&#39;,
          })
        } else {
          await refreshRedis({ tableName: &#39;chat&#39; })
          res.send({
            code: 200,
            data: {
              robotMessage,
            },
            message: &#39;添加成功&#39;,
          })
        }
      } else {
        res.send({
          code: 400,
          data: {
            currentAccountIndex,
            completion,
          },
          message: &#39;掉败-机器人无应答【2】&#39;,
        })
      }
}

参考链接:
ChatGPT学习心得一(使用node+react做了一个案例)_徐同保的博客-CSDN博客

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|T9AI - 深度人工智能平台 ( 沪ICP备2023010006号 )

GMT+8, 2024-11-24 11:03 , Processed in 0.056503 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表