Update app.py
Browse files
app.py
CHANGED
|
@@ -1,181 +1,181 @@
|
|
| 1 |
import os
|
| 2 |
import time
|
| 3 |
-
import
|
| 4 |
import google.generativeai as genai
|
|
|
|
|
|
|
|
|
|
| 5 |
|
|
|
|
| 6 |
genai.configure(api_key=os.environ["GEMINI_API_KEY"])
|
| 7 |
|
| 8 |
-
#
|
| 9 |
generation_config = {
|
| 10 |
-
|
| 11 |
-
|
| 12 |
-
|
| 13 |
-
|
| 14 |
-
|
| 15 |
}
|
| 16 |
|
| 17 |
model = genai.GenerativeModel(
|
| 18 |
-
|
| 19 |
-
|
| 20 |
)
|
| 21 |
|
| 22 |
def generate_lesson_plan(grade, subject, concept, achievement_standard, key_question, lesson_number):
|
| 23 |
-
|
| 24 |
-
|
| 25 |
-
|
| 26 |
-
|
| 27 |
-
|
| 28 |
-
"초등학교 3학년": 3,
|
| 29 |
-
"초등학교 4학년": 4,
|
| 30 |
-
"초등학교 5학년": 5,
|
| 31 |
-
"초등학교 6학년": 6
|
| 32 |
-
}
|
| 33 |
-
|
| 34 |
-
# grade 값을 텍스트에서 숫자로 변환
|
| 35 |
-
grade_number = grade_mapping.get(grade, 3) # 기본값 3 설정
|
| 36 |
-
|
| 37 |
-
# 학년에 따른 추가 프롬프트 설정
|
| 38 |
-
grade_prompts = {
|
| 39 |
-
3: "초등학교 3학년 수준에 맞는 내용과 활동으로 구성해주세요.",
|
| 40 |
-
4: "초등학교 4학년 수준에 맞는 내용과 활동으로 구성해주세요.",
|
| 41 |
-
5: "초등학교 5학년 수준에 맞는 내용과 활동으로 구성해주세요.",
|
| 42 |
-
6: "초등학교 6학년 수준에 맞는 내용과 활동으로 구성해주세요."
|
| 43 |
-
}
|
| 44 |
-
|
| 45 |
-
# 전체 프롬프트 생성
|
| 46 |
-
prompt = f"""교수학습 설계 전문가, 질문 및 개념 기반 탐구 학습 전문가로서 아래 정보를 참고하여 주어진 수업 주제에 대한 6단계 질문 기반 개념 학습 지도안을 아래 형식에 따라 작성해줘. 수업 주제, 개념, 성취 기준, 핵심 개념에 맞게 각 단계별 구체적인 내용을 포함하여 작성할 것.
|
| 47 |
-
|
| 48 |
-
## 질문 중심 수업 6단계 정리 (교사/학생 활동, 질문 유형)
|
| 49 |
-
|
| 50 |
-
단계 1. 질문 생성
|
| 51 |
-
교사활동
|
| 52 |
-
- 긍정적인 분위기 조성
|
| 53 |
-
- 공부할 내용 제시 (흥미 유발)
|
| 54 |
-
- 질문 생성 방법 안내 (질문 형성 기법, 질문 줄기 예시 활용)<br>
|
| 55 |
-
- 초기 질문 생성 격려
|
| 56 |
-
학생활동
|
| 57 |
-
- 이전 학습과 새로운 학습 연결
|
| 58 |
-
- 공부할 내용 파악
|
| 59 |
-
- 다양한 질문 생성
|
| 60 |
-
- 질문 공책 활용
|
| 61 |
-
질문 유형 및 예시
|
| 62 |
-
- 사실적 질문(예시 포함)
|
| 63 |
-
- 해석적 질문(예시 포함)
|
| 64 |
-
- 적용적 질문(예시 포함)
|
| 65 |
-
- 개방형 질문(What, Why, How)(예시 포함)
|
| 66 |
-
|
| 67 |
-
단계 2. 핵심 질문 선정
|
| 68 |
-
교사활동
|
| 69 |
-
- 학습 목표 제시 및 명확화
|
| 70 |
-
- 학생 질문 검토 및 선별
|
| 71 |
-
- 성취기준과 질문 연결
|
| 72 |
-
- 핵심 질문 도출 안내(안내 질문 활용)
|
| 73 |
-
학생활동
|
| 74 |
-
- 초기 질문 발표 및 공유
|
| 75 |
-
- 질문 수정 및 보완
|
| 76 |
-
- 핵심 질문 선정 및 합의
|
| 77 |
-
질문 유형 및 예시
|
| 78 |
-
- 초점화된 질문(단원의 핵심 개념, 탐구 주제 명확히 드러남)(예시 포함)
|
| 79 |
-
|
| 80 |
-
단계 3. 탐구
|
| 81 |
-
교사활동
|
| 82 |
-
- 탐구 방법 안내 (개인, 짝, 모둠)
|
| 83 |
-
- 시각적 자료 제공
|
| 84 |
-
- 탐구 활동 촉진 (안내 질문, 격려, 피드백
|
| 85 |
-
- 탐구 과정 관찰 및 지원 (구조화된 탐구, 안내된 탐구)
|
| 86 |
-
학생활동
|
| 87 |
-
- 핵심 질문에 대한 탐구 계획 수립 및 실행
|
| 88 |
-
- 자료 수집 및 분석
|
| 89 |
-
- 다양한 활동 참여 (토의, 토론, 실험, 조사 등)
|
| 90 |
-
- 탐구 결과 정리
|
| 91 |
-
질문 유형 및 예시
|
| 92 |
-
- - 탐구 질문(What if, How to, Why)(예시 포함)
|
| 93 |
-
|
| 94 |
-
단계 4. 공유
|
| 95 |
-
교사활동
|
| 96 |
-
- 다양한 공유 방법 제시 (발표, 전시, 토론 등)
|
| 97 |
-
- 탐구 결과 발표 격려
|
| 98 |
-
- 피드백 제공 (긍정적, 구체적)
|
| 99 |
-
학생활동
|
| 100 |
-
- 탐구 결과 발표 및 공유
|
| 101 |
-
- 다른 학생 발표 경청 및 질문
|
| 102 |
-
- 피드백 주고받기
|
| 103 |
-
- 탐구 결과 보완
|
| 104 |
-
질문 유형 및 예시
|
| 105 |
-
- 설명/요약 질문 (What did you find?, How can you explain?)(예시 포함)
|
| 106 |
-
- 비교/대조 질문 (What are the similarities and differences?)(예시 포함)
|
| 107 |
-
|
| 108 |
-
단계 5. 개념화
|
| 109 |
-
교사활동
|
| 110 |
-
- 학생들의 개념화 과정 지원 (발문, 토의, 개념 지도)
|
| 111 |
-
- 핵심 개념 명확화
|
| 112 |
-
- 오개념 수정
|
| 113 |
-
학생활동
|
| 114 |
-
- 탐구 결과를 바탕으로 개념 도출
|
| 115 |
-
- 자신의 언어로 개념 정리 및 설명
|
| 116 |
-
- 개념 간 관계 파악
|
| 117 |
-
- 핵심 개념 일반화
|
| 118 |
-
질문 유형 및 예시
|
| 119 |
-
- 정의 질문 (What is the meaning of...?)(예시 포함)
|
| 120 |
-
- 개념 관계 질문 (How does ... relate to ...?)(예시 포함)
|
| 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 |
-
|
| 181 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
import os
|
| 2 |
import time
|
| 3 |
+
import streamlit as st
|
| 4 |
import google.generativeai as genai
|
| 5 |
+
from streamlit_extras.colored_header import colored_header
|
| 6 |
+
from streamlit_extras.add_vertical_space import add_vertical_space
|
| 7 |
+
import markdown
|
| 8 |
|
| 9 |
+
# Google Gemini API Key 설정
|
| 10 |
genai.configure(api_key=os.environ["GEMINI_API_KEY"])
|
| 11 |
|
| 12 |
+
# 모델 설정
|
| 13 |
generation_config = {
|
| 14 |
+
"temperature": 1,
|
| 15 |
+
"top_p": 0.95,
|
| 16 |
+
"top_k": 40,
|
| 17 |
+
"max_output_tokens": 8192,
|
| 18 |
+
"response_mime_type": "text/plain",
|
| 19 |
}
|
| 20 |
|
| 21 |
model = genai.GenerativeModel(
|
| 22 |
+
model_name="gemini-1.5-pro-002",
|
| 23 |
+
generation_config=generation_config,
|
| 24 |
)
|
| 25 |
|
| 26 |
def generate_lesson_plan(grade, subject, concept, achievement_standard, key_question, lesson_number):
|
| 27 |
+
"""
|
| 28 |
+
Generates a 6-step inquiry-based lesson plan for the given grade, subject, concept, achievement standard, key question, and lesson number.
|
| 29 |
+
"""
|
| 30 |
+
# Define prompt using user inputs
|
| 31 |
+
prompt = f"""교수학습 설계 전문가, 질문 및 개념 기반 탐구 학습 전문가로서 아래 정보를 참고하여 주어진 수업 주제에 대한 6단계 질문 기반 개념 학습 지도안을 아래 형식에 따라 작성해줘. 수업 주제, 개념, 성취 기준, 핵심 개념에 맞게 각 단계별 구체적인 내용을 포함하여 작성할 것.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 32 |
|
| 33 |
+
## 질문 중심 수업 6단계 정리 (교사/학생 활동, 질문 유형)
|
| 34 |
+
|
| 35 |
+
단계 1. 질문 생성
|
| 36 |
+
교사활동
|
| 37 |
+
- 긍정적인 분위기 조성
|
| 38 |
+
- 공부할 내용 제시 (흥미 유발)
|
| 39 |
+
- 질문 생성 방법 안내 (질문 형성 기법, 질문 줄기 예시 활용)<br>
|
| 40 |
+
- 초기 질문 생성 격려
|
| 41 |
+
학생활동
|
| 42 |
+
- 이전 학습과 새로운 학습 연결
|
| 43 |
+
- 공부할 내용 파악
|
| 44 |
+
- 다양한 질문 생성
|
| 45 |
+
- 질문 공책 활용
|
| 46 |
+
질문 유형 및 예시
|
| 47 |
+
- 사실적 질문(예시 포함)
|
| 48 |
+
- 해석적 질문(예시 포함)
|
| 49 |
+
- 적용적 질문(예시 포함)
|
| 50 |
+
- 개방형 질문(What, Why, How)(예시 포함)
|
| 51 |
+
|
| 52 |
+
단계 2. 핵심 질문 선정
|
| 53 |
+
교사활동
|
| 54 |
+
- 학습 목표 제시 및 명확화
|
| 55 |
+
- 학생 질문 검토 및 선별
|
| 56 |
+
- 성취기준과 질문 연결
|
| 57 |
+
- 핵심 질문 도출 안내(안내 질문 활용)
|
| 58 |
+
학생활동
|
| 59 |
+
- 초기 질문 발표 및 공유
|
| 60 |
+
- 질문 수정 및 보완
|
| 61 |
+
- 핵심 질문 선정 및 합의
|
| 62 |
+
질문 유형 및 예시
|
| 63 |
+
- 초점화된 질문(단원의 핵심 개념, 탐구 주제 명확히 드러남)(예시 포함)
|
| 64 |
+
|
| 65 |
+
단계 3. 탐구
|
| 66 |
+
교사활동
|
| 67 |
+
- 탐구 방법 안내 (개인, 짝, 모둠)
|
| 68 |
+
- 시각적 자료 제공
|
| 69 |
+
- 탐구 활동 촉진 (안내 질문, 격려, 피드백
|
| 70 |
+
- 탐구 과정 관찰 및 지원 (구조화된 탐구, 안내된 탐구)
|
| 71 |
+
학생활동
|
| 72 |
+
- 핵심 질문에 대한 탐구 계획 수립 및 실행
|
| 73 |
+
- 자료 수집 및 분석
|
| 74 |
+
- 다양한 활동 참여 (토의, 토론, 실험, 조사 등)
|
| 75 |
+
- 탐구 결과 정리
|
| 76 |
+
질문 유형 및 예시
|
| 77 |
+
- - 탐구 질문(What if, How to, Why)(예시 포함)
|
| 78 |
+
|
| 79 |
+
단계 4. 공유
|
| 80 |
+
교사활동
|
| 81 |
+
- 다양한 공유 방법 제시 (발표, 전시, ���론 등)
|
| 82 |
+
- 탐구 결과 발표 격려
|
| 83 |
+
- 피드백 제공 (긍정적, 구체적)
|
| 84 |
+
학생활동
|
| 85 |
+
- 탐구 결과 발표 및 공유
|
| 86 |
+
- 다른 학생 발표 경청 및 질문
|
| 87 |
+
- 피드백 주고받기
|
| 88 |
+
- 탐구 결과 보완
|
| 89 |
+
질문 유형 및 예시
|
| 90 |
+
- 설명/요약 질문 (What did you find?, How can you explain?)(예시 포함)
|
| 91 |
+
- 비교/대조 질문 (What are the similarities and differences?)(예시 포함)
|
| 92 |
+
|
| 93 |
+
단계 5. 개념화
|
| 94 |
+
교사활동
|
| 95 |
+
- 학생들의 개념화 과정 지원 (발문, 토의, 개념 지도)
|
| 96 |
+
- 핵심 개념 명확화
|
| 97 |
+
- 오개념 수정
|
| 98 |
+
학생활동
|
| 99 |
+
- 탐구 결과를 바탕으로 개념 도출
|
| 100 |
+
- 자신의 언어로 개념 정리 및 설명
|
| 101 |
+
- 개념 간 관계 파악
|
| 102 |
+
- 핵심 개념 일반화
|
| 103 |
+
질문 유형 및 예시
|
| 104 |
+
- 정의 질문 (What is the meaning of...?)(예시 포함)
|
| 105 |
+
- 개념 관계 질문 (How does ... relate to ...?)(예시 포함)
|
| 106 |
+
|
| 107 |
+
단계 6. 적용
|
| 108 |
+
교사활동
|
| 109 |
+
- 다양한 적용 활동 제시 (실생활 적용, 다른 교과 연계, 창의적 활동)
|
| 110 |
+
- 도전적인 과제 제시
|
| 111 |
+
- 적용 과정 및 결과 평가
|
| 112 |
+
- 피드백 제공
|
| 113 |
+
학생활동
|
| 114 |
+
- 배운 개념을 실생활/다른 교과에 적용
|
| 115 |
+
- 창의적 사고 및 문제 해결
|
| 116 |
+
- 적용 결과 발표 및 공유
|
| 117 |
+
- 학습 경험 성찰
|
| 118 |
+
질문 유형 및 예시
|
| 119 |
+
- 적용 질문(How can you use ... in real life?, Can you apply ... to solve this problem?)(예시 포함)
|
| 120 |
+
|
| 121 |
+
## 수업 정보
|
| 122 |
+
* 학년: {grade}
|
| 123 |
+
* 주제: {subject}
|
| 124 |
+
* 개념: {concept}
|
| 125 |
+
* 성취기준: {achievement_standard}
|
| 126 |
+
* 핵심 질문: {key_question}
|
| 127 |
+
* 차시: {lesson_number}
|
| 128 |
+
## 상세한 6단계 질문 기반 개념 학습 지도안:
|
| 129 |
+
"""
|
| 130 |
+
|
| 131 |
+
full_text = "" # 초기 빈 텍스트 출력
|
| 132 |
+
|
| 133 |
+
try:
|
| 134 |
+
response = model.generate_content([prompt], stream=True)
|
| 135 |
+
for chunk in response:
|
| 136 |
+
full_text += chunk.text
|
| 137 |
+
# Convert markdown to HTML for display
|
| 138 |
+
html_text = markdown.markdown(full_text, extensions=['tables'])
|
| 139 |
+
output_area.markdown(html_text, unsafe_allow_html=True)
|
| 140 |
+
time.sleep(0.05)
|
| 141 |
+
|
| 142 |
+
except Exception as e:
|
| 143 |
+
st.error(f"Error: {str(e)}")
|
| 144 |
+
return ""
|
| 145 |
+
|
| 146 |
+
return full_text
|
| 147 |
+
|
| 148 |
+
# Streamlit Interface
|
| 149 |
+
colored_header(
|
| 150 |
+
label="학교자율시간 AI 셰르파",
|
| 151 |
+
description="수업 주제에 대한 6단계 질문 기반 개념 학습 지도안을 생성하세요!",
|
| 152 |
+
color_name="blue-70",
|
| 153 |
)
|
| 154 |
|
| 155 |
+
add_vertical_space(1)
|
| 156 |
+
|
| 157 |
+
with st.sidebar.expander("입력 설정", expanded=True):
|
| 158 |
+
grade = st.selectbox("학년", ["초등학교 3학년", "초등학교 4학년", "초등학교 5학년", "초등학교 6학년"])
|
| 159 |
+
subject = st.text_input("수업 주제")
|
| 160 |
+
concept = st.text_input("개념")
|
| 161 |
+
achievement_standard = st.text_input("성취기준")
|
| 162 |
+
key_question = st.text_input("핵심 질문")
|
| 163 |
+
lesson_number = st.text_input("차시")
|
| 164 |
+
|
| 165 |
+
generate_button = st.button("질문 기반 개념 학습 생성")
|
| 166 |
+
|
| 167 |
+
# 출력 영역 정의
|
| 168 |
+
output_area = st.empty()
|
| 169 |
+
|
| 170 |
+
if generate_button:
|
| 171 |
+
result = generate_lesson_plan(grade, subject, concept, achievement_standard, key_question, lesson_number)
|
| 172 |
+
st.session_state.generated_activity = result
|
| 173 |
+
|
| 174 |
+
# 복사 버튼 추가
|
| 175 |
+
if result:
|
| 176 |
+
if st.button("출력 내용 복사"):
|
| 177 |
+
try:
|
| 178 |
+
st.experimental_set_query_params(copied_text=result)
|
| 179 |
+
st.success("출력 내용이 복사되었습니다!")
|
| 180 |
+
except Exception as e:
|
| 181 |
+
st.error(f"복사 중 오류가 발생했습니다: {str(e)}")
|