import ast import openai from text_annotator import generate_annotated_text def gpt_summary_generator(user_text): ''' :param user_text: :return: ''' task_description_fs = "Summarize the text in 500 characters in Korean." user_prompt = f"{user_text}" messages = [{"role": "system", "content": task_description_fs}, {"role": "user", "content": user_prompt}] response = openai.ChatCompletion.create( model="gpt-3.5-turbo-16k", messages=messages, temperature=0.06, max_tokens=8362, top_p=0, frequency_penalty=0, presence_penalty=0 ) gpt_summary = response['choices'][0]['message']['content'] return gpt_summary def gpt_keyword_highlighter(user_text): ''' :param user_text: str :return: annotated_text: str ''' # get keywords from user_text task_description = "You are a Python function that extracts 5 keywords from {input_text} considering {overall_text_contents}. The output should be formatted as ['keyword1', 'keyword2', ...]. Return only the function's output, with no additional explanations." user_prompt = r"{input_text}=" + f"{user_text}" messages = [{"role": "system", "content": task_description}, {"role": "user", "content": user_prompt}] response = openai.ChatCompletion.create( model="gpt-3.5-turbo", messages=messages, temperature=0, max_tokens=2006, top_p=0, frequency_penalty=0, presence_penalty=0 ) extracted_keywords = response['choices'][0]['message']['content'] ## literal_eval 함수를 사용하여 string을 list로 변환 extracted_keywords = ast.literal_eval(extracted_keywords) ## highlighted_text 후처리 함수 추가 highlighted_text = generate_annotated_text(text=user_text, keyw_list=extracted_keywords) return highlighted_text def gpt_text_naturalizer(user_input): paraphrasing_task = f"Rewrite the contents of '{user_input}' so that it will pass the writing test." messages = [ {"role": "system", "content": "You are a helpful assistant. use only korean"}, {"role": "user", "content": paraphrasing_task} ] response = openai.ChatCompletion.create( model="gpt-3.5-turbo-16k", messages=messages, temperature=0.1, max_tokens=2500 ) paraphrased_text = response['choices'][0]['message']['content'] return paraphrased_text def gpt_explanation_generator(user_input, text_to_consider): explanation_task = f"Explain the term '{user_input}' in a simple manner, based on the context of the following passage: {text_to_consider}" messages = [ {"role": "system", "content": "You are a helpful assistant that explains complex topics in a way that an elementary school student can understand. use only korean"}, {"role": "user", "content": explanation_task} ] response = openai.ChatCompletion.create( model="gpt-3.5-turbo-16k", messages=messages, temperature=0.1, max_tokens=200 ) explanation = response['choices'][0]['message']['content'] return explanation def gpt_easier_text_generator(user_input): messages = [ {"role": "system", "content": "You have a special talent for easily rewriting text. Make it easy to paraphrase, use simple words that an elementary school student can understand, but don't shorten or summarize. Don't forget to use only korean."}, {"role": "user", "content": user_input} ] response = openai.ChatCompletion.create( model="gpt-3.5-turbo", messages=messages, temperature=0, max_tokens=2048 ) explanation = response['choices'][0]['message']['content'] def gpt_rater(user_input): # 루브릭에 의한 채점 lubric = """채점 기준 상: 문장의 주제를 파악하고, 주요 내용을 파악할 수 있다. 중: 문장의 주제를 파악할 수 있다. 하: 문장의 주제를 파악할 수 없다.""" # 루브릭 기준을 이용해서 입력칸에 입력한 내용을 채점하는 영어로 프롬프트 explanation_task = f"{lubric}을 기준으로 {user_input}의 내용을 채점해주세요. 채점 기준은 공개하지 말고 상, 중,하로 나누고 간단한 이유를 알려주세요." messages = [ {"role": "system", "content": "You are a helpful assistant. use only korean"}, {"role": "user", "content": explanation_task} ] response = openai.ChatCompletion.create( model="gpt-3.5-turbo-16k", messages=messages, temperature=0.1, max_tokens=2500 ) feedback = response['choices'][0]['message']['content'] return feedback