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