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 키 설정 genai.configure(api_key=os.environ["GEMINI_API_KEY"]) # 모델 설정 generation_config = { "temperature": 0.7, "top_p": 0.85, "top_k": 40, "max_output_tokens": 8192, "response_mime_type": "text/plain", } model = genai.GenerativeModel( model_name="gemini-2.0-flash-thinking-exp-01-21", generation_config=generation_config, ) SYSTEM_PROMPT = """ 대상 학년: {grade} 성취기준 및 주요 내용: {achievement_standard} 위 정보를 바탕으로 핵심 아이디어 이해를 목표로 하는 {grade} 수준에 적합한 개념기반 교육과정을 설계해 주세요. 다음 구성 요소에 따라 상세하고 체계적으로 설명해야 합니다. 각 구성 요소는 서로 연결되고 유기적으로 구성되어야 합니다. 구체적인 예시를 포함하여 설명하고, 학생들의 흥미와 참여를 유도할 수 있는 창의적이고 혁신적인 활동들을 제시해 주세요. 특히, 탐구 활동을 통해 학생들이 스스로 일반화를 도출하고 핵심 개념을 깊이 있게 이해할 수 있도록 설계해야 합니다. 먼저 스트랜드를 2~3개로 설정하세요.스트랜드(Strand)는 단원의 소주제와 같으며, 각 스트랜드는 여러 차시의 수업으로 구성됩니다. 차시별 활동 내용까지 상세히 기술해 주세요. 1. 핵심 아이디어 (Key Ideas & Generalizations): 이 주제를 관찰하는 가장 중요한 관점(Conceptual Lens)은 무엇인가? 이 주제를 통해 학생들이 이해해야 할 가장 중요한 아이디어(Key Ideas)는 무엇인가? 2-3개의 문장으로 명확하게 기술하세요. 위 아이디어들을 뒷받침하는 일반화된 지식(Generalizations)을 3-5개의 문장으로 설명하세요. 2. 매크로 개념 (Macro Concepts) 및 마이크로 개념 (Micro Concepts): 이 주제를 이해하는 데 필요한 큰 틀의 개념(매크로 개념, Conceptual Lens)은 무엇인가? 이 주제와 관련된 구체적인 교과 개념(마이크로 개념, Subject-Specific Concepts)은 무엇인가? 매크로 개념과 마이크로 개념 사이의 관계를 어떻게 설명할 것인가? 구체적인 예시를 사용하여 설명하세요. 3. 지식의 범주 (Knowledge Categories - 린 에릭슨의 분류 기준): 사실 (Facts): 이 주제와 관련된 중요한 사실들을 최소 10개 이상 나열하세요. 개념 (Concepts): 이 주제를 이해하는 데 필요한 핵심 개념들을 정의하고, 각 개념에 대한 예시를 제시하세요. 최소 3개 이상 제시하세요. 일반화 (Generalizations): 개념들 사이의 관계를 설명하는 일반화된 진술을 최소 3개 이상 제시하세요. 원리 (Principles): 일반화를 뒷받침하는 과학적 원리 또는 이론들을 설명하세요. 최소 2개 이상 제시하세요. 4. 탐구 질문 (Inquiry Questions): 학생들의 탐구를 자극하고 핵심 개념 및 일반화로 유도할 수 있는 탐구 질문들을 5개 이상 제시하세요. 질문은 구체적이고 탐구 가능해야 하며, 다양한 수준의 사고를 요구해야 합니다. 각 질문이 어떤 핵심 개념과 연결되는지 명시하세요. 5. 학습 활동 (Learning Activities): 이 주제를 가르치기 위한 주요 학습 영역(스트랜드, Strand)은 무엇인가? 각 스트랜드는 여러 차시의 수업으로 구성됩니다. 각 스트랜드의 학습 목표를 명확하게 제시하고, 해당 목표를 달성하기 위한 차시별 학습 활동을 구체적으로 설계하세요. (예: 토론, 조사, 실험, 프로젝트, 게임, 협력 학습 등) 각 활동에서 학생들이 어떤 개념을 탐구하고 어떤 기능을 개발할 수 있는지, 그리고 어떻게 일반화를 도출할 수 있도록 유도할 것인지 설명하세요. 활동은 학생들의 흥미와 참여를 유도할 수 있도록 창의적이고 혁신적인 방식으로 설계되어야 합니다. 각 활동에 필요한 자료, 절차, 예상 소요 시간 등을 명시하세요. 각 차시에서 다루는 핵심 개념, 탐구 질문, 일반화를 명확하게 연결하세요. 6. 평가 (Assessment): 각 스트랜드 및 핵심 개념에 대한 학생들의 이해도를 평가할 수 있는 평가 방법 및 루브릭(표로 제시할 것)을 제시하세요. (관찰, 발표, 포트폴리오, 자기 평가, 동료 평가, 퀴즈, 시험 등) 루브릭은 상, 중, 하에 대한 구체적인 평가 기준과 각 수준에 해당하는 학생의 작업 또는 수행 예시를 포함해야 합니다. 평가는 단순히 지식 암기 여부를 묻는 것이 아니라, 학생들의 탐구 과정, 사고력, 문제 해결 능력, 협력적 태도, 개념적 이해, 일반화 도출 능력 등을 종합적으로 평가해야 합니다. 7. 개념적 이해를 위한 팁 (Tips for Conceptual Understanding): 학생들이 핵심 개념을 깊이 있게 이해하고 연결하며, 일반화를 도출하고 적용할 수 있도록 돕는 효과적인 교수 전략은 무엇인가? 오개념을 예방하고 해결하는 방법은 무엇인가? 학생들의 다양한 학습 스타일과 요구를 충족하는 방법은 무엇인가? 핵심 개념과 관련된 실생활 사례를 제시하여 학습의 의미와 관련성을 높이는 방안을 제시하세요. 멀티미디어, 시각 자료, 게임, 협력 학습 등 다양한 교수법을 활용하는 방안을 제시하세요. """ def generate_curriculum(grade, achievement_standard): prompt = [ SYSTEM_PROMPT.format(grade=grade, achievement_standard=achievement_standard), ] prompt = "\n".join(prompt) 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', 'fenced_code']) output_area.markdown(html_text, unsafe_allow_html=True) time.sleep(0.05) except Exception as e: st.error(f"계획서 생성 오류: {e}") return "" return full_text # 챗봇 함수 (수정 및 추가 자료 생성) def chat_with_ai(user_input, context): prompt = f"{context}\nUser: {user_input}\nAI:" full_text = "" try: response = model.generate_content(prompt, stream=True) for chunk in response: full_text += chunk.text except Exception as e: st.error(f"챗봇 오류: {e}") return "" return full_text # Streamlit 인터페이스 st.set_page_config(page_title="개념기반 교육과정 AI", page_icon="\U0001F393") # 페이지 스타일 커스터마이징 st.markdown( """ """, unsafe_allow_html=True ) st.markdown("