import streamlit as st import pandas as pd import openai import os # OpenAI API 설정 (환경 변수에서 읽어옴) openai.api_key = os.getenv("OPENAI_API_KEY") # 파일 업로드 및 데이터 처리 함수 def upload_and_process_file(): uploaded_file = st.file_uploader("이전 생활기록부 파일 업로드", type=['csv', 'json']) if uploaded_file is not None: if uploaded_file.type == 'text/csv': data = pd.read_csv(uploaded_file) elif uploaded_file.type == 'application/json': data = pd.read_json(uploaded_file) return data return None # 생활기록부 문구 생성 함수 def generate_living_record(data): # 데이터를 문자열로 변환 data_str = str(data) # OpenAI GPT 모델을 사용하여 문구 생성 response = openai.ChatCompletion.create( model="gpt-3.5-turbo-16k", messages=[ { "role": "system", "content": "학생의 이전 생활기록부 데이터를 바탕으로 올해의 생활기록부를 생성합니다." }, { "role": "user", "content": data_str } ], temperature=0.7, max_tokens=10000, top_p=1, frequency_penalty=0, presence_penalty=0 ) return response.choices[0].message.content # 입력 필드 추가 함수 def add_input_fields(): if 'record_data' not in st.session_state: st.session_state.record_data = [] class_record = st.selectbox("학급 선택", ["초등학교", "중학교", "고등학교"], key="class") grade_record = st.selectbox("학년 선택", ["1학년", "2학년", "3학년", "4학년", "5학년", "6학년"] if class_record == "초등학교" else ["1학년", "2학년", "3학년"], key="grade") st.text_input("생활기록부 내용 입력", key=f'record_{len(st.session_state.record_data)}') st.session_state.record_data.append((class_record, grade_record)) if st.button("입력 칸 추가"): add_input_fields() # Streamlit 앱 구성 st.title("생활기록부 생성 서비스") st.write("이전 생활기록부 파일을 업로드하거나, 직접 생활기록부 내용을 입력하세요.") # 파일 업로드 기능 uploaded_data = upload_and_process_file() # 직접 입력 기능 add_input_fields() # 데이터 처리 및 결과 출력 if uploaded_data is not None or len(st.session_state.record_data) > 0: if uploaded_data is not None: generated_record = generate_living_record(uploaded_data) else: input_data = "\n".join([f"{record[0]} {record[1]}: {st.session_state[f'record_{i}']}" for i, record in enumerate(st.session_state.record_data)]) generated_record = generate_living_record(input_data) st.write("생성된 생활기록부:", generated_record)