tmaiplugin
Version:
TrainingMaster AIGC Component
96 lines (95 loc) • 4.77 kB
JavaScript
;
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.CommentPlugin = void 0;
const stringutil_1 = require("./util/stringutil");
const aipluginbase_1 = __importDefault(require("./aipluginbase"));
const ROLE_DEFINE = ['你是一名专业的知识评论专家,擅长对知识问答提供非常有见底的分析,并给出结论',
'你是一位程序设计专家,特别擅长数据分析,内容组织并进行结构化设计,形成Json格式的数据'];
const PROMPT = [
`根据以下知识提问内容以及回答结果进行分析,对回答结果内容进行的点评,给出一段不超过200字的评语,并按照100分制给出回答结果得分:
知识提问内容如下:"
{{QUESTION}}"
----
回答结果如下:"
{{ANSWER}}
"`,
`请将内容按照{"comment":"点评内容","score":"得分"}的标准Json结构输出。
内容如下:"
{{CONTENT}}
"`
];
/**
* 问答内容点评提插件
*/
class CommentPlugin extends aipluginbase_1.default {
/**
* 从指定的文本内容中生成相关的问答
* @param {*} content
* @param {*} count
* @param {*} axiosOption
* @returns
*/ //并在答案末尾处必须给出答案内容中的关键词
execute(params) {
return __awaiter(this, void 0, void 0, function* () {
let { question, answer, axios } = params;
if (!this.gptInstance)
return { successed: false };
if (!question || !answer)
return { successed: false, error: { errcode: 2, errmsg: '缺失参数' } };
let message = [
{ role: 'system', content: ROLE_DEFINE[0] },
{ role: 'user', content: PROMPT[0].replace('{{QUESTION}}', question).replace('{{ANSWER}}', answer) },
];
console.log('Comment Message', message);
let result = yield this.gptInstance.chatRequest(message, {}, axios);
///如果请求发生了网络错误(不是内容合规问题),则再重试一次,如果任然有错则放弃
if (!result.successed && result.error != 'content_filter') {
console.log('network error,retry onemore time');
result = yield this.gptInstance.chatRequest(message, {}, axios);
}
if (result.successed && result.message) {
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) : [];
///能够提取到内容
if (jsonObj.length)
return Object.assign({ successed: true }, jsonObj[0]);
///回答的内容非JSON格式,自己来提取算了
console.log('自己组装');
let matched = answerString.match(/\d+分/g), score = 0;
if (matched && matched.length) {
score = Number(matched[0].replace('分', ''));
}
return { successed: true, comment: answerString, score };
}
return { successed: false };
});
}
}
exports.CommentPlugin = CommentPlugin;
/**
* 点评问题回答的评价
* @param question
* @param answer
* @param axiosOption
*/