当前位置:   article > 正文

手把手做一个公众号GPT智能客服(七)GPT 接入微信机器人_如何将gpt接入客服服务器

如何将gpt接入客服服务器

第七课:GPT 接入微信机器人

OpenAI API 调动控制器代码

// /controller/openai.js

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

const apiKey = "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"

const configuration = new Configuration({
  apiKey
})

const openAIApi = new OpenAIApi(configuration)

/**
 * 保存用户发送到chatgpt的消息信息
 * prompts 数据结构:
 * {
 *   wxopenid: [
 *     { role: "user", content: Content }
 *   ]
 * }
 */
const prompts = {}

// 处理给chatgpt的数据保存记忆体
function savePrompt(fromusername, content) {
  if (prompts[fromusername]) {
    // 存在添加数据
    prompts[fromusername].push(
      { role: 'user', content }
    )
  } else {
    // 不存在就新建数据
    prompts[fromusername] = [
      { role: 'user', content }
    ]
  }
  return prompts[fromusername]
}

async function getAnswer(fromusername, prompt) {
  const messages = savePrompt(fromusername, prompt)

  const completion = await openAIApi.createChatCompletion({
    model: "gpt-3.5-turbo",
    messages: messages,
  })

  return completion.data.choices[0].message.content
}

module.exports = getAnswer
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51

在消息发送中获取答案

// /controller/switcher.js

const { customerController } = require('./customer')

// +++++++++++++++++++
const getAnswer = require('./openai')
// +++++++++++++++++++

const { getModel, decreaseBalance, getBalance } = require('../model/users')

const { formatMsg } = require('../utils/format')

async function messageController(req, res, next) {
  // 接收到微信方发来的消息并处理
  const msg = formatMsg(req.body)
  
  // 暂存用户发送来的问题
  const content = msg['content']

  // 回复信息
  const {
    fromusername
  } = msg

  msg['createtime'] = Math.floor((new Date().getTime()) / 1000)

  // 生成问题答案逻辑
  const model = await getModel(fromusername)
  if (model && model === 'chatgpt') {
    const balance = await getBalance(fromusername)
    if (balance > 0) {
      msg['content'] = '答案正在准备中...'
      res.render('reply', msg)

      // 扣除账户金额 1
      await decreaseBalance(fromusername)

      // +++++++++++++++++++
      // 获取 chatgpt 的回答
      const answer = await getAnswer(fromusername, content)
      // +++++++++++++++++++

      // 发送客服消息
      await customerController(fromusername, answer)
    } else {
      msg['content'] = '您的账户余额不足,请充值~'
      res.render('reply', msg)
    }
  } else {
    // 转人工服务
  }
}

module.exports = messageController
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54

语言模型的切换

1、添加设置 model的方法

// /model/users.js

//...

// 更改用户模式
async function changeModel(wxOpenId, model) {
  const result = await userModel.findOneAndUpdate({ wxOpenId }, { model})
  return result
}

//...

module.exports = {
  //...
  changeModel
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

2、语言模型切换

// /controller/swither.js

//...

const { getBalance, rechargeAccount, getUser, createAccount, changeModel } = require('../model/users')

async function switcherController(req, res) {
  //...

  switch (requestBody.msgtype) {
    case 'event':
      //...
      switch (requestBody.eventkey) {
        //...
        case 'model_chatgpt':
          await changeModel(fromusername, 'chatgpt')
          res.render('reply', {
            ...requestBody,
            content: '你的身份已经切换为 ChatGPT 模式,机器人为您提供答疑服务 ☕️'
          })
          break
        case 'model_human':
          await changeModel(fromusername, 'human')
          res.render('reply', {
            ...requestBody,
            content: '你的身份已经切换为人工服务模式,很高兴为你答疑解惑 ☕️'
          })
          break
        //...
      }

      //...
  }
}

//...
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36

语音识别接入

  1. 开启语音识别能力

    image-20230502181725855

  2. 解析voice数据 和 文本相同处理

(1)添加 voice类型入口

//...

async function switcherController(req, res) {
  //...

  switch (requestBody.msgtype) {
    case 'voice':
    case 'text':
    //...
  }
}

//...
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

(2)处理语音信息

// /controller/message.js

//...

async function messageController(req, res, next) {
  //...
  
  // 暂存用户发送来的问题
  const content = msg['recognition'] ? msg['recognition'] : msg['content']
	
  //...
}

//...
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

– THE END –

后记

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/100519

推荐阅读
相关标签