Spaces:
Paused
Paused
| 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 | |
| # Google Gemini API Key 설정 | |
| 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_lesson_plan(grade, subject): | |
| """ | |
| 수업 주제를 입력받아 7단계 질문 중심 수업 지도안을 생성하는 함수 | |
| """ | |
| # 전체 프롬프트 생성 | |
| prompt = f"""교수학습 설계 전문가, 질문 중심 수업 전문가로서 아래 정보를 참고하여 주어진 학년과 수업 주제에 대한 7단계 질문 중심 수업 지도안을 상세하게 작성해 줘. 학년에 맞는 수준으로 내용을 조정해줘. | |
| ## 수업 정보 | |
| * 학년: {grade} | |
| * 수업 주제: {subject} | |
| ## 질문 중심 수업 단계별 정보 | |
| **1단계: 질문 유발 및 탐색 (Hook & Explore)** | |
| * 핵심 요소: 흥미 유발, 호기심 자극, 질문 생성 | |
| * 주요 활동 예시: 흥미로운 질문/상황 제시, 브레인스토밍, 질문 목록 작성 | |
| * 질문 유형 예시: "만약 ~라면?", "왜 ~일까?", "~에 대해 아는 것은 무엇인가?" | |
| **2단계: 질문 분류 및 우선순위 설정 (Categorize & Prioritize)** | |
| * 핵심 요소: 질문 분류, 핵심 질문 선정 | |
| * 주요 활동 예시: 질문 유형 분류 (사실, 개념, 분석, 창의적 질문 등), 우선순위 질문 선정 | |
| * 질문 유형 예시: "어떤 유형의 질문인가?", "가장 중요한 질문은 무엇인가?" | |
| **3단계: 탐구 및 조사 (Inquiry & Investigate)** | |
| * 핵심 요소: 정보 탐색, 자료 분석, 답변 탐색 | |
| * 주요 활동 예시: 개별/팀별 탐구, 다양한 자료 활용 (교과서, 인터넷, 전문가 인터뷰 등) | |
| * 질문 유형 예시: "어디에서 정보를 찾을 수 있을까?", "정보의 신뢰성은 어떻게 판단할까?" | |
| **4단계: 답변 공유 및 토론 (Share & Discuss)** | |
| * 핵심 요소: 답변 발표, 토론, 비판적 사고 | |
| * 주요 활동 예시: 조사 결과 발표, 찬반 토론, 다양한 견해 공유 | |
| * 질문 유형 예시: "다른 답변은 없는가?", "근거는 무엇인가?", "반론은 무엇인가?" | |
| **5단계: 개념 정리 및 심화 학습 (Synthesize & Deepen)** | |
| * 핵심 요소: 핵심 개념 정리, 심화 학습 | |
| * 주요 활동 예시: 핵심 개념 요약, 추가 질문 탐구, 심화 학습 자료 제공 | |
| * 질문 유형 예시: "핵심 개념은 무엇인가?", "더 알고 싶은 것은 무엇인가?" | |
| **6단계: 적용 및 활용 (Apply & Utilize)** | |
| * 핵심 요소: 실생활 적용, 창의적 활동 | |
| * 주요 활동 예시: 실생활 문제 해결, 창의적 산출물 제작 (글쓰기, 그림 그리기, 발표 등) | |
| * 질문 유형 예시: "어떻게 활용할 수 있을까?", "새로운 아이디어는 무엇인가?" | |
| **7단계: 평가 및 피드백 (Assessment & Feedback)** | |
| * 핵심 요소: 학습 과정 및 결과 평가, 피드백 제공 | |
| * 주요 활동 예시: 다양한 평가 방법 활용 (지필, 발표, 프로젝트 등), 질문에 대한 피드백, 자기 평가, 동료 평가 | |
| * 질문 유형 예시: "무엇을 배웠는가?", "어떻게 개선할 수 있을까?" | |
| ## 상세한 7단계 질문 중심 수업 지도안: | |
| """ | |
| full_text = "" # 초기 빈 텍스트 출력 | |
| try: | |
| response = model.generate_content([prompt], stream=True) | |
| for chunk in response: | |
| full_text += chunk.text | |
| # Convert markdown to HTML for display | |
| html_text = markdown.markdown(full_text, extensions=['tables']) | |
| 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 | |
| # Streamlit Interface | |
| colored_header( | |
| label="질문 기반 개념 학습", | |
| description="수업 주제에 대한 7단계 질문 중심 수업 지도안을 생성하세요!", | |
| color_name="red-70", | |
| ) | |
| add_vertical_space(1) | |
| with st.sidebar.expander("입력 설정", expanded=True): | |
| grade = st.selectbox("학년", ["초등학교 1학년", "초등학교 2학년", "초등학교 3학년", "초등학교 4학년", "초등학교 5학년", "초등학교 6학년"]) | |
| subject = st.text_input("수업 주제") | |
| generate_button = st.button("질문 중심 수업 지도안 생성") | |
| # 출력 영역 정의 | |
| output_area = st.empty() | |
| if generate_button: | |
| result = generate_lesson_plan(grade, subject) | |
| st.session_state.generated_activity = result | |
| # 복사 버튼 추가 | |
| if result: | |
| if st.button("출력 내용 복사"): | |
| try: | |
| st.experimental_set_query_params(copied_text=result) | |
| st.success("출력 내용이 복사되었습니다!") | |
| except Exception as e: | |
| st.error(f"복사 중 오류가 발생했습니다: {str(e)}") |