import streamlit as st import openai import json from annotated_text import annotated_text import os # 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 = { "1~2학년군": [ "[2국01-01] 상황에 어울리는 인사말을 주고받는다.", "[2국01-02] 일이 일어난 순서를 고려하며 듣고 말한다.", "[2국01-01] 상황에 어울리는 인사말을 주고받는다.", "[2국01-02] 일이 일어난 순서를 고려하며 듣고 말한다.", "[2국01-03] 자신의 감정을 표현하며 대화를 나눈다.", "[2국01-04] 듣는 이를 바라보며 바른 자세로 자신 있게 말한다.", "[2국01-05] 말하는 이와 말의 내용에 집중하며 듣는다.", "[2국01-06] 바르고 고운 말을 사용하여 말하는 태도를 지닌다.", "[2국02-01] 글자, 낱말, 문장을 소리 내어 읽는다.", "[2국02-02] 문장과 글을 알맞게 띄어 읽는다.", "[2국02-03] 글을 읽고 주요 내용을 확인한다.", "[2국02-04] 글을 읽고 인물의 처지와 마음을 짐작한다.", "[2국02-05] 읽기에 흥미를 가지고 즐겨 읽는 태도를 지닌다.", "[2국03-01] 글자를 바르게 쓴다.", "[2국03-02] 자신의 생각을 문장으로 표현한다.", "[2국03-03] 주변의 사람이나 사물에 대해 짧은 글을 쓴다.", "[2국03-04] 인상 깊었던 일이나 겪은 일에 대한 생각이나 느낌을 쓴다.", "[2국03-05] 쓰기에 흥미를 가지고 즐겨 쓰는 태도를 지닌다.", "[2국04-01] 한글 자모의 이름과 소릿값을 알고 정확하게 발음하고 쓴다.", "[2국04-02] 소리와 표기가 다를 수 있음을 알고 낱말을 바르게 읽고 쓴다.", "[2국04-03] 문장에 따라 알맞은 문장 부호를 사용한다.", "[2국04-04] 글자, 낱말, 문장을 관심 있게 살펴보고 흥미를 가진다.", "[2국05-01] 느낌과 분위기를 살려 그림책, 시나 노래, 짧은 이야기를 들려주거나 듣는다.", "[2국05-02] 인물의 모습, 행동, 마음을 상상하며 그림책, 시나 노래, 이야기를 감상한다.", "[2국05-03] 여러 가지 말놀이를 통해 말의 재미를 느낀다.", "[2국05-04] 자신의 생각이나 겪은 일을 시나 노래, 이야기 등으로 표현한다.", "[2국05-05] 시나 노래, 이야기에 흥미를 가진다.", ], "3~4학년군": [ "[4국01-01] 대화의 즐거움을 알고 대화를 나눈다.", "[4국01-02] 회의에서 의견을 적극적으로 교환한다.", "[4국01-03] 원인과 결과의 관계를 고려하며 듣고 말한다.", "[4국01-04] 적절한 표정, 몸짓, 말투로 말한다.", "[4국01-05] 내용을 요약하며 듣는다.", "[4국01-06] 예의를 지키며 듣고 말하는 태도를 지닌다.", "[4국02-01] 문단과 글의 중심 생각을 파악한다.", "[4국02-02] 글의 유형을 고려하여 대강의 내용을 간추린다.", "[4국02-03] 글에서 낱말의 의미나 생략된 내용을 짐작한다.", "[4국02-04] 글을 읽고 사실과 의견을 구별한다.", "[4국02-05] 읽기 경험과 느낌을 다른 사람과 나누는 태도를 지닌다.", "[4국03-01] 중심 문장과 뒷받침 문장을 갖추어 문단을 쓴다.", "[4국03-02] 시간의 흐름에 따라 사건이나 행동이 드러나게 글을 쓴다.", "[4국03-03] 관심 있는 주제에 대해 자신의 의견이 드러나게 글을 쓴다.", "[4국03-04] 읽는 이를 고려하며 자신의 마음을 표현하는 글을 쓴다.", "[4국03-05] 쓰기에 자신감을 갖고 자신의 글을 적극적으로 나누는 태도를 지닌다.", "[4국04-01] 낱말을 분류하고 국어사전에서 찾는다.", "[4국04-02] 낱말과 낱말의 의미 관계를 파악한다.", "[4국04-03] 기본적인 문장의 짜임을 이해하고 사용한다.", "[4국04-04] 높임법을 알고 언어 예절에 맞게 사용한다.", "[4국04-05] 한글을 소중히 여기는 태도를 지닌다.", "[4국05-01] 시각이나 청각 등 감각적 표현에 주목하며 작품을 감상한다.", "[4국05-02] 인물, 사건, 배경에 주목하며 작품을 이해한다.", "[4국05-03] 이야기의 흐름을 파악하여 이어질 내용을 상상하고 표현한다.", "[4국05-04] 작품을 듣거나 읽거나 보고 떠오른 느낌과 생각을 다양하게 표현한다.", "[4국05-05] 재미나 감동을 느끼며 작품을 즐겨 감상하는 태도를 지닌다.", ], "5~6학년군": [ "[6국01-01] 구어 의사소통의 특성을 바탕으로 하여 듣기․말하기 활동을 한다.", "[6국01-02] 의견을 제시하고 함께 조정하며 토의한다.", "[6국01-03] 절차와 규칙을 지키고 근거를 제시하며 토론한다.", "[6국01-04] 자료를 정리하여 말할 내용을 체계적으로 구성한다.", "[6국01-05] 매체 자료를 활용하여 내용을 효과적으로 발표한다.", "[6국01-06] 드러나지 않거나 생략된 내용을 추론하며 듣는다.", "[6국01-07] 상대가 처한 상황을 이해하고 공감하며 듣는 태도를 지닌다.", "[6국02-01] 읽기는 배경지식을 활용하여 의미를 구성하는 과정임을 이해하고 글을 읽는다.", "[6국02-02] 글의 구조를 고려하여 글 전체의 내용을 요약한다.", "[6국02-03] 글을 읽고 글쓴이가 말하고자 하는 주장이나 주제를 파악한다.", "[6국02-04] 글을 읽고 내용의 타당성과 표현의 적절성을 판단한다.", "[6국02-05] 매체에 따른 다양한 읽기 방법을 이해하고 적절하게 적용하며 읽는다.", "[6국02-06] 자신의 읽기 습관을 점검하며 스스로 글을 찾아 읽는 태도를 지닌다.", "[6국03-01] 쓰기는 절차에 따라 의미를 구성하고 표현하는 과정임을 이해하고 글을 쓴다.", "[6국03-02] 목적이나 주제에 따라 알맞은 내용과 매체를 선정하여 글을 쓴다.", "[6국03-03] 목적이나 대상에 따라 알맞은 형식과 자료를 사용하여 설명하는 글을 쓴다.", "[6국03-04] 적절한 근거와 알맞은 표현을 사용하여 주장하는 글을 쓴다.", "[6국03-05] 체험한 일에 대한 감상이 드러나게 글을 쓴다.", "[6국03-06] 독자를 존중하고 배려하며 글을 쓰는 태도를 지닌다.", "[6국04-01] 언어는 생각을 표현하며 다른 사람과 관계를 맺는 수단임을 이해하고 국어생활을 한다.", "[6국04-02] 국어의 낱말 확장 방법을 탐구하고 어휘력을 높이는 데에 적용한다.", "[6국04-03] 낱말이 상황에 따라 다양하게 해석됨을 탐구한다.", "[6국04-04] 관용 표현을 이해하고 적절하게 활용한다.", "[6국04-05] 국어의 문장 성분을 이해하고 호응 관계가 올바른 문장을 구성한다.", "[6국04-06] 일상생활에서 국어를 바르게 사용하는 태도를 지닌다.", "[6국05-01] 문학은 가치 있는 내용을 언어로 표현하여 아름다움을 느끼게 하는 활동임을 이해하고 문학 활동을 한다.", "[6국05-02] 작품 속 세계와 현실 세계를 비교하며 작품을 감상한다.", "[6국05-03] 비유적 표현의 특성과 효과를 살려 생각과 느낌을 다양하게 표현한다.", "[6국05-04] 일상생활의 경험을 이야기나 극의 형식으로 표현한다.", "[6국05-05] 작품에 대한 이해와 감상을 바탕으로 하여 다른 사람과 적극적으로 소통한다.", "[6국05-06] 작품에서 얻은 깨달음을 바탕으로 하여 바람직한 삶의 가치를 내면화하는 태도를 지닌다." ] } # 학년 선택 드롭다운 grade = st.selectbox("학년을 선택하세요:", list(achievement_standards.keys())) # 선택된 학년에 따른 성취기준 목록 selected_standards = achievement_standards[grade] 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('```', ''))