UNPKG

tmaiplugin

Version:

TrainingMaster AIGC Component

78 lines (77 loc) 4.23 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.SimilarityPlugin = void 0; const stringutil_1 = require("./util/stringutil"); const aipluginbase_1 = __importDefault(require("./aipluginbase")); const ROLE_DEFINE = ['你是一名语言专家,擅长用不用的文字表达相同的语意', '你是一位程序设计专家,特别擅长数据分析,内容组织并进行结构化设计,形成Json格式的数据']; const PROMPT = [`{{PREFIX}}生成{{COUNT}}句与以下原文意思相似的内容 原文如下:" {{CONTENT}} "`, `请将内容整理,按照[{"content":"相似内容"}]的标准Json数组结构输出。 内容如下:" {{CONTENT}} "` ]; /** * 相似问生成插件 */ class SimilarityPlugin extends aipluginbase_1.default { /** * 从指定的文本内容中生成相关的问答 * @param {*} content * @param {*} count * @param {*} axiosOption * @returns */ //并在答案末尾处必须给出答案内容中的关键词 execute(params) { return __awaiter(this, void 0, void 0, function* () { let { content, count, axios } = params; if (!this.gptInstance) return { successed: false }; if (!content) return { successed: false, error: { errcode: 2, errmsg: '缺失参数' } }; let chnReg = /([\u4e00-\u9fa5]|[\ufe30-\uffa0])/.test(content); ///检查源话是否含有中文内容 let engReg = /[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 = yield this.gptInstance.chatRequest(text, {}, axios); if (!result.successed && result.error != 'content_filter') { console.log('network error,retry onemore time'); result = yield 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 = yield 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 ? (0, stringutil_1.fixedJsonString)(answerString) : []; return { successed: jsonObj.length > 0, message: jsonObj.map(item => { return item.content; }) }; }); } } exports.SimilarityPlugin = SimilarityPlugin;