mirror of
https://github.com/ikechan8370/chatgpt-plugin.git
synced 2025-12-16 21:37:11 +00:00
feat: 建议回复
This commit is contained in:
parent
dfd1ce469d
commit
3d466f0fee
4 changed files with 30 additions and 6 deletions
17
apps/chat.js
17
apps/chat.js
|
|
@ -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,
|
||||||
|
|
|
||||||
|
|
@ -273,6 +273,12 @@ export function supportGuoba () {
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
field: 'enableSuggestedResponses',
|
||||||
|
label: '是否开启建议回复',
|
||||||
|
bottomHelpMessage: '开启了会像官网上一样,每个问题给出建议的用户问题',
|
||||||
|
component: 'Switch'
|
||||||
|
},
|
||||||
{
|
{
|
||||||
field: 'sydney',
|
field: 'sydney',
|
||||||
label: 'Sydney的设定',
|
label: 'Sydney的设定',
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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 = {}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue