首页 > 编程语言 >ChatGPT学习心得一(使用node+react做了一个案例)

ChatGPT学习心得一(使用node+react做了一个案例)

时间:2023-06-11 22:32:16浏览次数:106  
标签:node const currentChatList react item let openai ChatGPT message


ChatGPT学习心得一(使用node+react做了一个案例)_redis

ChatGPT学习心得一(使用node+react做了一个案例)


 

项目地址

http://chat.xutongbao.top

项目截图

ChatGPT学习心得一(使用node+react做了一个案例)_ci_02

ChatGPT学习心得一(使用node+react做了一个案例)_redis_03编辑

ChatGPT学习心得一(使用node+react做了一个案例)_JSON_04

ChatGPT学习心得一(使用node+react做了一个案例)_redis_03编辑

ChatGPT学习心得一(使用node+react做了一个案例)_redis_06

ChatGPT学习心得一(使用node+react做了一个案例)_redis_03编辑 

ChatGPT学习心得一(使用node+react做了一个案例)_redis_08

ChatGPT学习心得一(使用node+react做了一个案例)_redis_03编辑

ChatGPT学习心得一(使用node+react做了一个案例)_redis_10

ChatGPT学习心得一(使用node+react做了一个案例)_redis_03编辑

使用技术栈

node+SQLite+redis+nginx+log4js+express+jenkins+cdn+react+antd+react-scrollbars-custom+iconfont+webpack+postman+axios+redux+immutable+npm+yarn+openai等等

官网

https://openai.com/blog/chatgpt/

ChatGPT学习心得一(使用node+react做了一个案例)_redis_12

ChatGPT学习心得一(使用node+react做了一个案例)_redis_03编辑

官方聊天应用

https://chat.openai.com/chat/79014944-0302-45ff-bd25-073803e37216

ChatGPT学习心得一(使用node+react做了一个案例)_JSON_14

ChatGPT学习心得一(使用node+react做了一个案例)_redis_03编辑

官方Javascript沙盒应用

https://platform.openai.com/codex-javascript-sandbox

ChatGPT学习心得一(使用node+react做了一个案例)_ci_16

ChatGPT学习心得一(使用node+react做了一个案例)_redis_03编辑

 官方技术文档

https://platform.openai.com/docs/introduction

ChatGPT学习心得一(使用node+react做了一个案例)_ci_18

ChatGPT学习心得一(使用node+react做了一个案例)_redis_03编辑

 

node调用ChatGPT的API

装包:

yarn add openai

ChatGPT学习心得一(使用node+react做了一个案例)_redis_03

获取API Keys:

https://platform.openai.com/docs/api-reference/introduction

ChatGPT学习心得一(使用node+react做了一个案例)_JSON_21

ChatGPT学习心得一(使用node+react做了一个案例)_redis_03编辑

https://platform.openai.com/account/api-keys

ChatGPT学习心得一(使用node+react做了一个案例)_JSON_23

ChatGPT学习心得一(使用node+react做了一个案例)_redis_03编辑

 获取Organization ID:

ChatGPT学习心得一(使用node+react做了一个案例)_redis_25

ChatGPT学习心得一(使用node+react做了一个案例)_redis_03编辑

https://platform.openai.com/account/org-settings

ChatGPT学习心得一(使用node+react做了一个案例)_redis_27

ChatGPT学习心得一(使用node+react做了一个案例)_redis_03编辑node代码:

const { Configuration, OpenAIApi } = require('openai')

const configuration = new Configuration({
  organization: 'xxx',
  apiKey: 'xxx',
})
const openai = new OpenAIApi(configuration)

