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 _ 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 delay from 'delay'
import { ChatGPTAPI } from 'chatgpt'
@ -613,7 +613,6 @@ export class chatgpt extends plugin {
return false
}
let quotemessage = []
if (chatMessage?.quote) {
chatMessage.quote.forEach(function (item, index) {
@ -631,6 +630,9 @@ export class chatgpt extends plugin {
if (quotemessage.length > 0) {
this.reply(await makeForwardMsg(this.e, quotemessage))
}
if (Config.enableSuggestedResponses && chatMessage.suggestedResponses) {
this.reply(`建议的回复:\n${chatMessage.suggestedResponses}`)
}
}
} else {
await this.reply('你没有配置转语音API或者文字太长了哦我用文本回复你吧', e.isGroup)
@ -638,6 +640,9 @@ export class chatgpt extends plugin {
if (quotemessage.length > 0) {
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)) {
// todo use next api of chatgpt to complete incomplete respoonse
@ -648,11 +653,17 @@ export class chatgpt extends plugin {
logger.error(err)
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 {
await this.reply(`${response}`, e.isGroup)
if (quotemessage.length > 0) {
this.reply(await makeForwardMsg(this.e, quotemessage))
}
if (Config.enableSuggestedResponses && chatMessage.suggestedResponses) {
this.reply(`建议的回复:\n${chatMessage.suggestedResponses}`)
}
}
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.suggestedResponses = response.details.suggestedResponses?.map(s => s.text).join('\n')
errorMessage = ''
break
} catch (error) {
@ -810,6 +822,7 @@ export class chatgpt extends plugin {
return {
text: response.response,
quote: response.quote,
suggestedResponses: response.suggestedResponses,
conversationId: response.conversationId,
clientId: response.clientId,
invocationId: response.invocationId,

View file

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

View file

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

View file

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