|
@@ -1,6 +1,6 @@
|
|
# -*- coding: utf-8 -*-
|
|
# -*- coding: utf-8 -*-
|
|
|
|
|
|
-from gpt.chatgpt import get_answer_from_gpt,get_article_gpt_pydantic
|
|
|
|
|
|
+from gpt.chatgpt import get_answer_from_gpt, get_article_gpt_pydantic
|
|
from gpt.gpt_check import CheckGptAnswer, CheckArticleResult
|
|
from gpt.gpt_check import CheckGptAnswer, CheckArticleResult
|
|
from tools.new_mysql import MySQLUploader
|
|
from tools.new_mysql import MySQLUploader
|
|
from tools.loglog import logger, log_err_e
|
|
from tools.loglog import logger, log_err_e
|
|
@@ -11,7 +11,7 @@ from common.split_text import split_text_to_word
|
|
from pydantic import BaseModel
|
|
from pydantic import BaseModel
|
|
from cachetools import TTLCache
|
|
from cachetools import TTLCache
|
|
from concurrent.futures import wait
|
|
from concurrent.futures import wait
|
|
-from random import randint, shuffle
|
|
|
|
|
|
+from random import randint, shuffle, sample
|
|
import json
|
|
import json
|
|
import requests
|
|
import requests
|
|
from openpyxl import load_workbook
|
|
from openpyxl import load_workbook
|
|
@@ -202,6 +202,7 @@ class GetArticle:
|
|
3.文章中使用提供单词,一定要和提供单词的中文词义匹配,尤其是一词多义时,务必使用提供单词的词义。必须要用提供单词的词义。如果用到的词义与提供单词词义不一致,请不要使用这个单词。
|
|
3.文章中使用提供单词,一定要和提供单词的中文词义匹配,尤其是一词多义时,务必使用提供单词的词义。必须要用提供单词的词义。如果用到的词义与提供单词词义不一致,请不要使用这个单词。
|
|
4.生成的文章要求{select_word_count}词左右,可以用{no_escape_code}字符分段,一般{select_paragraph_count}个段落左右。第一段是文章标题。
|
|
4.生成的文章要求{select_word_count}词左右,可以用{no_escape_code}字符分段,一般{select_paragraph_count}个段落左右。第一段是文章标题。
|
|
5.生成文章优先使用[单词组1]的词义,其次可以挑选使用[单词组2]的词义。允许不使用[单词组1]的个别单词,优先保证文章整体意思通顺连贯和故事完整。
|
|
5.生成文章优先使用[单词组1]的词义,其次可以挑选使用[单词组2]的词义。允许不使用[单词组1]的个别单词,优先保证文章整体意思通顺连贯和故事完整。
|
|
|
|
+6.注意回复字段的中英文,englishArticle是英文,chineseArticle是中文,其中trunk是英文,analysis是中文,text是英文。
|
|
|
|
|
|
提供[单词组1]:{core_words_meaning_str};
|
|
提供[单词组1]:{core_words_meaning_str};
|
|
提供[单词组2]:{extend_words_meaning_str};
|
|
提供[单词组2]:{extend_words_meaning_str};
|
|
@@ -213,7 +214,7 @@ class GetArticle:
|
|
|
|
|
|
|
|
|
|
r_json = json.loads(get_article_gpt_pydantic(q, temperature=0.9, real_ip=real_ip, demo_name=demo_name, model='gpt-4.1',
|
|
r_json = json.loads(get_article_gpt_pydantic(q, temperature=0.9, real_ip=real_ip, demo_name=demo_name, model='gpt-4.1',
|
|
- max_tokens=4000, sys_prompt=sys_prompt))
|
|
|
|
|
|
+ check_fucn=CheckArticleResult.get_article_1, max_tokens=4000, sys_prompt=sys_prompt))
|
|
|
|
|
|
allWordAmount = 0
|
|
allWordAmount = 0
|
|
allWordAmount += len(split_text_to_word(r_json["englishArticle"]))
|
|
allWordAmount += len(split_text_to_word(r_json["englishArticle"]))
|
|
@@ -244,12 +245,23 @@ class GetArticle:
|
|
r_json["body"] = r_json.pop("englishArticle")
|
|
r_json["body"] = r_json.pop("englishArticle")
|
|
r_json["chinese"] = r_json.pop("chineseArticle")
|
|
r_json["chinese"] = r_json.pop("chineseArticle")
|
|
|
|
|
|
|
|
+
|
|
|
|
+ for q in r_json['questions']:
|
|
|
|
+ data = q['candidates']
|
|
|
|
+ shuffled_candidates = sample(data, len(data))
|
|
|
|
+
|
|
|
|
+ labels = ['A', 'B', 'C', 'D']
|
|
|
|
+ for index, candidate in enumerate(shuffled_candidates):
|
|
|
|
+ candidate['label'] = labels[index]
|
|
|
|
+ q['candidates'] = shuffled_candidates
|
|
|
|
+
|
|
return {**r_json, "allWordAmount": allWordAmount}
|
|
return {**r_json, "allWordAmount": allWordAmount}
|
|
except json.decoder.JSONDecodeError:
|
|
except json.decoder.JSONDecodeError:
|
|
logger.error("gpt生成文章回复json格式化错误")
|
|
logger.error("gpt生成文章回复json格式化错误")
|
|
raise
|
|
raise
|
|
except Exception as e:
|
|
except Exception as e:
|
|
- logger.error(f"gpt生成文章回复其他错误.{type(e).__name__} {e}")
|
|
|
|
|
|
+ log_err_e(e,f"gpt生成文章回复其他错误.")
|
|
|
|
+
|
|
raise
|
|
raise
|
|
|
|
|
|
|
|
|