//增加
const chatAdd = async (req, res) => {
  const {
    talkId = '',
    name = '',
    messageType = '1',
    message = '',
    modelType = '1',
    promptType = '1',
  } = req.body
  const uid = uuidv4()
  const now = Date.now()
  const talkRedis = await redisClient.get('talk')
  let talkList = JSON.parse(talkRedis)
  const resultIndex = talkList.findIndex((item) => item.uid === talkId)
  if (resultIndex >= 0) {
    if (message && message.trim() !== '') {
      const chatRedis = await redisClient.get('chat')
      let chatList = JSON.parse(chatRedis)
      chatList = Array.isArray(chatList) ? chatList : []
      let currentChatList = chatList
        .filter((item) => item.talkId === talkId)
        .sort((a, b) => a.createTime - b.createTime)

      let prompt = ''
      if (promptType === '1') {
        if (currentChatList.length > 0) {
          let shotChatList = currentChatList
          if (currentChatList.length > 10) {
            shotChatList = currentChatList.slice(currentChatList.length - 10)
          }
          shotChatList.forEach((item) => {
            let { messageType, message } = item
            if (messageType === '1') {
              prompt += `YOU:${message}\n`
            } else if (messageType === '2') {
              //message = encodeURIComponent(message)
              prompt += `${message}\n`
            }
          })
        }
        prompt += `YOU:${message}\n`
      } else if (promptType === '2') {
        if (currentChatList.length > 0) {
          let shotChatList = currentChatList
          if (currentChatList.length > 10) {
            shotChatList = currentChatList.slice(currentChatList.length - 10)
          }          
          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`
      }

      let completion
      try {
        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,
        })
        completion = completionRes.data
      } catch (error) {
        res.send({
          code: 200,
          data: {
            isRobotBusy: true,
          },
          message: '失败-机器人无应答',
        })
        return
      }

      if (
        Array.isArray(completion.choices) &&
        completion.choices.length > 0 &&
        completion.choices[0].text
      ) {
        const values = []
        let robotMessage = completion.choices[0].text
        robotMessage = robotMessage.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: {
              //isRobotBusy: true,
              prompt,
              robotMessage,
            },
            message: '添加成功',
          })
        }
      } else {
        res.send({
          code: 400,
          data: {},
          message: '失败-机器人无应答',
        })
      }
    } else {
      res.

标签:node,const,currentChatList,react,item,let,openai,ChatGPT,message
From: https://blog.51cto.com/xutongbao/6459166

相关文章

  • Win7使用最新的node.js(版本18.16.0)
    截至本文的发布时间2023.06.11,前端开发基础工具node.js的最新版本是18.16.0LTS可能有人要问,为什么要研究node.js在Win7系统下的兼容情况呢?你直接用Win10不就行了?如果你可以直接使用Win10,显然你不是这篇文章的推荐阅读对象,因为某些开发环境比较特殊,只能使用Win7而不允许使用Win......
  • 【React工作记录九十九】ant design mobile实现tab滚动效果和闪屏小记
    前言大家好我是歌谣今天继续给大家带来前端工作中遇到的实际性问题如何实现一个tab效果以及闪屏问题效果演示(tab滚动效果)案例遇到问题先去查api查百度一开始我以为是安卓的功能直接api打开<DemoBlocktitle='超长自动滚动'padding='0'><TabsdefaultActiveKey=......
  • 文心一言 VS 讯飞星火 VS chatgpt (38)-- 算法导论5.4 2题
    二、假设我们将球投入到b个箱子里,直到某个箱子中有两个球。每一次投掷都是独立的并且每个球落入任何箱子的机会均等。请问投球次数期望是多少?文心一言:这是一个典型的鸽巢原理(PigeonholePrinciple)问题。假设每次投球时,每个箱子有1/b的概率被选中。我们设投球次数为x。我们首先考虑......
  • 文心一言 VS 讯飞星火 VS chatgpt (38)-- 算法导论5.4 2题
    二、假设我们将球投入到b个箱子里,直到某个箱子中有两个球。每一次投掷都是独立的并且每个球落入任何箱子的机会均等。请问投球次数期望是多少?文心一言:这是一个典型的鸽巢原理(PigeonholePrinciple)问题。假设每次投球时,每个箱子有1/b的概率被选中。我们设投球次数为x。我们首先......
  • react antd 表头分组渲染的问题记录
    importReact,{useEffect}from'react'import{observer}from'mobx-react'import{get}from'lodash'import{Modal}from'antd'importSelfTablefrom'@/view/common/self_table/self-table'impo......
  • ChatGPT 五个写论文的神技巧,让你的老师对你刮目相看!
     导读:ChatGPT这款AI工具在推出两个月内就累积了超过1亿用户。我们向您展示如何使用ChatGPT进行写作辅助,以及其他一些有用的写作技巧。本文字数:2000,阅读时长大约:12分钟ChatGPT这款AI工具在推出两个月内就累积了超过1亿用户。最大的亮点之一是它能够在几秒钟内撰写各种内容,包......
  • 使用chatgpt根据openAI API key自定义关键词批量写文章
    使用chatgpt根据openAIAPIkey自定义关键词批量写文章使用方法:1.api.txt里放openaikey,每行一个,程序会随机使用一个KEY2.key.txt放关键词,根据关键词写文章。3.写好的文章会自动保存到wenzhang文件夹下。 写文章速度以来openaikey及本身网络速度。本视频录制采用1核1G机器运......
  • 每日一个 ChatGPT 使用小技巧系列之2 - 用 ChatGPT 研读 SAP ABAP BAPI 的实现源代码
    本系列之前的文章:与其整天担心AI会取代程序员,不如先让AI帮助自己变得更强大每日一个ChatGPT使用小技巧系列之1-给出提纲或者素材,让ChatGPT帮你写作正好昨天有朋友向我发起知乎咨询,询问关于SAPABAPBAPIbapi_vendor_create的使用问题,本文就来说一说:bapi_v......
  • 人工智能和ChatGPT深度学习相关资源列表
    作者:DerrickHarris,MattBornstein,GuidoAppenzellerResearchinartificialintelligenceisincreasingatanexponentialrate.It’sdifficultforAIexpertstokeepupwitheverythingnewbeingpublished,andevenharderforbeginnerstoknowwheretostart.......
  • vue报错Invalid VNode type: undefined
    报错项目启动后,部分内容没有显示出来。打开console后,显示[Vuewarn]:InvalidVNodetype:undefined(undefined)处理引入“defineAsyncComponent”实现异步引入。import{defineAsyncComponent}from'vue'。问题解决了。......