JUNGU commited on
Commit
91a314b
·
verified ·
1 Parent(s): 4044b14

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +47 -76
app.py CHANGED
@@ -1,47 +1,38 @@
1
  import streamlit as st
 
2
  import openai
3
- import json
4
  import os
5
- import record_examples as data
6
-
7
 
8
  # OpenAI API 설정 (환경 변수에서 읽어옴)
9
- openai.api_key = os.getenv("OPENAI_API_KEY")
10
 
11
- #gpt이용해서 추론함수 만들기
12
- def generate_annotated_text(text):
13
- response = openai.ChatCompletion.create(
14
- model="gpt-3.5-turbo-16k",
15
- messages=[
16
- {
17
- "role": "system",
18
- "content": "사용자의 입력은 학생의 창의적 체험활동에 대한 누가기록입니다. 이 누가기록을 바탕으로 학생의 개별적 특성과 성취를 강조하는 특기사항 기록을 생성하십시오. 사용자 입력을 특기사항으로 변환할 때, 반드시 문장의 끝은 '~임', '~함', '~음'과 같이 종결형 어미로 마무리합니다. 다음 입력과 출력 예제를 참고하세요. 예제: 입력: 누가기록1: '과학 실험 대회에 참여함', 누가기록2: '실험에서 독창적인 접근 방식을 사용함' 출력: '과학 실험 대회에 적극적으로 참여함. 실험에서 독창적인 접근 방식을 사용하며 문제 해결 능력을 보임. 실험 과정에서의 창의성과 주도적인 태도가 인상적임. 과학에 대한 깊은 이해와 호기심을 바탕으로 실험에 기여함.'"
19
- },
20
- {
21
- "role": "user",
22
- "content": text
23
- }
24
- ],
25
- temperature=1,
26
- max_tokens=10000,
27
- top_p=1,
28
- frequency_penalty=0,
29
- presence_penalty=0
30
- )
31
- return response['choices'][0]['message']['content']
32
 
33
- # 유사한 문장 생성 함수
34
- def generate_similar_sentences(base_sentence):
 
 
 
 
35
  response = openai.ChatCompletion.create(
36
  model="gpt-3.5-turbo-16k",
37
  messages=[
38
  {
39
  "role": "system",
40
- "content": f"다음은 '{base_sentence}'와 유사한 학생 특기사항 예시 문항 10개를 만들어주세요. 문장의 끝은 '~임,~함,~음'과 같이 종결형 어미로 마무리합니다."
41
  },
42
  {
43
  "role": "user",
44
- "content": base_sentence
45
  }
46
  ],
47
  temperature=0.7,
@@ -50,57 +41,37 @@ def generate_similar_sentences(base_sentence):
50
  frequency_penalty=0,
51
  presence_penalty=0
52
  )
53
- generated_sentences = response.choices[0].message['content'].split('\n')
54
- return [sentence.strip() for sentence in generated_sentences if sentence.strip()]
55
-
56
-
57
- # Streamlit 앱의 제목 및 설명
58
- st.title("누가기록 기반 창체 특기사항 생성")
59
- st.write("창체 누가기록을 입력하시면, 해당 누가기록에 기반한 창체 특기사항 문구를 제안합니다.")
60
-
61
- # 창의적 체험활동 데이터 가져오기
62
- creative_activities = data.creative_activities
63
-
64
- # 창의적 체험활동 영역 드롭다운
65
- activity_area = st.selectbox("창의적 체험활동 영역을 선택하세요:", list(creative_activities.keys()))
66
 
67
- # 선택된 영역에 따른 누가기록 목록
68
- selected_records = creative_activities[activity_area]
69
- selected_record = st.multiselect("누가기록을 선택하세요:", selected_records, default=[])
70
-
71
- # 선택된 누가기록 연결
72
- concatenated_record = ", ".join(selected_record)
73
- st.text_area("선택된 누가기록:", concatenated_record, height=100)
 
 
74
 
75
- # 세션 상태 초기화
76
- if 'generated_result' not in st.session_state:
77
- st.session_state.generated_result = None
78
- if 'selected_sentence' not in st.session_state:
79
- st.session_state.selected_sentence = None
80
- if 'similar_sentences' not in st.session_state:
81
- st.session_state.similar_sentences = []
82
 
