import os import openai import streamlit as st import pandas as pd from io import StringIO from io import BytesIO import base64 # OpenAI API 설정 (환경 변수에서 읽어옴) openai.api_key = os.getenv("OPENAI_API_KEY") # 실제 코드에서 주석 해제 # 세션 상태 설정 if 'result_data' not in st.session_state: st.session_state.result_data = pd.DataFrame(columns=['순서', '식별자', '작업', '결과']) # 0. 사용자 식별 user_id = st.text_input("학번이나 이름을 입력하세요:") # 1. 텍스트 입력 user_text = st.text_area("분석할 텍스트를 붙여 넣으세요:") # 2. 메뉴 선택 menu = st.selectbox( "수행할 작업을 선택하세요:", ("요약하기", "키워드 찾기", "주제 찾기", "중심 문장 찾기", "문제 만들기") ) # 3. 텍스트 처리 및 결과 누적 if st.button("분석 실행"): task_description = f"You are a helpful assistant that {menu}." user_prompt = f"Please {menu} the following text: {user_text}. only use Korean." if menu == "문제 만들기": task_description += "After reading the provided passage, create a question to help students develop a factual understanding based on the text. Start with a multiple-choice question with 5 options. Provide the correct answer and offer an explanation for that answer. All content must be written using only Korean characters.{Question} {Choices} {Explanation}" 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.7, max_tokens=500 ) processed_text = response['choices'][0]['message']['content'] # 결과 누적 next_index = len(st.session_state.result_data) + 1 new_row = pd.DataFrame({ '순서': [next_index], '식별자': [user_id], '작업': [menu], '결과': [processed_text] }) st.session_state.result_data = pd.concat([st.session_state.result_data, new_row], ignore_index=True) # 4. 결과 표시 st.table(st.session_state.result_data) # 5. 파일 저장 (CSV, UTF-8 인코딩) if st.button("결과 다운로드(CSV)"): towrite = BytesIO() downloaded_file = st.session_state.result_data.to_csv(towrite, encoding='utf-8-sig', index=False) towrite.seek(0) b64 = base64.b64encode(towrite.read()).decode() st.download_button( "결과 다운로드 (CSV)", data=base64.b64decode(b64), file_name='result.csv', mime='text/csv' )