Commit 28fae881 authored by 周成波's avatar 周成波

参数加密

parent 9c33cb2b
......@@ -11,6 +11,7 @@
"@element-plus/icons-vue": "^2.1.0",
"axios": "^1.6.1",
"bootstrap": "^5.3.3",
"crypto-js": "^4.2.0",
"element-plus": "^2.4.2",
"file-saver": "^2.0.5",
"pinia": "^2.1.7",
......@@ -21,6 +22,7 @@
"devDependencies": {
"@rushstack/eslint-patch": "^1.3.3",
"@tsconfig/node18": "^18.2.2",
"@types/crypto-js": "^4.2.2",
"@types/file-saver": "^2.0.7",
"@types/node": "^18.18.9",
"@vitejs/plugin-vue": "^4.4.0",
......@@ -376,6 +378,12 @@
"dev": true,
"license": "MIT"
},
"node_modules/@types/crypto-js": {
"version": "4.2.2",
"resolved": "https://registry.npmjs.org/@types/crypto-js/-/crypto-js-4.2.2.tgz",
"integrity": "sha512-sDOLlVbHhXpAUAL0YHDUUwDZf3iN4Bwi4W6a0W0b+QcAezUbRtH4FVb+9J4h+XFPW7l/gQ9F8qC7P+Ec4k8QVQ==",
"dev": true
},
"node_modules/@types/estree": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
......@@ -1282,6 +1290,11 @@
"node": ">= 8"
}
},
"node_modules/crypto-js": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz",
"integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q=="
},
"node_modules/cssesc": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
......
......@@ -15,6 +15,7 @@
"@element-plus/icons-vue": "^2.1.0",
"axios": "^1.6.1",
"bootstrap": "^5.3.3",
"crypto-js": "^4.2.0",
"element-plus": "^2.4.2",
"file-saver": "^2.0.5",
"pinia": "^2.1.7",
......@@ -25,6 +26,7 @@
"devDependencies": {
"@rushstack/eslint-patch": "^1.3.3",
"@tsconfig/node18": "^18.2.2",
"@types/crypto-js": "^4.2.2",
"@types/file-saver": "^2.0.7",
"@types/node": "^18.18.9",
"@vitejs/plugin-vue": "^4.4.0",
......
......@@ -2,13 +2,14 @@
* 相关接口
*/
import request from '@/api/request'
import { enc } from 'crypto-js';
export default {
submitLLM(prompt: string, llm: string = "gpt", history: Wm.PromptHistory[] = []): Promise<string> {
submitLLM(prompt: string, llm: string = "gpt", history: Wm.PromptHistory[] = [], task_id: string = "-", encrypt: string = "false"): Promise<string> {
if (!prompt) {
return Promise.reject("输入不能为空");
}
const post_data = { source_text: prompt, history: history, llm: llm }
const post_data = { source_text: prompt, history: history, llm: llm, task_id: task_id, encrypt: encrypt }
return request.post('/text2video/text2llm', post_data)
.then((res: any) => {
// console.log(res);
......@@ -36,6 +37,7 @@ export default {
seed: string = "-1",
steps: string = "25",
cfg_scale: string = "9",
encrypt: string = "false"
): Promise<{"domain_image_path": string, "local_image_path": string}> {
if (!prompt) {
return Promise.reject("SD提示词不能为空");
......@@ -51,6 +53,7 @@ export default {
width: width,
height: height,
cfg_scale: cfg_scale,
encrypt: encrypt,
}
return request.post('/text2video/text2img', post_data)
.then((res: any) => {
......@@ -110,11 +113,11 @@ export default {
});
},
submitTranslateToEn(input_string: string): Promise<string> {
submitTranslateToEn(input_string: string, task_id: string = "-", encrypt: string = "false"): Promise<string> {
if (!input_string) {
return Promise.reject("输入不能为空");
}
const post_data = { input_string: input_string }
const post_data = { input_string: input_string, task_id: task_id, encrypt: encrypt }
return request.post('/text2video/translate_to_en', post_data)
.then((res: any) => {
// console.log(res);
......@@ -148,4 +151,22 @@ export default {
return Promise.reject(`add_text_to_img接口通讯失败:${JSON.stringify(err.message)}`);
});
},
submitTest(prompt: string): Promise<string> {
const post_data = { source_text: prompt }
return request.post('/text2video/test', post_data)
.then((res: any) => {
// console.log(res);
if (res && res.code === 0) {
return res.data.result;
} else {
const errorMessage = res ? res.message : "未知错误";
return Promise.reject(errorMessage);
}
})
.catch((err: any) => {
console.log(`err = ${JSON.stringify(err)}`);
return Promise.reject(`与Test Api通讯失败:${JSON.stringify(err.message)}`);
});
},
}
import _cryptoJs from 'crypto-js';
export default class utils {
// 格式化为json字符串
static formatJson(jsonString: string) {
......@@ -69,4 +71,15 @@ export default class utils {
return /^[!-\/:-@\[-`{-~\p{P}\p{S}\s]*$/u.test(str);
}
// 加密
static aesEncrypt(word: string) {
var key = _cryptoJs.enc.Utf8.parse('e6ef616dc57343248f6b3e98a07e1dde');
var srcs = _cryptoJs.enc.Utf8.parse(word);
var encrypted = _cryptoJs.AES.encrypt(srcs, key, {
mode: _cryptoJs.mode.ECB,
padding: _cryptoJs.pad.Pkcs7
});
return encrypted.toString();
}
}
......@@ -83,6 +83,9 @@ const marketing_template = reactive({
});
onMounted(() => {
// 初始化task_id
form.task_id = utils.genDateTimeStr();
console.log(form.task_id)
// 初始化示例数据
onChangeScreen(form.screen);
// 初始化密码框
......@@ -97,10 +100,10 @@ const delay = (ms: any) => new Promise(res => setTimeout(res, ms));
const onSubmitGpt = () => {
text2videoService
.submitLLM(form.chatgpt_prompt, wen_an_llm.api)
.submitLLM(utils.aesEncrypt(form.chatgpt_prompt), utils.aesEncrypt(wen_an_llm.api), [], form.task_id, "true")
.then((result: string) => {
console.log(form.chatgpt_prompt);
console.log(result);
// console.log(form.chatgpt_prompt);
// console.log(result);
form.chatgpt_answer = result;
})
.catch((error: any) => {
......@@ -124,7 +127,7 @@ const onAdaptRoles = async () => {
try {
form.chatgpt_answer_roles = [];
const adapt_restrict = `请理解这个故事:“${form.chatgpt_answer}”,给出这个故事中的所有角色,多个角色以逗号分隔。\n要求:只返回角色名称即可,不要添加其他的内容。`;
let roles = await text2videoService.submitLLM(adapt_restrict, role_llm.api);
let roles = await text2videoService.submitLLM(utils.aesEncrypt(adapt_restrict), utils.aesEncrypt(role_llm.api), [], form.task_id, "true");
form.all_roles = roles.replace(/。|(|)/g, '').replace(/、/g, ',');
console.log(form.all_roles);
const roles_arr = form.all_roles.split(/[,,]/);
......@@ -136,7 +139,7 @@ const onAdaptRoles = async () => {
// const adapt_attribute_restrict = `根据这个故事:“${form.chatgpt_answer}”,你认为这个角色:“${one_role}”是“${String(attribute_options)}”中的哪一种?请返回选择的结果。\n要求:只返回选择的结果即可,不要添加其他的内容。`;
// const adapt_attribute_restrict = `你认为这个角色:“${one_role}”是“${String(attribute_options)}”中的哪一种?请返回选择的结果。\n要求:只返回选择的结果即可,不要添加其他的内容。`;
const adapt_attribute_restrict = `故事全文:“${form.chatgpt_answer}”,请理解故事全文,然后判断:“${one_role}”是“${String(attribute_options)}”中的哪一种?请返回选择的结果。\n要求:只返回选择的结果即可,不要添加其他的内容。`;
let attribute = await text2videoService.submitLLM(adapt_attribute_restrict, role_llm.api);
let attribute = await text2videoService.submitLLM(utils.aesEncrypt(adapt_attribute_restrict), utils.aesEncrypt(role_llm.api), [], form.task_id, "true");
console.log('dddddddd', attribute)
if (attribute_options.includes(attribute)) {
form.chatgpt_answer_roles.push({
......@@ -194,14 +197,14 @@ const onAdaptRolesKeywords = async () => {
身体(皮毛,羽毛,鳞片,肤色等,可以发挥想象进行补充,没有就不提供)`;
}
adapt_keyword_restrict = adapt_keyword_restrict + temp_restrict + "。回答限制在30个字左右。";
let keywords = await text2videoService.submitLLM(adapt_keyword_restrict, role_keywords_llm.api);
let keywords = await text2videoService.submitLLM(utils.aesEncrypt(adapt_keyword_restrict), utils.aesEncrypt(role_keywords_llm.api), [], form.task_id, "true");
keywords = keywords.replace(/。/g, '').replace(/、/g, ',');
one_role.角色关键词 = keywords;
await delay(100);
// const adapt_attribute_restrict_en = `你现在扮演专业的英语翻译的角色。请将这段文字“${keywords}”翻译为英语。\n要求:只返回英语即可,不要返回其他内容。`;
// let keywords_en = await text2videoService.submitLLM(adapt_attribute_restrict_en, role_keywords_llm.api);
let keywords_en = await text2videoService.submitTranslateToEn(keywords);
let keywords_en = await text2videoService.submitTranslateToEn(utils.aesEncrypt(keywords), form.task_id, "true");
// console.log(keywords_en)
// keywords_en = utils.filterChineseAndPunctuation(keywords_en.replace(/"/g, ''));
keywords_en = keywords_en.replace(/"/g, '');
......@@ -237,8 +240,13 @@ const onAdapt = async () => {
});
return;
}
form.task_id = utils.genDateTimeStr();
console.log(form.task_id)
if (!form.task_id) {
ElMessage({
message: "task_id不能为空,请刷新页面",
type: "error",
});
return;
}
// 按标点拆分成分镜
const sentences = utils.splitText(form.chatgpt_answer);
// console.log(sentences.length)
......@@ -323,14 +331,14 @@ const onAdaptOneScene = async (item: any) => {
const adapt_restrict = `剧本:“${form.chatgpt_answer}
指令:
作为资深作家,请阅读这个剧本,给出这个场景:“${item.场景描述}”的描述,50个字左右。`;
const keywords = await text2videoService.submitLLM(adapt_restrict, tuili_llm.api);
console.log(adapt_restrict)
console.log(keywords)
const keywords = await text2videoService.submitLLM(utils.aesEncrypt(adapt_restrict), utils.aesEncrypt(tuili_llm.api), [], form.task_id, "true");
// console.log(adapt_restrict)
// console.log(keywords)
item.场景关键词 = keywords;
// const adapt_restrict_en = `你现在扮演专业的英语翻译的角色。请将这段文字“${item.场景描述}”翻译为英语。\n要求:只返回英语即可,不要返回其他内容。`;
// const keywords_en = await text2videoService.submitLLM(adapt_restrict_en, tuili_llm.api);
let keywords_en = await text2videoService.submitTranslateToEn(keywords);
let keywords_en = await text2videoService.submitTranslateToEn(utils.aesEncrypt(keywords), form.task_id, "true");
// console.log(keywords_en)
// item.场景关键词英文 = utils.filterChineseAndPunctuation(keywords_en.replace(/"/g, ''));
item.场景关键词英文 = keywords_en.replace(/"/g, '');
......@@ -403,7 +411,7 @@ const onAdaptOneSceneRoles = async (item: any) => {
// 总角色不为空
// const adapt_role_restrict = `请理解这个故事:“${form.chatgpt_answer}”,针对其中的这个场景:“${item.场景描述}”,从所有角色:“${form.all_roles}”中选择本场景的角色,多个角色以逗号分隔。`;
const adapt_role_restrict = `整个故事(“${form.chatgpt_answer}),\n\n本章节(${item.场景描述}),\n\n角色列表(${form.all_roles}),\n\n请返回给本章节出现的角色。注意:不要发挥想象,必须从角色列表中选出本章节出现过的角色,如果多个用逗号隔开。`;
const item_roles_answer = await text2videoService.submitLLM(adapt_role_restrict, tuili_keyword_llm.api);
const item_roles_answer = await text2videoService.submitLLM(utils.aesEncrypt(adapt_role_restrict), utils.aesEncrypt(tuili_keyword_llm.api), [], form.task_id, "true");
console.log(`==============${item.编号}===============`)
console.log('form.all_roles = ', form.all_roles)
item.info = `推理返回:${item_roles_answer}`
......@@ -565,11 +573,14 @@ const onDrawOne = async (item: any) => {
});
return;
}
// 翻译+画图
if (!form.task_id) {
form.task_id = utils.genDateTimeStr();
console.log(form.task_id)
ElMessage({
message: "task_id不能为空,请刷新页面",
type: "error",
});
return;
}
// 翻译+画图
try {
item.本镜配图 = "src/assets/loading.gif";
// let temp_prompt = ""
......@@ -592,7 +603,19 @@ const onDrawOne = async (item: any) => {
const seed = sd_model.seed;
const steps = sd_model.steps;
const cfg_scale = sd_model.cfg_scale;
const sd_img = await text2videoService.submitSD(form.task_id, item.编号, sd_prompt, sd_negative_prompt_prefix, form.img_size.width, form.img_size.height, sampler_index, seed, steps, cfg_scale);
const sd_img = await text2videoService.submitSD(
form.task_id,
item.编号,
utils.aesEncrypt(sd_prompt),
utils.aesEncrypt(sd_negative_prompt_prefix),
utils.aesEncrypt(form.img_size.width),
utils.aesEncrypt(form.img_size.height),
utils.aesEncrypt(sampler_index),
utils.aesEncrypt(seed),
utils.aesEncrypt(steps),
utils.aesEncrypt(cfg_scale),
"true"
);
item.本镜配图 = sd_img.domain_image_path + "?v=" + utils.genDateTimeStr();
item.local_image_path = sd_img.local_image_path;
} catch (error) {
......@@ -1119,17 +1142,19 @@ const onMarketingTemplateSubmitGpt = async () => {
`
try {
console.log("第一次提问")
let result1 = await text2videoService.submitLLM(marketing_template.prompt1, wen_an_llm.api);
let result1 = await text2videoService.submitLLM(utils.aesEncrypt(marketing_template.prompt1), utils.aesEncrypt(wen_an_llm.api), [], form.task_id, "true");
marketing_template.result1 = result1;
console.log(marketing_template.prompt1);
console.log(marketing_template.result1);
// console.log(marketing_template.prompt1);
// console.log(marketing_template.result1);
console.log("第二次带历史提问")
const history = [{'role': 'user', 'content': marketing_template.prompt1}, {'role': 'assistant', 'content': result1}]
let result2 = await text2videoService.submitLLM(marketing_template.prompt2, wen_an_llm.api, history);
const history = [
{'role': utils.aesEncrypt('user'), 'content': utils.aesEncrypt(marketing_template.prompt1)},
{'role': utils.aesEncrypt('assistant'), 'content': utils.aesEncrypt(result1)}]
let result2 = await text2videoService.submitLLM(utils.aesEncrypt(marketing_template.prompt2), utils.aesEncrypt(wen_an_llm.api), history, form.task_id, "true");
marketing_template.result2 = result2;
console.log(JSON.stringify(history), marketing_template.prompt2);
console.log(marketing_template.result2);
// console.log(JSON.stringify(history), marketing_template.prompt2);
// console.log(marketing_template.result2);
form.chatgpt_answer = result2;
marketingTemplateVisible.value = false;
......@@ -1142,6 +1167,24 @@ const onMarketingTemplateSubmitGpt = async () => {
}
};
const onTest = () => {
console.log(form.chatgpt_prompt);
const encrypt_data = utils.aesEncrypt(form.chatgpt_prompt);
console.log(encrypt_data);
text2videoService
.submitTest(encrypt_data)
.then((result: string) => {
console.log(result);
form.chatgpt_answer = result;
})
.catch((error: any) => {
// console.error(error);
ElMessage({
message: error,
type: "error",
});
});
};
</script>
<template>
......@@ -1159,6 +1202,7 @@ const onMarketingTemplateSubmitGpt = async () => {
</el-form-item>
<el-form-item>
<el-button type="success" @click="clean_demo">清除所有数据</el-button>
<!-- <el-button type="danger" @click="onTest">测试</el-button> -->
</el-form-item>
<!-- Prompt到文案 -->
<el-form-item label="Prompt">
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment