UNPKG

tmaiplugin

Version:

TrainingMaster AIGC Component

60 lines (58 loc) 3.06 kB
import { ChatReponse } from "./declare"; import { fixedJsonString } from "./util/stringutil"; import PluginBase from './aipluginbase' const ROLE_DEFINE = ['你是一名语言专家,擅长用不用的文字表达相同的语意', '你是一位程序设计专家,特别擅长数据分析,内容组织并进行结构化设计,形成Json格式的数据'] const PROMPT:any = [`{{PREFIX}}生成{{COUNT}}句与以下原文意思相似的内容 原文如下:" {{CONTENT}} "`, `请将内容整理,按照[{"content":"相似内容"}]的标准Json数组结构输出。 内容如下:" {{CONTENT}} "` ] /** * 相似问生成插件 */ export class SimilarityPlugin extends PluginBase { /** * 从指定的文本内容中生成相关的问答 * @param {*} content * @param {*} count * @param {*} axiosOption * @returns *///并在答案末尾处必须给出答案内容中的关键词 async execute(params: any): Promise<ChatReponse> { let { content,count, axios } = params; if (!this.gptInstance) return {successed:false}; if (!content) return { successed: false, error: { errcode: 2, errmsg: '缺失参数' } } let chnReg: boolean = /([\u4e00-\u9fa5]|[\ufe30-\uffa0])/.test(content) ///检查源话是否含有中文内容 let engReg: boolean = /[a-zA-Z]/.test(content) ///检查源话是否含有英文内容 ///如果源话是全中文,那么结果中不应该出来英文的相似说法,如果源话是全英文,则结果不能出现全中文的说法 let prefix = (!chnReg && engReg) ? '请用英文' : ((chnReg && !engReg) ? '请用中文' : '') const text = PROMPT[0].replace('{{CONTENT}}', content).replace('{{PREFIX}}', prefix).replace('{{COUNT}}', count) let message = [ { role: 'system', content: ROLE_DEFINE[0] }, { role: 'user', content: text }, ] console.log('Similarity Message', message) let result:any = await this.gptInstance.chatRequest(text, { }, axios); if (!result.successed && result.error != 'content_filter') { console.log('network error,retry onemore time') result = await this.gptInstance.chatRequest(message, {}, axios); } let answerString = result.message[0].message.content.trim().replace(/\t|\n|\v|\r|\f/g, ''); let orgJsonPrompt = [ { role: 'system', content: ROLE_DEFINE[1] }, { role: 'user', content: PROMPT[1].replace('{{CONTENT}}', answerString) } ] console.log('orgJsonPrompt', orgJsonPrompt) let fixedJsonResult: any = await this.gptInstance.chatRequest(orgJsonPrompt, { replyCounts: 1 }, {}) if (fixedJsonResult.successed) { answerString = fixedJsonResult.message[0].message.content.trim().replace(/\t|\n|\v|\r|\f/g, ''); } let jsonObj = fixedJsonResult.successed ? fixedJsonString(answerString) : []; return { successed: jsonObj.length > 0, message: jsonObj.map(item=>{return item.content}) } } }