| | import os |
| | import time |
| | import streamlit as st |
| | import google.generativeai as genai |
| | from streamlit_extras.colored_header import colored_header |
| | from streamlit_extras.add_vertical_space import add_vertical_space |
| | import markdown |
| |
|
| | |
| | genai.configure(api_key=os.environ["GEMINI_API_KEY"]) |
| |
|
| | |
| | generation_config = { |
| | "temperature": 1, |
| | "top_p": 0.95, |
| | "top_k": 40, |
| | "max_output_tokens": 8192, |
| | "response_mime_type": "text/plain", |
| | } |
| |
|
| | model = genai.GenerativeModel( |
| | model_name="gemini-2.0-flash", |
| | generation_config=generation_config, |
| | ) |
| |
|
| | def generate_evaluation_questions(learning_goal): |
| | """ |
| | Generates 2-3 descriptive evaluation questions and grading criteria for the given learning goal. |
| | """ |
| | prompt = f"""교육평가 전문가로서 다음 학습 목표를 참고하여 초등학교 교육과정 수준에 맞는 서술형 평가 문항을 2~3개 작성하고, 각 평가 문항에 대한 평가기준을 상, 중, 하로 제시해줘. |
| | 각 문항은 학습 목표를 정확히 평가할 수 있는 질문으로 구성하고, 평가 기준은 다음과 같이 구체적으로 작성해: |
| | |
| | - 상: 학생이 학습 목표를 완전히 이해하고, 깊이 있는 사고와 구체적인 예시를 통해 명확하게 설명할 수 있는 경우 |
| | - 중: 학생이 학습 목표를 대부분 이해하고, 기본적인 개념을 설명할 수 있으나 예시나 설명이 다소 부족한 경우 |
| | - 하: 학생이 학습 목표를 부분적으로만 이해하고, 기본적인 설명에도 어려움을 겪는 경우 |
| | |
| | ## 학습 목표 |
| | * {learning_goal} |
| | |
| | ## 서술형 평가 문항 및 평가기준 |
| | """ |
| |
|
| | full_text = "" |
| |
|
| | try: |
| | response = model.generate_content([prompt], stream=True) |
| | for chunk in response: |
| | full_text += chunk.text |
| | |
| | html_text = markdown.markdown(full_text, extensions=['tables']) |
| | evaluation_output_area.markdown(html_text, unsafe_allow_html=True) |
| | time.sleep(0.05) |
| |
|
| | except Exception as e: |
| | st.error(f"Error: {str(e)}") |
| | return "" |
| |
|
| | return full_text |
| |
|
| | |
| | colored_header( |
| | label="서술형 평가 문항 생성", |
| | description="학습 목표에 맞는 서술형 평가 문항과 평가 기준을 생성하세요!", |
| | color_name="blue-70", |
| | ) |
| |
|
| | add_vertical_space(1) |
| |
|
| | with st.sidebar.expander("입력 설정", expanded=True): |
| | learning_goal = st.text_input("학습 목표") |
| |
|
| | generate_evaluation_button = st.button("서술형 평가 문항 생성") |
| |
|
| | |
| | evaluation_output_area = st.empty() |
| |
|
| | if generate_evaluation_button: |
| | evaluation_result = generate_evaluation_questions(learning_goal) |
| | st.session_state.generated_evaluation = evaluation_result |
| |
|
| | |
| | if evaluation_result: |
| | if st.button("평가 문항 복사"): |
| | try: |
| | st.experimental_set_query_params(copied_text=evaluation_result) |
| | st.success("평가 문항이 복사되었습니다!") |
| | except Exception as e: |
| | st.error(f"복사 중 오류가 발생했습니다: {str(e)}") |
| |
|