qlessonplan / app.py
ll7098ll's picture
Update app.py
f5d82a1 verified
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)}")