Update app.py
Browse files
app.py
CHANGED
|
@@ -1,10 +1,12 @@
|
|
| 1 |
import os
|
| 2 |
import time
|
| 3 |
-
|
| 4 |
import google.generativeai as genai
|
| 5 |
-
|
|
|
|
|
|
|
| 6 |
|
| 7 |
-
# Google Gemini API
|
| 8 |
genai.configure(api_key=os.environ["GEMINI_API_KEY"])
|
| 9 |
|
| 10 |
# 모델 설정
|
|
@@ -21,43 +23,39 @@ model = genai.GenerativeModel(
|
|
| 21 |
generation_config=generation_config,
|
| 22 |
)
|
| 23 |
|
| 24 |
-
|
| 25 |
-
SYSTEM_PROMPT = """
|
| 26 |
-
당신은 교수학습 활동 설계 전문가, 교과교육 내용 전문가, 교육공학자입니다.
|
| 27 |
-
선생님들이 활동 컨셉 및 소개를 입력하면 활동을 자세하게 설명해주세요..
|
| 28 |
-
다음은 활동 설계에 필요한 정보입니다.
|
| 29 |
-
|
| 30 |
-
**활동 구성 요소:**
|
| 31 |
-
1. 활동 컨셉 및 소개
|
| 32 |
-
2. 활동 목표
|
| 33 |
-
3. 활동 단계별 안내
|
| 34 |
-
- 1단계: 1단계 활동 안내
|
| 35 |
-
- 2단계: 2단계 활동 안내
|
| 36 |
-
- 3단계: 3단계 활동 안내
|
| 37 |
-
- 4단계: 4단계 활동 안내...
|
| 38 |
-
4. 활동 준비물 및 기구
|
| 39 |
-
5. 활동을 위한 자료
|
| 40 |
-
- 활동에 필요한 자료
|
| 41 |
-
- 추가 추천 자료
|
| 42 |
-
6. 활동의 유의점
|
| 43 |
-
- 학생 입장 유의점
|
| 44 |
-
- 교사 입장 유의점
|
| 45 |
-
7. 학생에게 제공할 활동 안내 자료
|
| 46 |
-
* 활동 안내 자료는 초등학생이 이해할 수 있도록 최대한 구체적이고, 단계적, 명시적으로 안내해주세요.
|
| 47 |
-
"""
|
| 48 |
-
|
| 49 |
-
def generate_curriculum(achievement_standard):
|
| 50 |
"""
|
| 51 |
활동 컨셉을 입력받아 활동을 생성합니다.
|
| 52 |
아웃풋을 실시간으로 출력합니다.
|
| 53 |
-
|
| 54 |
Args:
|
| 55 |
achievement_standard (str): 활동 컨셉
|
| 56 |
-
|
| 57 |
Returns:
|
| 58 |
str: 생성된 활동
|
| 59 |
"""
|
| 60 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 61 |
prompt = [
|
| 62 |
SYSTEM_PROMPT,
|
| 63 |
f"**활동 컨셉:** {achievement_standard}",
|
|
@@ -72,17 +70,34 @@ def generate_curriculum(achievement_standard):
|
|
| 72 |
yield collected_text # 실시간 출력을 위해 yield 사용
|
| 73 |
time.sleep(0.03) # 출력 속도 조절
|
| 74 |
|
| 75 |
-
#
|
| 76 |
-
|
| 77 |
-
|
| 78 |
-
inputs=gr.Textbox(lines=3, label="활동 컨셉 및 소개 입력"),
|
| 79 |
-
outputs=gr.Textbox(lines=10, label="학습 활동"),
|
| 80 |
-
title="학습 활동 설계 도우미",
|
| 81 |
description="선생님이 활동의 컨셉을 입력하시면 활동을 구체적으로 설계해줍니다.",
|
| 82 |
-
|
| 83 |
-
["국경, 지형, 자원, 인구정보, 국가 간 관계가 표시된 지도와 시나리오를 주고, 나라 간 국경선을 정하는 활동을 시뮬레이션 게임 모형을 활용해 하고 싶어."],
|
| 84 |
-
]
|
| 85 |
)
|
| 86 |
|
| 87 |
-
|
| 88 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
import os
|
| 2 |
import time
|
| 3 |
+
import streamlit as st
|
| 4 |
import google.generativeai as genai
|
| 5 |
+
from streamlit_extras.colored_header import colored_header
|
| 6 |
+
from streamlit_extras.add_vertical_space import add_vertical_space
|
| 7 |
+
import markdown
|
| 8 |
|
| 9 |
+
# Google Gemini API Key 설정
|
| 10 |
genai.configure(api_key=os.environ["GEMINI_API_KEY"])
|
| 11 |
|
| 12 |
# 모델 설정
|
|
|
|
| 23 |
generation_config=generation_config,
|
| 24 |
)
|
| 25 |
|
| 26 |
+
def generate_lesson_plan(achievement_standard):
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 27 |
"""
|
| 28 |
활동 컨셉을 입력받아 활동을 생성합니다.
|
| 29 |
아웃풋을 실시간으로 출력합니다.
|
|
|
|
| 30 |
Args:
|
| 31 |
achievement_standard (str): 활동 컨셉
|
|
|
|
| 32 |
Returns:
|
| 33 |
str: 생성된 활동
|
| 34 |
"""
|
| 35 |
|
| 36 |
+
SYSTEM_PROMPT = """
|
| 37 |
+
당신은 교수학습 활동 설계 전문가, 교과교육 내용 전문가, 교육공학자입니다.
|
| 38 |
+
선생님들이 활동 컨셉 및 소개를 입력하면 활동을 자세하게 설명해주세요..
|
| 39 |
+
다음은 활동 설계에 필요한 정보입니다.
|
| 40 |
+
**활동 구성 요소:**
|
| 41 |
+
1. 활동 컨셉 및 소개
|
| 42 |
+
2. 활동 목표
|
| 43 |
+
3. 활동 단계별 안내
|
| 44 |
+
- 1단계: 1단계 활동 안내
|
| 45 |
+
- 2단계: 2단계 활동 안내
|
| 46 |
+
- 3단계: 3단계 활동 안내
|
| 47 |
+
- 4단계: 4단계 활동 안내...
|
| 48 |
+
4. 활동 준비물 및 기구
|
| 49 |
+
5. 활동을 위한 자료
|
| 50 |
+
- 활동에 필요한 자료
|
| 51 |
+
- 추가 추천 자료
|
| 52 |
+
6. 활동의 유의점
|
| 53 |
+
- 학생 입장 유의점
|
| 54 |
+
- 교사 입장 유의점
|
| 55 |
+
7. 학생에게 제공할 활동 안내 자료
|
| 56 |
+
* 활동 안내 자료는 초등학생이 이해할 수 있도록 최대한 구체적이고, 단계적, 명시적으로 안내해주세요.
|
| 57 |
+
"""
|
| 58 |
+
|
| 59 |
prompt = [
|
| 60 |
SYSTEM_PROMPT,
|
| 61 |
f"**활동 컨셉:** {achievement_standard}",
|
|
|
|
| 70 |
yield collected_text # 실시간 출력을 위해 yield 사용
|
| 71 |
time.sleep(0.03) # 출력 속도 조절
|
| 72 |
|
| 73 |
+
# Streamlit Interface
|
| 74 |
+
colored_header(
|
| 75 |
+
label="학습 활동 설계 도우미",
|
|
|
|
|
|
|
|
|
|
| 76 |
description="선생님이 활동의 컨셉을 입력하시면 활동을 구체적으로 설계해줍니다.",
|
| 77 |
+
color_name="red-70",
|
|
|
|
|
|
|
| 78 |
)
|
| 79 |
|
| 80 |
+
add_vertical_space(1)
|
| 81 |
+
|
| 82 |
+
achievement_standard = st.text_area("활동 컨셉 및 소개 입력", height=100)
|
| 83 |
+
|
| 84 |
+
generate_button = st.button("학습 활동 생성")
|
| 85 |
+
|
| 86 |
+
# 출력 영역 정의
|
| 87 |
+
output_area = st.empty()
|
| 88 |
+
|
| 89 |
+
if generate_button and achievement_standard:
|
| 90 |
+
output_text = ""
|
| 91 |
+
output_area.markdown(output_text)
|
| 92 |
+
try:
|
| 93 |
+
for partial_output in generate_lesson_plan(achievement_standard):
|
| 94 |
+
output_text = partial_output
|
| 95 |
+
output_area.markdown(output_text)
|
| 96 |
+
except Exception as e:
|
| 97 |
+
st.error(f"오류가 발생했습니다: {str(e)}")
|
| 98 |
+
|
| 99 |
+
# 복사 버튼 추가
|
| 100 |
+
if output_text:
|
| 101 |
+
if st.button("출력 내용 복사"):
|
| 102 |
+
st.write(output_text)
|
| 103 |
+
st.success("출력 내용이 복사되었습니다!")
|