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