File size: 7,019 Bytes
1d355ad fabb74d 27086b7 22032f3 27086b7 1d355ad 27086b7 22032f3 27086b7 270bca0 27086b7 270bca0 27de525 270bca0 c4b02a1 27086b7 39688bd 03d0703 b0221ed 27086b7 b871119 8a8da51 27086b7 8a8da51 27086b7 8a8da51 27086b7 8a8da51 27086b7 8a8da51 27086b7 8a8da51 27086b7 8a8da51 27086b7 8a8da51 27086b7 8a8da51 27086b7 8a8da51 27086b7 8a8da51 27086b7 8a8da51 27086b7 8a8da51 27086b7 8a8da51 27086b7 8a8da51 27086b7 8a8da51 27086b7 8a8da51 27086b7 8a8da51 27086b7 8a8da51 27086b7 fe604dc 27086b7 fe604dc c0e8905 270bca0 27086b7 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 |
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.5-flash",
generation_config=generation_config,
)
def generate_lesson_plan(grade, subject, concept, achievement_standard, key_question, lesson_number):
"""
Generates a 6-step inquiry-based lesson plan for the given grade, subject, concept, achievement standard, key question, and lesson number.
"""
# Define prompt using user inputs
prompt = f"""교수학습 설계 전문가, 질문 및 개념 기반 탐구 학습 전문가로서 아래 정보를 참고하여 주어진 수업 주제에 대한 6단계 질문 기반 개념 학습 지도안을 아래 형식에 따라 작성해줘. 수업 주제, 개념, 성취 기준, 핵심 개념에 맞게 각 단계별 구체적인 내용을 포함하여 작성할 것.
## 수업 정보
* 학년: {grade}
* 주제: {subject}
* 개념: {concept}
* 성취기준: {achievement_standard}
* 핵심 질문: {key_question}
* 차시: {lesson_number}
## 질문 중심 수업 6단계 정리 (교사/학생 활동, 질문 유형)
**단계 1. 질문 생성
* 교사활동
- 긍정적인 분위기 조성
- 공부할 내용 제시 (흥미 유발)
- 질문 생성 방법 안내 (질문 형성 기법, 질문 줄기 예시 활용)<br>
- 초기 질문 생성 격려
*학생활동
- 이전 학습과 새로운 학습 연결
- 공부할 내용 파악
- 다양한 질문 생성
- 질문 공책 활용
*질문 유형 및 예시
- 사실적 질문(예시 포함)
- 해석적 질문(예시 포함)
- 적용적 질문(예시 포함)
- 개방형 질문(What, Why, How)(예시 포함)
**단계 2. 핵심 질문 선정
*교사활동
- 학습 목표 제시 및 명확화
- 학생 질문 검토 및 선별
- 성취기준과 질문 연결
- 핵심 질문 도출 안내(안내 질문 활용)
*학생활동
- 초기 질문 발표 및 공유
- 질문 수정 및 보완
- 핵심 질문 선정 및 합의
*질문 유형 및 예시
- 초점화된 질문(단원의 핵심 개념, 탐구 주제 명확히 드러남)(예시 포함)
**단계 3. 탐구
*교사활동
- 탐구 방법 안내 (개인, 짝, 모둠)
- 시각적 자료 제공
- 탐구 활동 촉진 (안내 질문, 격려, 피드백
- 탐구 과정 관찰 및 지원 (구조화된 탐구, 안내된 탐구)
*학생활동
- 핵심 질문에 대한 탐구 계획 수립 및 실행
- 자료 수집 및 분석
- 다양한 활동 참여 (토의, 토론, 실험, 조사 등)
- 탐구 결과 정리
*질문 유형 및 예시
- - 탐구 질문(What if, How to, Why)(예시 포함)
**단계 4. 공유
*교사활동
- 다양한 공유 방법 제시 (발표, 전시, 토론 등)
- 탐구 결과 발표 격려
- 피드백 제공 (긍정적, 구체적)
*학생활동
- 탐구 결과 발표 및 공유
- 다른 학생 발표 경청 및 질문
- 피드백 주고받기
- 탐구 결과 보완
*질문 유형 및 예시
- 설명/요약 질문 (What did you find?, How can you explain?)(예시 포함)
- 비교/대조 질문 (What are the similarities and differences?)(예시 포함)
**단계 5. 개념화
*교사활동
- 학생들의 개념화 과정 지원 (발문, 토의, 개념 지도)
- 핵심 개념 명확화
- 오개념 수정
*학생활동
- 탐구 결과를 바탕으로 개념 도출
- 자신의 언어로 개념 정리 및 설명
- 개념 간 관계 파악
- 핵심 개념 일반화
*질문 유형 및 예시
- 정의 질문 (What is the meaning of...?)(예시 포함)
- 개념 관계 질문 (How does ... relate to ...?)(예시 포함)
**단계 6. 적용
*교사활동
- 다양한 적용 활동 제시 (실생활 적용, 다른 교과 연계, 창의적 활동)
- 도전적인 과제 제시
- 적용 과정 및 결과 평가
- 피드백 제공
*학생활동
- 배운 개념을 실생활/다른 교과에 적용
- 창의적 사고 및 문제 해결
- 적용 결과 발표 및 공유
- 학습 경험 성찰
*질문 유형 및 예시
- 적용 질문(How can you use ... in real life?, Can you apply ... to solve this problem?)(예시 포함)
"""
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="수업 주제에 대한 6단계 질문 기반 개념 학습 지도안을 생성하세요!",
color_name="red-70",
)
add_vertical_space(1)
with st.sidebar.expander("입력 설정", expanded=True):
grade = st.selectbox("학년", ["초등학교 3학년", "초등학교 4학년", "초등학교 5학년", "초등학교 6학년"])
subject = st.text_input("수업 주제")
concept = st.text_input("개념")
achievement_standard = st.text_input("성취기준")
key_question = st.text_input("핵심 질문")
lesson_number = st.text_input("차시")
generate_button = st.button("질문 기반 개념 학습 생성")
# 출력 영역 정의
output_area = st.empty()
if generate_button:
result = generate_lesson_plan(grade, subject, concept, achievement_standard, key_question, lesson_number)
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)}") |