feat: 建议回复

This commit is contained in:
ikechan8370 2023-03-18 11:53:27 +08:00
parent dfd1ce469d
commit 3d466f0fee
4 changed files with 30 additions and 6 deletions

View file

@ -1,6 +1,6 @@
import plugin from '../../../lib/plugins/plugin.js' import plugin from '../../../lib/plugins/plugin.js'
import _ from 'lodash' import _ from 'lodash'
import {Config, defaultOpenAIAPI, defaultOpenAIReverseProxy} from '../utils/config.js' import { Config, defaultOpenAIAPI, defaultOpenAIReverseProxy } from '../utils/config.js'
import { v4 as uuid } from 'uuid' import { v4 as uuid } from 'uuid'
import delay from 'delay' import delay from 'delay'
import { ChatGPTAPI } from 'chatgpt' import { ChatGPTAPI } from 'chatgpt'
@ -613,7 +613,6 @@ export class chatgpt extends plugin {
return false return false
} }
let quotemessage = [] let quotemessage = []
if (chatMessage?.quote) { if (chatMessage?.quote) {
chatMessage.quote.forEach(function (item, index) { chatMessage.quote.forEach(function (item, index) {
@ -631,6 +630,9 @@ export class chatgpt extends plugin {
if (quotemessage.length > 0) { if (quotemessage.length > 0) {
this.reply(await makeForwardMsg(this.e, quotemessage)) this.reply(await makeForwardMsg(this.e, quotemessage))
} }
if (Config.enableSuggestedResponses && chatMessage.suggestedResponses) {
this.reply(`建议的回复:\n${chatMessage.suggestedResponses}`)
}
} }
} else { } else {
await this.reply('你没有配置转语音API或者文字太长了哦我用文本回复你吧', e.isGroup) await this.reply('你没有配置转语音API或者文字太长了哦我用文本回复你吧', e.isGroup)
@ -638,6 +640,9 @@ export class chatgpt extends plugin {
if (quotemessage.length > 0) { if (quotemessage.length > 0) {
this.reply(await makeForwardMsg(this.e, quotemessage)) this.reply(await makeForwardMsg(this.e, quotemessage))
} }
if (Config.enableSuggestedResponses && chatMessage.suggestedResponses) {
this.reply(`建议的回复:\n${chatMessage.suggestedResponses}`)
}
} }
} else if (userSetting.usePicture || (Config.autoUsePicture && response.length > Config.autoUsePictureThreshold)) { } else if (userSetting.usePicture || (Config.autoUsePicture && response.length > Config.autoUsePictureThreshold)) {
// todo use next api of chatgpt to complete incomplete respoonse // todo use next api of chatgpt to complete incomplete respoonse
@ -648,11 +653,17 @@ export class chatgpt extends plugin {
logger.error(err) logger.error(err)
await this.renderImage(e, use !== 'bing' ? 'content/ChatGPT/index' : 'content/Bing/index', response, prompt) await this.renderImage(e, use !== 'bing' ? 'content/ChatGPT/index' : 'content/Bing/index', response, prompt)
} }
if (Config.enableSuggestedResponses && chatMessage.suggestedResponses) {
this.reply(`建议的回复:\n${chatMessage.suggestedResponses}`)
}
} else { } else {
await this.reply(`${response}`, e.isGroup) await this.reply(`${response}`, e.isGroup)
if (quotemessage.length > 0) { if (quotemessage.length > 0) {
this.reply(await makeForwardMsg(this.e, quotemessage)) this.reply(await makeForwardMsg(this.e, quotemessage))
} }
if (Config.enableSuggestedResponses && chatMessage.suggestedResponses) {
this.reply(`建议的回复:\n${chatMessage.suggestedResponses}`)
}
} }
if (use !== 'bing') { if (use !== 'bing') {
// 移除队列首位,释放锁 // 移除队列首位,释放锁
@ -793,6 +804,7 @@ export class chatgpt extends plugin {
}) })
response.quote = response.details.adaptiveCards?.[0]?.body?.[0]?.text?.replace(/\[\^[0-9]+\^\]/g, '').replace(response.response, '').split('\n') response.quote = response.details.adaptiveCards?.[0]?.body?.[0]?.text?.replace(/\[\^[0-9]+\^\]/g, '').replace(response.response, '').split('\n')
} }
response.suggestedResponses = response.details.suggestedResponses?.map(s => s.text).join('\n')
errorMessage = '' errorMessage = ''
break break
} catch (error) { } catch (error) {
@ -810,6 +822,7 @@ export class chatgpt extends plugin {
return { return {
text: response.response, text: response.response,
quote: response.quote, quote: response.quote,
suggestedResponses: response.suggestedResponses,
conversationId: response.conversationId, conversationId: response.conversationId,
clientId: response.clientId, clientId: response.clientId,
invocationId: response.invocationId, invocationId: response.invocationId,

View file

@ -273,6 +273,12 @@ export function supportGuoba () {
] ]
} }
}, },
{
field: 'enableSuggestedResponses',
label: '是否开启建议回复',
bottomHelpMessage: '开启了会像官网上一样,每个问题给出建议的用户问题',
component: 'Switch'
},
{ {
field: 'sydney', field: 'sydney',
label: 'Sydney的设定', label: 'Sydney的设定',

View file

@ -434,9 +434,9 @@ export default class SydneyAIClient {
{ {
source: 'cib', source: 'cib',
optionsSets: [ optionsSets: [
'nlu_direct_response_filter', // 'nlu_direct_response_filter',
'deepleo', 'deepleo',
'disable_emoji_spoken_text', // 'disable_emoji_spoken_text',
'responsible_ai_policy_235', 'responsible_ai_policy_235',
'enablemm', 'enablemm',
toneOption, toneOption,
@ -504,6 +504,7 @@ export default class SydneyAIClient {
const messagePromise = new Promise((resolve, reject) => { const messagePromise = new Promise((resolve, reject) => {
let replySoFar = '' let replySoFar = ''
let adaptiveCardsSoFar = null let adaptiveCardsSoFar = null
let suggestedResponsesSoFar = null
let stopTokenFound = false let stopTokenFound = false
const messageTimeout = setTimeout(() => { const messageTimeout = setTimeout(() => {
@ -584,6 +585,7 @@ export default class SydneyAIClient {
console.log({ replySoFar, message }) console.log({ replySoFar, message })
message.adaptiveCards = adaptiveCardsSoFar message.adaptiveCards = adaptiveCardsSoFar
message.text = replySoFar || message.spokenText message.text = replySoFar || message.spokenText
message.suggestedResponses = suggestedResponsesSoFar || message.suggestedResponses
resolve({ resolve({
message, message,
conversationExpiryTime: event?.item?.conversationExpiryTime conversationExpiryTime: event?.item?.conversationExpiryTime
@ -591,6 +593,7 @@ export default class SydneyAIClient {
return return
} else { } else {
adaptiveCardsSoFar = message.adaptiveCards adaptiveCardsSoFar = message.adaptiveCards
suggestedResponsesSoFar = message.suggestedResponses
} }
const updatedText = messages[0].text const updatedText = messages[0].text
if (!updatedText || updatedText === replySoFar) { if (!updatedText || updatedText === replySoFar) {
@ -643,7 +646,8 @@ export default class SydneyAIClient {
this.cleanupWebSocketConnection(ws) this.cleanupWebSocketConnection(ws)
// message.adaptiveCards[0].body[0].text = replySoFar || message.spokenText // message.adaptiveCards[0].body[0].text = replySoFar || message.spokenText
message.adaptiveCards = adaptiveCardsSoFar message.adaptiveCards = adaptiveCardsSoFar
message.response = replySoFar || message.spokenText message.text = replySoFar || message.spokenText
message.suggestedResponses = suggestedResponsesSoFar || message.suggestedResponses
resolve({ resolve({
message, message,
conversationExpiryTime: event?.item?.conversationExpiryTime conversationExpiryTime: event?.item?.conversationExpiryTime

View file

@ -36,6 +36,7 @@ const defaultConfig = {
sydneyBrainWash: true, sydneyBrainWash: true,
sydneyBrainWashStrength: 15, sydneyBrainWashStrength: 15,
sydneyBrainWashName: 'Sydney', sydneyBrainWashName: 'Sydney',
enableSuggestedResponses: true,
api: defaultChatGPTAPI, api: defaultChatGPTAPI,
apiBaseUrl: 'https://pimon.d201.cn/backend-api', apiBaseUrl: 'https://pimon.d201.cn/backend-api',
apiForceUseReverse: false, apiForceUseReverse: false,
@ -64,7 +65,7 @@ const defaultConfig = {
initiativeChatGroups: [], initiativeChatGroups: [],
enableDraw: true, enableDraw: true,
helloPrompt: '写一段话让大家来找我聊天。类似于“有人找我聊天吗?"这种风格轻松随意一点控制在20个字以内', helloPrompt: '写一段话让大家来找我聊天。类似于“有人找我聊天吗?"这种风格轻松随意一点控制在20个字以内',
version: 'v2.2.0' version: 'v2.2.1'
} }
const _path = process.cwd() const _path = process.cwd()
let config = {} let config = {}