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)}")