|
|
@@ -188,46 +188,78 @@ export async function GenerateArticle(ctx) {
|
|
188
|
188
|
if (words){
|
|
189
|
189
|
|
|
190
|
190
|
const menuConfig=constantClass.GetYJBDCGenerateConfig();
|
|
191
|
|
- let content = "将"+words+"这些单词生成一篇英文文章。要求"+
|
|
192
|
|
- "[难度];"+
|
|
193
|
|
- "文章类型是'"+articleStyle+"([类型])';"+
|
|
194
|
|
- "要求提供丰富上下文线索、清晰的文章结构;"+
|
|
195
|
|
- "文章单词数在200个左右,最多不能超过300个;"+
|
|
196
|
|
- "文章按每句分成数组,且每句都有中文翻译[补充1];"+
|
|
197
|
|
- "提供5道针对文章阅读理解的单项选择题,各有四个唯一选项,并提供答案;"+
|
|
198
|
|
- "单项选择题和选项也要有中文翻译;"+
|
|
199
|
|
- "必须确保用户提供的每个单词(除像'fuck'、'shit'等脏话外)至少在文章中出现一次,可以是原形或某种变形(第三人称单数、复数、过去式、过去分词、现在分词、比较级、最高级等等所有可能的变形形式)。比如用户输入'go',文章除了'go'以外,也可以生成像'goes'、'went'、'gone'、'going'等单词;"+
|
|
200
|
|
- "内容格式为JSON,必须严格按照以下格式,不能有任何字段名错误或缺失:{"+
|
|
201
|
|
- " \"ArticleEnglish\":[\"<英文文章句子1>\",\"<英文文章句子2>\"...],"+
|
|
202
|
|
- " \"ArticleChinese\":[\"<中文翻译句子1>\",\"<中文翻译句子2>\"...],"+
|
|
203
|
|
- " \"Question\":[{"+
|
|
204
|
|
- " \"QuestionEnglish\":\"<英语题目1>\","+
|
|
205
|
|
- " \"QuestionChinese\":\"<题目1中文翻译>\","+
|
|
206
|
|
- " \"OptionsEnglish\":[\"A.<英语选项1>\",\"B.<英语选项2>\",\"C.<英语选项3>\",\"D.<英语选项4>\"],"+
|
|
207
|
|
- " \"OptionsChinese\":[\"A.<选项1中文翻译>\",\"B.<选项2中文翻译>\",\"C.<选项3中文翻译>\",\"D.<选项4中文翻译>\"],"+
|
|
208
|
|
- " \"Answer\":\"<答案>\""+
|
|
209
|
|
- " }...]"+
|
|
210
|
|
- "}";
|
|
211
|
191
|
|
|
|
192
|
+ // let content = "将"+words+"这些单词生成一篇英文文章。要求"+
|
|
|
193
|
+ // "[难度];"+
|
|
|
194
|
+ // "文章类型是'"+articleStyle+"([类型])';"+
|
|
|
195
|
+ // "要求提供丰富上下文线索、清晰的文章结构;"+
|
|
|
196
|
+ // "文章单词数在200个左右,最多不能超过300个;"+
|
|
|
197
|
+ // "文章按每句分成数组,且每句都有中文翻译[补充1];"+
|
|
|
198
|
+ // "提供5道针对文章阅读理解的单项选择题,各有四个唯一选项,并提供答案;"+
|
|
|
199
|
+ // "单项选择题和选项也要有中文翻译;"+
|
|
|
200
|
+ // "必须确保用户提供的每个单词(除像'fuck'、'shit'等脏话外)至少在文章中出现一次,可以是原形或某种变形(第三人称单数、复数、过去式、过去分词、现在分词、比较级、最高级等等所有可能的变形形式)。比如用户输入'go',文章除了'go'以外,也可以生成像'goes'、'went'、'gone'、'going'等单词;"+
|
|
|
201
|
+ // "内容格式为JSON,必须严格按照以下格式,不能有任何字段名错误或缺失:{"+
|
|
|
202
|
+ // " \"ArticleEnglish\":[\"<英文文章句子1>\",\"<英文文章句子2>\"...],"+
|
|
|
203
|
+ // " \"ArticleChinese\":[\"<中文翻译句子1>\",\"<中文翻译句子2>\"...],"+
|
|
|
204
|
+ // " \"Question\":[{"+
|
|
|
205
|
+ // " \"QuestionEnglish\":\"<英语题目1>\","+
|
|
|
206
|
+ // " \"QuestionChinese\":\"<题目1中文翻译>\","+
|
|
|
207
|
+ // " \"OptionsEnglish\":[\"A.<英语选项1>\",\"B.<英语选项2>\",\"C.<英语选项3>\",\"D.<英语选项4>\"],"+
|
|
|
208
|
+ // " \"OptionsChinese\":[\"A.<选项1中文翻译>\",\"B.<选项2中文翻译>\",\"C.<选项3中文翻译>\",\"D.<选项4中文翻译>\"],"+
|
|
|
209
|
+ // " \"Answer\":\"<答案>\""+
|
|
|
210
|
+ // " }...]"+
|
|
|
211
|
+ // "}";
|
|
|
212
|
+
|
|
|
213
|
+ // if (!params.Level || params.Level=="" || params.Level==undefined || params.Level>="4"){
|
|
|
214
|
+ // params.Level="0";
|
|
|
215
|
+ // }
|
|
|
216
|
+ // content = content.replace("[难度]",menuConfig.Level[Number(params.Level)].Content);
|
|
|
217
|
+
|
|
|
218
|
+
|
|
|
219
|
+ // for(let i=0;i<menuConfig.ArticleStyle.length;i++){
|
|
|
220
|
+ // if (menuConfig.ArticleStyle[i].Name==articleStyle){
|
|
|
221
|
+ // content = content.replace("[类型]",menuConfig.ArticleStyle[i].Content);
|
|
|
222
|
+ // break;
|
|
|
223
|
+ // }
|
|
|
224
|
+ // }
|
|
|
225
|
+
|
|
|
226
|
+ //console.log("content:"+content);
|
|
|
227
|
+
|
|
|
228
|
+ let level="";
|
|
212
|
229
|
if (!params.Level || params.Level=="" || params.Level==undefined || params.Level>="4"){
|
|
213
|
230
|
params.Level="0";
|
|
|
231
|
+ //level="A2";
|
|
214
|
232
|
}
|
|
215
|
|
- content = content.replace("[难度]",menuConfig.Level[Number(params.Level)].Content);
|
|
|
233
|
+ // if (params.Level=="1")
|
|
|
234
|
+ // level="B1";
|
|
|
235
|
+ // if (params.Level=="2")
|
|
|
236
|
+ // level="B2";
|
|
|
237
|
+ // if (params.Level=="3")
|
|
|
238
|
+ // level="C1";
|
|
|
239
|
+
|
|
|
240
|
+ level=menuConfig.Level[Number(params.Level)].Content;
|
|
216
|
241
|
|
|
217
|
|
- // if (articleStyle=="随机" || articleStyle=="任意") {
|
|
218
|
|
- // // 获取ARTICLE_STYLE对象的所有键(文章类型)
|
|
219
|
|
- // const articleTypes = Object.keys(ARTICLE_STYLE);
|
|
220
|
|
- // // 随机选择一个文章类型
|
|
221
|
|
- // const randomIndex = stringUtils.Random(0, articleTypes.length-1);
|
|
222
|
|
- // articleStyle = articleTypes[randomIndex];
|
|
223
|
|
- // }
|
|
224
|
|
- for(let i=0;i<menuConfig.ArticleStyle.length;i++){
|
|
225
|
|
- if (menuConfig.ArticleStyle[i].Name==articleStyle){
|
|
226
|
|
- content = content.replace("[类型]",menuConfig.ArticleStyle[i].Content);
|
|
227
|
|
- break;
|
|
|
242
|
+ let content={
|
|
|
243
|
+ "instruction": "用单词("+words+")生成"+level+"难度童话故事。要求:",
|
|
|
244
|
+ "requirements": [
|
|
|
245
|
+ "200-300词,要求:"+articleStyle+"([类型])",
|
|
|
246
|
+ "每句分数组提供中英双语",
|
|
|
247
|
+ "所有单词至少出现一次(允许变形)",
|
|
|
248
|
+ "生成5道四选一阅读题(含答案)"
|
|
|
249
|
+ ],
|
|
|
250
|
+ "output_format": {
|
|
|
251
|
+ "ArticleEnglish": ["句子1", "句子2..."],
|
|
|
252
|
+ "ArticleChinese": ["翻译1", "翻译2..."],
|
|
|
253
|
+ "Question": [{
|
|
|
254
|
+ "QuestionEnglish": "题干",
|
|
|
255
|
+ "QuestionChinese": "题干翻译",
|
|
|
256
|
+ "OptionsEnglish": ["A.选项", "B.选项", "C.选项", "D.选项"],
|
|
|
257
|
+ "OptionsChinese": ["A.译", "B.译", "C.译", "D.译"],
|
|
|
258
|
+ "Answer": "正确选项字母"
|
|
|
259
|
+ }]
|
|
228
|
260
|
}
|
|
229
|
|
- }
|
|
230
|
|
- //console.log("content:"+content);
|
|
|
261
|
+ };
|
|
|
262
|
+ content=JSON.stringify(content);
|
|
231
|
263
|
|
|
232
|
264
|
// 从请求参数中获取AI提供者,如果没有指定则使用默认值
|
|
233
|
265
|
let aiProvider = '';
|
|
|
@@ -247,10 +279,10 @@ export async function GenerateArticle(ctx) {
|
|
247
|
279
|
}
|
|
248
|
280
|
|
|
249
|
281
|
|
|
250
|
|
- if (aiProvider.indexOf("llama")>=0)
|
|
251
|
|
- content=content.replace("[补充1]",",如果生成的JSON中有ArticleEnglishCorrected和ArticleChineseCorrected,直接覆盖原有的ArticleEnglish和ArticleChinese,不要再生成。");
|
|
252
|
|
- else
|
|
253
|
|
- content=content.replace("[补充1]","");
|
|
|
282
|
+ // if (aiProvider.indexOf("llama")>=0)
|
|
|
283
|
+ // content=content.replace("[补充1]",",如果生成的JSON中有ArticleEnglishCorrected和ArticleChineseCorrected,直接覆盖原有的ArticleEnglish和ArticleChinese,不要再生成。");
|
|
|
284
|
+ // else
|
|
|
285
|
+ // content=content.replace("[补充1]","");
|
|
254
|
286
|
|
|
255
|
287
|
|
|
256
|
288
|
try {
|