from annotated_text import annotated_text import streamlit as st import openai import os #지문을 입력 받아서 키워드만 추출하는 함수 #문단에서 모르는 내용을 추가적으로 설명해줌 #입력창에 입력한 지문에서 표현을 다듬은 글을 생성해줌 gpt3-5-turbo-16k 사용 #추가 설명 버튼을 누르면 추가적인 설명을 해줌 # OpenAI API 설정 (환경 변수에서 읽어옴) openai.api_key = os.getenv("OPENAI_API_KEY") # 실제 코드에서 주석 해제 def main(): st.title("GPT-3를 활용한 국어 문제 생성기") col1, col2 = st.columns(2) with col1: st.header("지문") user_text = """민주주의 사회는 국민이 정치에 참여할 권리를 보장한다. 그러한 권리를 참정권이라 하는데, 이는 기본적으로 ‘선거’로 실현된다. 선거는 사회 집단의 대표자나 공직자를 선출하여 그들에게 대표성을 부여하는 행위이다. 그러므로 높은 투표율은 민주주의의 정당성 확보와 깊은 관련이 있다. 선거 투표 제도에는 투표권 행사를 투표자의 자유의사에 맡기는 ‘자유 투표제’와 투표권 행사를 국민의 의무로 간주하고 정당한 사유 없이 기권하면 법적 제재를 가하는 ‘의무 투표제’가 있다. 우리나라는 자유 투표제를 채택하고 있는데, 최근 치른 선거의 평균 투표율이 50퍼센트대로 나타났다. 경제 개발 협력 기구(OECD) 회원국 평균이 70퍼센트대인 것을 생각하면 매우 낮은 수치라 할 수 있다. 이러한 상황이 지속되자 의무 투표제를 도입해야 한다는 의견이 제시되었고, 자유 투표제가 민주주의의 원칙에 맞으므로 이를 유지해야 한다는 의견과 대립하고 있다. 의무 투표제를 도입하자는 측은 낮은 투표율로 투표 결과의 정당성을 확보하지 못하는 문제가 매우 심각하다고 주장한다. 또 의무 투표제의 강제성과 법적 제재가 투표율을 높이므로 투표율이 낮아서 발생하는 문제를 해결할 수 있다고 본다. 그리고 국민 대부분이 투표에 참여하게 되면 정치인들이 모든 계층의 지지를 받기 위해 정책 경쟁력을 높이려 할 것이므로 정치 소외 계층에 더욱 관심을 쏟는 효과가 있을 것이라고 이야기한다. 반면 의무 투표제에 반대하는 측은 현재 우리나라의 투표율이 정치 지도자들의 대표성을 훼손할 만큼 심각한 상황은 아니라고 주장한다. 또 투표율을 높이는 것보다 국민의 신뢰를 회복하는 것이 더 중요하고, 시민 교육이나 모의 투표 교육 프로그램으로도 투표율 상승을 기대할 수 있다며 의무 투표제의 도입만이 투표율이나 정치적 관심을 높이는 해결 방안은 아니라고 이야기한다. 그리고 의무 투표제를 도입하면, 선출된 정치인들이 높은 투표율을 핑계로 안하무인의 태도를 갖는 부작용이 생긴다든가 후보자를 잘 모르는 상태에서 투표하는 일이 발생하여 국민의 뜻이 오히려 왜곡될 수 있다며 우려의 목소리를 내고 있다. """ st.write(user_text) with col2: user_input = st.text_input("모르는 문장이나 단어를 입력하세요:", "") cols = st.columns(2) with cols[0]: if st.button("키워드 찾기"): task_description ="""You are a useful helper that generates annotated text for Python's st-annotated-text library. Your task is to identify the topic of the passage and highlight the key words needed to convey the meaning. You should be able to identify the main points. Also, please mark keywords based on the different paragraphs and headings provided in the text. The output should be formatted in the following way: annotated_text( "This ", ("is", ""), " some ", ("annotated", ""), ("text", ""), " for those of ", ("you", ""), " who ", ("like", ""), " this sort of ", ("thing", ""), ". " )""" user_prompt = f"First, extract key words for the topic st-annotated-text format.: {user_text}" messages = [{"role": "system", "content": task_description}, {"role": "user", "content": user_prompt}] response = openai.ChatCompletion.create( model="gpt-3.5-turbo-16k", messages=messages, temperature=0.1, max_tokens=2500, top_p=0.2, frequency_penalty=0, presence_penalty=0 ) highlighted_text = response['choices'][0]['message']['content'] exec(highlighted_text) pass with cols[1]: if st.button("추가 설명"): # 입력된 텍스트 설명 explanation_task = f"Explain the term '{user_input}' in a simple manner, based on the context of the following passage: {user_text}" 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=150 ) explanation = response['choices'][0]['message']['content'] # 쉬운 표현으로 결과 출력 st.text("설명:") st.write(explanation) pass if __name__ == "__main__": main()