import streamlit as st import openai import json from annotated_text import annotated_text import os import achivenment_standards as data # OpenAI API 설정 (환경 변수에서 읽어옴) openai.api_key = os.getenv("OPENAI_API_KEY") #gpt이용해서 추론함수 만들기 def generate_annotated_text(text): response = openai.ChatCompletion.create( model="gpt-3.5-turbo-16k", messages=[ { "role": "system", "content": "성취기준 기반 학생의 특성 및 활동 평가 생성\n성취기준을 입력하시면, 해당 성취기준에 기반한 학생의 특성 및 활동에 대한 평가를 annotated_text 형식으로 제공합니다. 성취기준을 보며 학생의 특정 활동, 성취 수준, 교사의 총평, 그리고 학생의 역량을 고려하여 체계적으로 구성된 출력을 제공합니다. 주어는 반드시 생략합니다. \n\n예제:\n입력: ```성취기준: [6국01-07]상대가 처한 상황을 이해하고 공감하며 듣는 태도를 지닌다, [6국01-02] 의견을 제시하고 함께 조정하며 토의한다.```\n출력: ```annotated_text(\n (\"평소 자신의 생각을 일목요연하게 정리하는 습관이 있음.\", \"역량\", \"rgba(255, 0, 0, 0.3)\"),\n (\"사회 현안에 관한 주장하는 글쓰기를 잘함.\", \"성취수준\", \"rgba(0, 0, 255, 0.3)\"),\n (\"친구의 고민을 해결해주는 역할극에서 상대방을 배려하여 해결 가능한 방안을 제안함.\", \"수행\", \"rgba(0, 128, 0, 0.3)\"),\n (\"상대가 처한 상황을 이해하고 공감하는 태도를 가지고 친구들과 원만한 관계를 맺고 갈등을 조정함.\", \"교사총평\", \"rgba(128, 128, 128, 0.3)\"),\n (\"중간 놀이 시간에 운동장을 사용하는 방법 정하기를 주제로 한 토의에서 알맞은 근거와 뒷받침할 수 있는 자료를 토대로 자신의 의견을 타당하게 제시하면서 다른 사람의 의견을 능동적으로 수용하고 효과적으로 의견을 조정하는 능력을 보임.\", \"수행\", \"rgba(0, 128, 0, 0.3)\"),\n (\"상대의 의견을 존중하고 협력하는 태도를 보임.\", \"역량\", \"rgba(255, 0, 0, 0.3)\")\n)\n```" }, { "role": "user", "content": "[6국01-02]의견을 제시하고 함께 조정하며 토의한다." }, { "role": "assistant", "content": "```annotated_text(\n (\"토론이나 토의 활동에 적극적으로 참여하며 자신의 의견을 논리적으로 잘 제시함.\", \"성취수준\", \"rgba(0, 0, 255, 0.3)\"),\n (\"팀 프로젝트에서 다른 팀원들의 의견을 존중하고 공동의 목표를 위해 의견을 잘 조정하는 능력을 보여 주었음.\", \"수행\", \"rgba(0, 128, 0, 0.3)\"),\n (\"자신의 생각과 의견을 효과적으로 분명하게 표현하는데 어려움이 없는 것으로 보임.\", \"역량\", \"rgba(255, 0, 0, 0.3)\"),\n (\"학생은 선의의 충돌을 통해 성장하고 있으며, 이를 통해 배려와 협력에 대한 중요성을 인지하고 있음.\", \"교사총평\", \"rgba(128, 128, 128, 0.3)\")\n)\n```" } ], temperature=1, max_tokens=4308, top_p=1, frequency_penalty=0, presence_penalty=0 ) return response['choices'][0]['message']['content'] # Streamlit 앱의 제목 및 설명 st.title("성취기준 기반 학생의 특성 및 활동 평가 생성") st.write("성취기준을 입력하시면, 해당 성취기준에 기반한 학생의 특성 및 활동에 대한 평가를 \n\n [학생 활동, 성취 수준, 교사의 총평, 학생 역량] 4가지 요소를 조합하여 제공합니다.") # 성취기준 데이터 가져오기 achievement_standards = data.achievement_standards # 학년군 선택 드롭다운 grade_group = st.selectbox("학년군을 선택하세요:", list(achievement_standards.keys())) # 선택된 학년군에 따른 과목 목록 subject_list = list(achievement_standards[grade_group].keys()) subject = st.selectbox("과목을 선택하세요:", subject_list) # 선택된 과목에 따른 성취기준 목록 selected_standards = achievement_standards[grade_group][subject] selected_standard = st.selectbox("성취기준을 선택하세요:", selected_standards) # 선택된 성취기준을 텍스트 입력창의 기본값으로 사용 achievement_standard = st.text_input("성취기준 입력:", value=selected_standard) # "평가 생성" 버튼 클릭 시의 동작 if st.button("평가 생성"): result = generate_annotated_text(achievement_standard) # 결과 출력 # st.text(result.replace('```', '')) #결과에서 ``` 제거 exec(result.replace('```', ''))