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("
\U0001F393 개념기반 교육과정 AI
", unsafe_allow_html=True) add_vertical_space(1) with st.sidebar: st.markdown("## ⚙️ 입력 설정") grade_options = [f"초등학교 {i}학년" for i in range(1, 7)] + [f"중학교 {i}학년" for i in range(1, 4)] grade_selected = st.selectbox("🎒 학년 선택", grade_options, index=0) achievement_standard = st.text_area("📖 성취기준 및 주요 내용", height=150) generate_button = st.button("🚀 계획서 생성") # 출력 및 챗봇 영역 output_area = st.empty() # 상태 변수 if "messages" not in st.session_state: st.session_state.messages = [] st.session_state.chat_mode = False # 계획서 생성 버튼 클릭 시 if generate_button: with st.spinner("⏳ 계획서 생성 중..."): result = generate_curriculum(grade_selected, achievement_standard) st.session_state.messages.append({"role": "assistant", "content": result}) st.session_state.chat_mode = True # 챗봇 인터페이스 user_icon_url = "https://cdn-icons-png.flaticon.com/512/4323/4323008.png" assistant_icon_url = "https://cdn-icons-png.flaticon.com/512/4712/4712108.png" if st.session_state.chat_mode: if prompt := st.chat_input("개념기반 교육과정 AI에게 수정 및 추가 요청사항을 알려주세요!"): st.session_state.messages.append({"role": "user", "content": prompt}) with st.spinner("🤔 답변 생성 중..."): context = "\n".join([msg["content"] for msg in st.session_state.messages if msg["role"] == "assistant"]) ai_response = chat_with_ai(prompt, context) st.session_state.messages.append({"role": "assistant", "content": ai_response}) for message in st.session_state.messages: if message["role"] != "system": role_class = "chat-message-user" if message["role"] == "user" else "chat-message-assistant" avatar_url = user_icon_url if message["role"] == "user" else assistant_icon_url avatar_class = "chat-avatar-user" if message["role"] == "user" else "chat-avatar" html_text = markdown.markdown(message['content'], extensions=['tables', 'fenced_code']) st.markdown( f"
{html_text}
", unsafe_allow_html=True ) # FAQ with st.expander("❓개념기반 교육과정 AI FAQ"): st.write(""" **Q1. 개념기반 교육과정 AI는 어떤 기능을 제공하나요?** A. 이 앱은 선생님들의 교육과정 설계를 돕기 위해 개발된 AI 도구입니다. 학년과 성취기준을 입력하면 개념기반 교육과정 계획서의 초안을 생성해줍니다. 생성된 계획서는 핵심 아이디어, 매크로/마이크로 개념, 지식 범주, 탐구 질문, 학습 활동, 평가 방법, 개념적 이해를 위한 팁 등을 포함하여 교육과정 설계에 필요한 다양한 요소를 제공합니다. 단순히 계획서 생성뿐만 아니라, 생성된 계획서를 수정하고 추가적인 자료를 생성하는 데에도 도움을 드립니다. **Q2. 계획서 생성 후 수정은 어떻게 하나요?** A. 계획서 생성 후, 하단에 나타나는 챗봇을 이용하여 수정 및 추가 요청사항을 자유롭게 입력할 수 있습니다. 자연어로 질문하거나 요청하면 AI가 답변을 제공하고 계획서를 수정합니다. 예를 들어, "1차시 교수학습 과정안을 생성해줘", "평가 방법을 더 구체적으로 작성해줘", "핵심 아이디어를 수정해줘" 와 같이 입력하면 됩니다. 수정된 내용은 실시간으로 계획서에 반영됩니다. 또한, 챗봇을 통해 추가적인 자료 생성을 요청할 수도 있습니다. **Q3. 어떤 학년에 대한 계획서를 생성할 수 있나요?** A. 현재 초등학교 1학년부터 중학교 3학년까지 모든 학년에 대한 계획서 생성을 지원합니다. 향후 더 넓은 범위의 학년을 지원할 예정입니다. 학년 선택 메뉴에서 원하는 학년을 선택하세요. **Q4. 챗봇을 이용해서 어떤 추가 자료를 생성할 수 있나요?** A. 챗봇을 통해 다음과 같은 추가 자료 생성을 요청할 수 있습니다: * **차시별 교수학습 과정안:** 각 차시의 학습 목표, 활동 내용, 자료, 평가 방법 등을 포함한 상세한 과정안을 생성합니다. *예시: "3차시 교수학습 과정안을 만들어줘"* * **읽기 자료:** 학습 주제와 관련된 흥미로운 읽기 자료를 제공합니다. *예시: "도입 차시에서 활용할 읽기 자료를 만들어줘"* * **활동지:** 학생들이 직접 참여하고 활동할 수 있는 워크시트, 퀴즈, 게임 등을 생성합니다. *예시: "5차시에 활용할 수 있는 활동지를 만들어줘"* * **평가 문항:** 형성평가, 수행평가 등 다양한 유형의 평가 문항을 제시합니다. *예시: "이 단원의 핵심 개념을 평가하는 루브릭을 만들어줘"* 챗봇에 구체적인 요청사항을 입력할수록 더욱 정확하고 유용한 결과를 얻을 수 있습니다. 요청사항을 명확하게 작성하고, 필요한 정보를 충분히 제공할수록 AI가 더욱 효과적으로 도움을 줄 수 있습니다. """)