diff --git a/apps/chat.js b/apps/chat.js index c960c8b..7922908 100644 --- a/apps/chat.js +++ b/apps/chat.js @@ -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, diff --git a/guoba.support.js b/guoba.support.js index 62400a5..e506e2d 100644 --- a/guoba.support.js +++ b/guoba.support.js @@ -273,6 +273,12 @@ export function supportGuoba () { ] } }, + { + field: 'enableSuggestedResponses', + label: '是否开启建议回复', + bottomHelpMessage: '开启了会像官网上一样,每个问题给出建议的用户问题', + component: 'Switch' + }, { field: 'sydney', label: 'Sydney的设定', diff --git a/utils/SydneyAIClient.js b/utils/SydneyAIClient.js index dea5dcb..02d7ba0 100644 --- a/utils/SydneyAIClient.js +++ b/utils/SydneyAIClient.js @@ -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 diff --git a/utils/config.js b/utils/config.js index 88bf6fc..438e314 100644 --- a/utils/config.js +++ b/utils/config.js @@ -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 = {}