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(achievement_standard): """ 활동 컨셉을 입력받아 활동을 생성합니다. 아웃풋을 실시간으로 출력합니다. Args: achievement_standard (str): 활동 컨셉 Returns: str: 생성된 활동 """ SYSTEM_PROMPT = """ 당신은 교수학습 활동 설계 전문가, 교과교육 내용 전문가, 교육공학자입니다. 선생님들이 활동 컨셉 및 소개를 입력하면 활동을 자세하게 설명해주세요.. 다음은 활동 설계에 필요한 정보입니다. **활동 구성 요소:** 1. 활동 컨셉 및 소개 2. 활동 목표 3. 활동 단계별 안내 - 1단계: 1단계 활동 안내 - 2단계: 2단계 활동 안내 - 3단계: 3단계 활동 안내 - 4단계: 4단계 활동 안내... 4. 활동 준비물 및 기구 5. 활동을 위한 자료 - 활동에 필요한 자료 - 추가 추천 자료 6. 활동의 유의점 - 학생 입장 유의점 - 교사 입장 유의점 7. 학생에게 제공할 활동 안내 자료 * 활동 안내 자료는 초등학생이 이해할 수 있도록 최대한 구체적이고, 단계적, 명시적으로 안내해주세요. """ prompt = [ SYSTEM_PROMPT, f"**활동 컨셉:** {achievement_standard}", "**활동:**", ] response = model.generate_content(prompt, stream=True) collected_text = "" for token in response: chunk = token.text collected_text += chunk yield collected_text # 실시간 출력을 위해 yield 사용 time.sleep(0.03) # 출력 속도 조절 # Streamlit Interface colored_header( label="학습 활동 설계 도우미", description="선생님이 활동의 컨셉을 입력하시면 활동을 구체적으로 설계해줍니다.", color_name="red-70", ) add_vertical_space(1) achievement_standard = st.text_area("활동 컨셉 및 소개 입력", height=100) generate_button = st.button("학습 활동 생성") # 출력 영역 정의 output_area = st.empty() if generate_button and achievement_standard: output_text = "" output_area.markdown(output_text) try: for partial_output in generate_lesson_plan(achievement_standard): output_text = partial_output output_area.markdown(output_text) except Exception as e: st.error(f"오류가 발생했습니다: {str(e)}") # 복사 버튼 추가 if output_text: if st.button("출력 내용 복사"): st.write(output_text) st.success("출력 내용이 복사되었습니다!")