tmaiplugin
Version:
TrainingMaster AIGC Component
60 lines (58 loc) • 3.06 kB
text/typescript
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}) }
}
}