diff --git a/apps/chat.js b/apps/chat.js index 350e44f..df61fc8 100644 --- a/apps/chat.js +++ b/apps/chat.js @@ -1916,7 +1916,11 @@ export class chatgpt extends plugin { }) // 获取图片资源 const image = await getImg(e) - let response = await client.sendMessage(prompt, conversation?.conversationId, image ? image[0] : undefined) + let response = await client.sendMessage(prompt, { + e, + chatId: conversation?.conversationId, + image: image ? image[0] : undefined + }) return response } case 'azure': { diff --git a/resources/view/setting_view.json b/resources/view/setting_view.json index 487dfd7..5fa743a 100644 --- a/resources/view/setting_view.json +++ b/resources/view/setting_view.json @@ -778,6 +778,11 @@ "label": "序列化设定", "data": "xhPromptSerialize" }, + { + "type": "check", + "label": "运行执行设定中的代码", + "data": "xhPromptEval" + }, { "type": "textarea", "label": "设定", diff --git a/utils/config.js b/utils/config.js index d4780b2..9895370 100644 --- a/utils/config.js +++ b/utils/config.js @@ -59,6 +59,7 @@ const defaultConfig = { xhMaxTokens: 1024, xhPromptSerialize: false, xhPrompt: '', + xhPromptEval: false, xhRetRegExp: '', xhRetReplace: '', promptPrefixOverride: 'Your answer shouldn\'t be too verbose. Prefer to answer in Chinese.', diff --git a/utils/xinghuo/xinghuo.js b/utils/xinghuo/xinghuo.js index 12257c0..84f5df8 100644 --- a/utils/xinghuo/xinghuo.js +++ b/utils/xinghuo/xinghuo.js @@ -375,7 +375,10 @@ export default class XinghuoClient { }) } - async sendMessage(prompt, chatId, image) { + async sendMessage(prompt, option) { + let chatId = option?.chatId + let image = option?.image + // 对星火预设的问题进行重写,避免收到预设回答 prompt = this.promptBypassPreset(prompt) if (Config.xhmode == 'api' || Config.xhmode == 'apiv2' || Config.xhmode == 'assistants') { @@ -392,6 +395,18 @@ export default class XinghuoClient { } else { Prompt = Config.xhPrompt ? [{ "role": "user", "content": Config.xhPrompt }] : [] } + if(Config.xhPromptEval) { + Prompt.forEach(obj => { + try { + obj.content = obj.content.replace(/{{(.*?)}}/g, (match, variable) => { + return Function(`"use strict";return ((e)=>{return ${variable} })`)()(option.e) + }) + } catch (error) { + logger.error(error) + } + }) + } + let { response, id } = await this.apiMessage(prompt, chatId, Prompt) if (Config.xhRetRegExp) { response = response.replace(new RegExp(Config.xhRetRegExp, 'g'), Config.xhRetReplace)