83
- # "평가 생성" 버튼 클릭 시의 동작
84
- if st.button("문구 생성"):
85
- with st.spinner('답변 생성중...'):
86
- result = generate_annotated_text(concatenated_record)
87
- st.session_state.generated_result = result
88
- st.session_state.selected_sentence = None # 새로운 평가 생성시 선택된 문장 초기화
89
- st.session_state.similar_sentences = [] # 이전 유사한 문장들 초기화
90
 
91
- # 셀렉트 박스 및 유사한 문장 생성 버튼 추가
92
- if st.session_state.generated_result:
93
- sentences = st.session_state.generated_result.split('\n')
94
 
95
- if sentences:
96
- selected_sentence = st.selectbox("문장을 선택하세요:", sentences, key="sentence_select")
97
- st.session_state.selected_sentence = selected_sentence
98
 
99
- # 유사한 문장 생성 버튼
100
- if st.button("유사한 문구 생성") and st.session_state.selected_sentence:
101
- with st.spinner('문장 생성중...'):
102
- st.session_state.similar_sentences = generate_similar_sentences(st.session_state.selected_sentence)
 
 
 
103
 
104
- # 유사한 문장들 출력
105
- for sentence in st.session_state.similar_sentences:
106
- st.write(sentence)
 
1
  import streamlit as st
2
+ import pandas as pd
3
  import openai
 
4
  import os
 
 
5
 
6
  # OpenAI API 설정 (환경 변수에서 읽어옴)
7
+ openai.api_key = os.getenv("OPENAI_API_KEY")
8
 
9
+ # 파일 업로드 및 데이터 처리 함수
10
+ def upload_and_process_file():
11
+ uploaded_file = st.file_uploader("이전 생활기록부 파일 업로드", type=['csv', 'json'])
12
+ if uploaded_file is not None:
13
+ if uploaded_file.type == 'text/csv':
14
+ data = pd.read_csv(uploaded_file)
15
+ elif uploaded_file.type == 'application/json':
16
+ data = pd.read_json(uploaded_file)
17
+ return data
18
+ return None
 
 
 
 
 
 
 
 
 
 
 
19
 
20
+ # 생활기록부 문구 생성 함수
21
+ def generate_living_record(data):
22
+ # 데이터를 문자열로 변환
23
+ data_str = str(data)
24
+
25
+ # OpenAI GPT 모델을 사용하여 문구 생성
26
  response = openai.ChatCompletion.create(
27
  model="gpt-3.5-turbo-16k",
28
  messages=[
29
  {
30
  "role": "system",
31
+ "content": "학생의 이전 생활기록부 데이터를 바탕으로 올해의 생활기록부를 생성합니다."
32
  },
33
  {
34
  "role": "user",
35
+ "content": data_str
36
  }
37
  ],
38
  temperature=0.7,
 
41
  frequency_penalty=0,
42
  presence_penalty=0
43
  )
44
+ return response.choices[0].message.content
 
 
 
 
 
 
 
 
 
 
 
 
45
 
46
+ # 입력 필드 추가 함수
47
+ def add_input_fields():
48
+ if 'record_data' not in st.session_state:
49
+ st.session_state.record_data = []
50
+
51
+ class_record = st.selectbox("학급 선택", ["초등학교", "중학교", "고등학교"], key="class")
52
+ grade_record = st.selectbox("학년 선택", ["1학년", "2학년", "3학년", "4학년", "5학년", "6학년"] if class_record == "초등학교" else ["1학년", "2학년", "3학년"], key="grade")
53
+ st.text_input("생활기록부 내용 입력", key=f'record_{len(st.session_state.record_data)}')
54
+ st.session_state.record_data.append((class_record, grade_record))
55
 
56
+ if st.button("입력 추가"):
57
+ add_input_fields()
 
 
 
 
 
58
 
59
+ # Streamlit 구성
60
+ st.title("생활기록부 생성 서비스")
61
+ st.write("이전 생활기록부 파일을 업로드하거나, 직접 생활기록부 내용을 입력하세요.")
 
 
 
 
62
 
63
+ # 파일 업로드 기능
64
+ uploaded_data = upload_and_process_file()
 
65
 
66
+ # 직접 입력 기능
67
+ add_input_fields()
 
68
 
69
+ # 데이터 처리 결과 출력
70
+ if uploaded_data is not None or len(st.session_state.record_data) > 0:
71
+ if uploaded_data is not None:
72
+ generated_record = generate_living_record(uploaded_data)
73
+ else:
74
+ 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)])
75
+ generated_record = generate_living_record(input_data)
76
 
77
+ st.write("생성된 생활기록부:", generated_record)