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,28 +23,6 @@ model = genai.GenerativeModel(
|
|
| 21 |
generation_config=generation_config,
|
| 22 |
)
|
| 23 |
|
| 24 |
-
# 프롬프트 설정
|
| 25 |
-
SYSTEM_PROMPT = """
|
| 26 |
-
당신은 교수학습 활동 설계 전문가, 교과교육 내용 전문가, 교육공학자입니다.
|
| 27 |
-
선생님들이 학습 주제와 사고 루틴을 입력하면, 해당 주제에 적용 가능한 사고 루틴 활동 예시를 상세하게 설명해주세요.
|
| 28 |
-
**활동 예시 구성 요소:**
|
| 29 |
-
1. 학습 주제
|
| 30 |
-
2. 적용할 사고 루틴 및 사고 루틴에 대한 설명명
|
| 31 |
-
3. 활동 목표
|
| 32 |
-
4. 활동 단계별 안내
|
| 33 |
-
- 각 단계별로 사고 루틴을 어떻게 활용하는지 자세하게 설명
|
| 34 |
-
- 예시 질문 포함
|
| 35 |
-
5. 활동 준비물 및 기구
|
| 36 |
-
6. 활동을 위한 자료
|
| 37 |
-
- 활동에 필요한 자료
|
| 38 |
-
- 추가 추천 자료
|
| 39 |
-
7. 활동의 유의점
|
| 40 |
-
- 학생 입장 유의점
|
| 41 |
-
- 교사 입장 유의점
|
| 42 |
-
8. 학생에게 제공할 활동 안내 자료
|
| 43 |
-
* 활동 안내 자료는 초등학생이 이해할 수 있도록 최대한 구체적이고, 단계적, 명시적으로 안내해주세요.
|
| 44 |
-
"""
|
| 45 |
-
|
| 46 |
def generate_thinking_routine_example(topic, thinking_routine):
|
| 47 |
"""
|
| 48 |
학습 주제와 사고 루틴을 입력받아 활동 예시를 생성합니다.
|
|
@@ -53,6 +33,27 @@ def generate_thinking_routine_example(topic, thinking_routine):
|
|
| 53 |
str: 생성된 활동 예시
|
| 54 |
"""
|
| 55 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 56 |
prompt = [
|
| 57 |
SYSTEM_PROMPT,
|
| 58 |
f"**학습 주제:** {topic}",
|
|
@@ -65,56 +66,71 @@ def generate_thinking_routine_example(topic, thinking_routine):
|
|
| 65 |
for token in response:
|
| 66 |
chunk = token.text
|
| 67 |
collected_text += chunk
|
| 68 |
-
yield collected_text
|
| 69 |
-
time.sleep(0.03)
|
| 70 |
|
| 71 |
-
#
|
| 72 |
-
|
| 73 |
-
|
| 74 |
-
inputs=[
|
| 75 |
-
gr.Textbox(lines=2, label="학습 주제 입력"),
|
| 76 |
-
gr.Dropdown(
|
| 77 |
-
choices=[
|
| 78 |
-
"See-Think-Wonder (보고-생각하고-궁금해하기)",
|
| 79 |
-
"Zoom In (확대)",
|
| 80 |
-
"Think-Puzzle-Explore (생각-궁금-탐구)",
|
| 81 |
-
"Chalk Talk (침묵 대화)",
|
| 82 |
-
"321 Bridge (3-2-1 다리 짓기)",
|
| 83 |
-
"Compass Points (나침반)",
|
| 84 |
-
"Explanation Game (설명 게임)",
|
| 85 |
-
"Headlines (헤드라인)",
|
| 86 |
-
"CSI: Color, Symbol, Image (색상, 기호, 이미지)",
|
| 87 |
-
"Generate-Sort-Connect-Elaborate-Concept Maps (개념도)",
|
| 88 |
-
"Connect-Extend-Challenge (연결-확장-도전)",
|
| 89 |
-
"The 4 C's (4가지 C)",
|
| 90 |
-
"Micro Lab (미니 실험)",
|
| 91 |
-
"I used to think…Now I think… (예전엔 … 라고 생각했지만, 지금은 … 라고 생각해)",
|
| 92 |
-
"What makes you say that? (무엇 때문에 그렇게 생각하니?)",
|
| 93 |
-
"Circle Viewpoints (다양한 관점)",
|
| 94 |
-
"Step Inside (입장 바꿔 생각하기)",
|
| 95 |
-
"Red Light, Yellow Light, Green Light (빨간불, 노란불, 초록불)",
|
| 96 |
-
"Claim Support Question (주장-근거-질문)",
|
| 97 |
-
"Tug of War (줄다리기)",
|
| 98 |
-
"Word-Phrase-Sentence (단어-구-문장)",
|
| 99 |
-
"Think Aloud (사고 구술)",
|
| 100 |
-
"관찰-비교대조-분류",
|
| 101 |
-
"관찰하기",
|
| 102 |
-
"무리 짓기",
|
| 103 |
-
"예상하기",
|
| 104 |
-
"관계망 그리기",
|
| 105 |
-
"도구 사용의 방법 및 절차(순서 단계적으로 제시)"
|
| 106 |
-
],
|
| 107 |
-
label="사고 루틴 선택"
|
| 108 |
-
),
|
| 109 |
-
],
|
| 110 |
-
outputs=gr.Textbox(lines=15, label="사고 루틴 활용 예시"),
|
| 111 |
-
title="학습 활동 설계 도우미: 사고 루틴 활용 편",
|
| 112 |
description="선생님이 학습 주제와 사고 루틴을 선택하시면, 해당 주제에 적용 가능한 사고 루틴 활동 예시를 보여줍니다.",
|
| 113 |
-
|
| 114 |
-
|
| 115 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 116 |
]
|
| 117 |
)
|
| 118 |
|
| 119 |
-
|
| 120 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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_thinking_routine_example(topic, thinking_routine):
|
| 27 |
"""
|
| 28 |
학습 주제와 사고 루틴을 입력받아 활동 예시를 생성합니다.
|
|
|
|
| 33 |
str: 생성된 활동 예시
|
| 34 |
"""
|
| 35 |
|
| 36 |
+
SYSTEM_PROMPT = """
|
| 37 |
+
당신은 교수학습 활동 설계 전문가, 교과교육 내용 전문가, 교육공학자입니다.
|
| 38 |
+
선생님들이 학습 주제와 사고 루틴을 입력하면, 해당 주제에 적용 가능한 사고 루틴 활동 예시를 상세하게 설명해주세요.
|
| 39 |
+
**활동 예시 구성 요소:**
|
| 40 |
+
1. 학습 주제
|
| 41 |
+
2. 적용할 사고 루틴 및 사고 루틴에 대한 설명명
|
| 42 |
+
3. 활동 목표
|
| 43 |
+
4. 활동 단계별 안내
|
| 44 |
+
- 각 단계별로 사고 루틴을 어떻게 활용하는지 자세하게 설명
|
| 45 |
+
- 예시 질문 포함
|
| 46 |
+
5. 활동 준비물 및 기구
|
| 47 |
+
6. 활동을 위한 자료
|
| 48 |
+
- 활동에 필요한 자료
|
| 49 |
+
- 추가 추천 자료
|
| 50 |
+
7. 활동의 유의점
|
| 51 |
+
- 학생 입장 유의점
|
| 52 |
+
- 교사 입장 유의점
|
| 53 |
+
8. 학생에게 제공할 활동 안내 자료
|
| 54 |
+
* 활동 안내 자료는 초등학생이 이해할 수 있도록 최대한 구체적이고, 단계적, 명시적으로 안내해주세요.
|
| 55 |
+
"""
|
| 56 |
+
|
| 57 |
prompt = [
|
| 58 |
SYSTEM_PROMPT,
|
| 59 |
f"**학습 주제:** {topic}",
|
|
|
|
| 66 |
for token in response:
|
| 67 |
chunk = token.text
|
| 68 |
collected_text += chunk
|
| 69 |
+
yield collected_text # 실시간 출력을 위해 yield 사용
|
| 70 |
+
time.sleep(0.03) # 출력 속도 조절
|
| 71 |
|
| 72 |
+
# Streamlit Interface
|
| 73 |
+
colored_header(
|
| 74 |
+
label="학습 활동 설계 도우미: 사고 루틴 활용 편",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 75 |
description="선생님이 학습 주제와 사고 루틴을 선택하시면, 해당 주제에 적용 가능한 사고 루틴 활동 예시를 보여줍니다.",
|
| 76 |
+
color_name="red-70",
|
| 77 |
+
)
|
| 78 |
+
|
| 79 |
+
add_vertical_space(1)
|
| 80 |
+
|
| 81 |
+
# 사용자 입력 받기
|
| 82 |
+
topic = st.text_input("학습 주제 입력", "")
|
| 83 |
+
thinking_routine = st.selectbox(
|
| 84 |
+
"사고 루틴 선택",
|
| 85 |
+
[
|
| 86 |
+
"See-Think-Wonder (보고-생각하고-궁금해하기)",
|
| 87 |
+
"Zoom In (확대)",
|
| 88 |
+
"Think-Puzzle-Explore (생각-궁금-탐구)",
|
| 89 |
+
"Chalk Talk (침묵 대화)",
|
| 90 |
+
"321 Bridge (3-2-1 다리 짓기)",
|
| 91 |
+
"Compass Points (나침반)",
|
| 92 |
+
"Explanation Game (설명 게임)",
|
| 93 |
+
"Headlines (헤드라인)",
|
| 94 |
+
"CSI: Color, Symbol, Image (색상, 기호, 이미지)",
|
| 95 |
+
"Generate-Sort-Connect-Elaborate-Concept Maps (개념도)",
|
| 96 |
+
"Connect-Extend-Challenge (연결-확장-도전)",
|
| 97 |
+
"The 4 C's (4가지 C)",
|
| 98 |
+
"Micro Lab (미니 실험)",
|
| 99 |
+
"I used to think…Now I think… (예전엔 … 라고 생각했지만, 지금은 … 라고 생각해)",
|
| 100 |
+
"What makes you say that? (무엇 때문에 그렇게 생각하니?)",
|
| 101 |
+
"Circle Viewpoints (다양한 관점)",
|
| 102 |
+
"Step Inside (입장 바꿔 생각하기)",
|
| 103 |
+
"Red Light, Yellow Light, Green Light (빨간불, 노란불, 초록불)",
|
| 104 |
+
"Claim Support Question (주장-근거-질문)",
|
| 105 |
+
"Tug of War (줄다리기)",
|
| 106 |
+
"Word-Phrase-Sentence (단어-구-문장)",
|
| 107 |
+
"Think Aloud (사고 구술)",
|
| 108 |
+
"관찰-비교대조-분류",
|
| 109 |
+
"관찰하기",
|
| 110 |
+
"무리 짓기",
|
| 111 |
+
"예상하기",
|
| 112 |
+
"관계망 그리기",
|
| 113 |
+
"도구 사용의 방법 및 절차(순서 단계적으로 제시)"
|
| 114 |
]
|
| 115 |
)
|
| 116 |
|
| 117 |
+
generate_button = st.button("사고 루틴 활용 예시 생성")
|
| 118 |
+
|
| 119 |
+
# 출력 영역 정의
|
| 120 |
+
output_area = st.empty()
|
| 121 |
+
|
| 122 |
+
if generate_button and topic and thinking_routine:
|
| 123 |
+
output_text = ""
|
| 124 |
+
output_area.markdown(output_text)
|
| 125 |
+
try:
|
| 126 |
+
for partial_output in generate_thinking_routine_example(topic, thinking_routine):
|
| 127 |
+
output_text = partial_output
|
| 128 |
+
output_area.markdown(output_text)
|
| 129 |
+
except Exception as e:
|
| 130 |
+
st.error(f"오류가 발생했습니다: {str(e)}")
|
| 131 |
+
|
| 132 |
+
# 복사 버튼 추가
|
| 133 |
+
if output_text:
|
| 134 |
+
if st.button("출력 내용 복사"):
|
| 135 |
+
st.write(output_text)
|
| 136 |
+
st.success("출력 내용이 복사되었습니다!")
|