Update app.py
Browse files
app.py
CHANGED
|
@@ -4,196 +4,52 @@ import time
|
|
| 4 |
import google.generativeai as genai
|
| 5 |
import streamlit as st
|
| 6 |
|
| 7 |
-
#
|
| 8 |
genai.configure(api_key=os.environ["GEMINI_API_KEY"])
|
| 9 |
|
| 10 |
-
#
|
| 11 |
-
|
| 12 |
-
""
|
| 13 |
-
|
| 14 |
-
|
| 15 |
-
|
| 16 |
-
|
| 17 |
-
|
| 18 |
-
|
| 19 |
-
|
| 20 |
-
|
| 21 |
-
|
| 22 |
-
.stButton>button {
|
| 23 |
-
background-color: #007bff; /* 버튼 배경색 설정 */
|
| 24 |
-
color: white; /* 버튼 텍스트 색상 설정 */
|
| 25 |
-
padding: 10px 20px; /* 버튼 패딩 설정 */
|
| 26 |
-
border: none; /* 버튼 테두리 없애기 */
|
| 27 |
-
border-radius: 5px; /* 버튼 모서리 둥글게 */
|
| 28 |
-
cursor: pointer; /* 마우스 커서 모양 변경 */
|
| 29 |
-
}
|
| 30 |
-
.stSelectbox>div>div>select {
|
| 31 |
-
font-size: 16px; /* 셀렉트 박스 폰트 크기 조정 */
|
| 32 |
-
padding: 5px; /* 셀렉트 박스 패딩 추가 */
|
| 33 |
-
border-radius: 5px; /* 셀렉트 박스 모서리 둥글게 */
|
| 34 |
-
}
|
| 35 |
-
.stNumberInput>div>div>input {
|
| 36 |
-
font-size: 16px; /* 숫자 입력 영역 폰트 크기 조정 */
|
| 37 |
-
padding: 5px; /* 숫자 입력 영역 패딩 추가 */
|
| 38 |
-
border-radius: 5px; /* 숫자 입력 영역 모서리 둥글게 */
|
| 39 |
-
}
|
| 40 |
-
.reportview-container .main .block-container {
|
| 41 |
-
padding-top: 2rem; /* 상단 패딩 추가 */
|
| 42 |
-
padding-bottom: 2rem; /* 하단 패딩 추가 */
|
| 43 |
-
padding-left: 3rem; /* 좌측 패딩 추가 */
|
| 44 |
-
padding-right: 3rem; /* 우측 패딩 추가 */
|
| 45 |
-
}
|
| 46 |
-
</style>
|
| 47 |
-
""",
|
| 48 |
-
unsafe_allow_html=True,
|
| 49 |
)
|
| 50 |
|
| 51 |
-
|
| 52 |
-
|
| 53 |
-
|
| 54 |
-
|
| 55 |
-
|
| 56 |
-
|
| 57 |
-
|
| 58 |
-
|
| 59 |
-
|
| 60 |
-
|
| 61 |
-
|
| 62 |
-
|
| 63 |
-
|
| 64 |
-
|
| 65 |
-
|
| 66 |
-
|
| 67 |
-
|
| 68 |
-
|
| 69 |
-
|
| 70 |
-
|
| 71 |
-
|
| 72 |
-
|
| 73 |
-
|
| 74 |
-
|
| 75 |
-
|
| 76 |
-
|
| 77 |
-
|
| 78 |
-
|
| 79 |
-
|
| 80 |
-
|
| 81 |
-
|
| 82 |
-
|
| 83 |
-
• 학생들이 단원의 주요 개념과 관련 개념을 함께 이해할 수 있도록 하기 (예: 개념 지도, 용어 정의 활동, 전문가 초청 강연)
|
| 84 |
-
• “조사하기” 단계에서 더 알아볼 수 있는 관련된 사실적 예를 소개하기 (예: 관련 사진, 동영상, 기사 자료 제시)
|
| 85 |
-
3. 조사하기/연구하기(Investigate)
|
| 86 |
-
• 사실적 예와 사례 연구를 더 알아보고 단원 개념과 연결시키기 (예: 실험, 조사, 인터뷰, 현장 학습)
|
| 87 |
-
• 교과 내 또는 교과 간의 기능을 습득하기 (예: 읽기, 쓰기, 말하기, 듣기, 토론, 발표)
|
| 88 |
-
4. 조직하기/조직 및 정리하기(Organize)
|
| 89 |
-
• 다른 자료와 방법 또는 교과를 사용하여 개념과 생각을 나타내기 (예: 마인드 맵, 포스터, 그림, 글쓰기, 연극, 발표)
|
| 90 |
-
• 사실적 그리고 개념적 수준에서 생각을 구성하기 (예: 분류 활동, 비교 분석 활동, 토론, 논술)
|
| 91 |
-
5. ���반화하기(Generalize)
|
| 92 |
-
• 사실적 예시 안에서 존재하는 패턴을 알아내고 연결성 찾기 (예: 패턴 찾기 활동, 규칙 만들기 활동, 그래프 활용)
|
| 93 |
-
• 전이 가능한 개념적 이해를 명확히 하기 (예: 개념 정리 활동, 요약 활동, 개념 적용 문제 풀이)
|
| 94 |
-
6. 전이하기(Transfer)
|
| 95 |
-
• 새로운 상황에 일반화를 적용하기 (예: 실생활 문제 해결, 프로젝트 활동, 역할극)
|
| 96 |
-
• 학습에 관한 의미 있는 행동 실천하기 (예: 캠페인 활동, 전시회, 발표회)
|
| 97 |
-
7. 전 과정에서 성찰하기(Reflect)
|
| 98 |
-
• 탐구 과정이나 탐구 과정의 마지막에 개별 혹은 그룹으로 평가하기 (예: 자기 평가, 동료 평가, 포트폴리오 평가)
|
| 99 |
-
• 학생들이 자신의 학습 과정을 계획하고 통제할 수 있도록 하기 (예: 학습 계획 세우기, 학습 전략 선택하기, 학습 과정 점검하기)
|
| 100 |
-
|
| 101 |
-
## IB PYP 핵심개념 (참고)
|
| 102 |
-
(아래 핵심개념들을 참고하여 UOI를 설계할 수 있습니다.)
|
| 103 |
-
1. 형태: 어떤 모습인가? 모든 것이 관찰, 식별, 설명이 가능하며 카테고리로 분류할 수 있는 인식 가능한 특징이 있는 형태를 가진다는 것을 이해합니다. (성질, 구조, 유사점, 차이점, 패턴)
|
| 104 |
-
2. 기능: 어떻게 작용하는가? 모든 것이 조사 가능한 목적, 역할 또는 행동 방식을 가짐을 이해합니다. (행동, 소통, 패턴, 역할, 체제)
|
| 105 |
-
3. 인과 관계: 왜 그런가? 어떤 일도 이유 없이 발생하지 않으며, 모든 일에는 인과 관계가 존재하고 행동에는 결과가 수반된다는 것을 이해합니다. (결과, 순서, 패턴, 영향)
|
| 106 |
-
4. 변화: 어떻게 변화되고 있는가? 변화란 한 상태에서 다른 상태로 이동하는 과정임을 이해합니다. 변화는 보편적이며 불가피합니다. (적응, 성장, 주기, 순서, 변형)
|
| 107 |
-
5. 연결성: 다른 것과 어떻게 연결되어 있는가? 우리가 모든 개별적인 요소의 행동이 다른 것에 영향을 미치는 상호작용 체계의 세상에 살고 있음을 이해합니다. (체제, 관계, 연결망, 항상성, 상호의존)
|
| 108 |
-
6. 관점: 시점이란 무엇인가? 지식이 서로 다른 해석, 이해와 관찰결과로 이어지는 서로 다른 관점에 의해 중재되며, 개인적, 집단적, 문화적 또는 과목별로 세분화된 관점이 존재할 수 있음을 이해합니다. (주관성, 진실, 신념, 의견, 편견)
|
| 109 |
-
7. 책임: 우리의 의무는 무엇인가? 사람들이 자신의 이해, 신념과 가치에 기반해 선택을 하고, 그 선택에 기반한 실천을 통해 변화를 만들 수 있다는 것을 이해합니다. (권리, 시민 의식, 가치, 정의, 주도성)
|
| 110 |
-
|
| 111 |
-
## 입력 내용
|
| 112 |
-
1. 학년: {grade_level}
|
| 113 |
-
2. 핵심개념: {selected_key_concepts}
|
| 114 |
-
3. 관련개념: {related_concept}
|
| 115 |
-
4. UOI 의도: {uoi_intention}
|
| 116 |
-
|
| 117 |
-
## UOI 계획서
|
| 118 |
-
(위 내용들을 바탕으로 아래 UOI 계획서를 구체적인 예시와 함께 작성해주세요.)
|
| 119 |
-
1. 중심 아이디어(Central Idea)
|
| 120 |
-
(핵심 개념 및 관련 개념을 바탕으로 학생들이 UOI를 통해 배우게 될 핵심적인 내용을 명확하고 간결하게 제시합니다.)
|
| 121 |
-
2. 핵심개념: {selected_key_concepts}
|
| 122 |
-
3. 관련개념: {related_concept}
|
| 123 |
-
4. UOI 의도: {uoi_intention}
|
| 124 |
-
5. 학습자상(Learner profile)
|
| 125 |
-
(UOI 설계 내용과 관련된 IB 학습자상을 구체적으로 설명합니다.)
|
| 126 |
-
6. 학습 접근 방법(ATL)
|
| 127 |
-
(UOI에서 중점적으로 다루어질 학습 접근 방법을 설명하고, 각 LOI에서 어떻게 적용될지 예시를 들어 설명합니다.)
|
| 128 |
-
|
| 129 |
-
7. LOI 1, 탐구목록 1 (개념기반 탐구학습 절차에 따른 설계)
|
| 130 |
-
- 핵심개념 및 관련개념
|
| 131 |
-
- LOI 1의 일반화된 지식 (LOI 1을 통해 학생들이 배우게 될 핵심적인 지식을 일반화하여 제시합니다.)
|
| 132 |
-
- 관계맺기
|
| 133 |
-
- 집중하기
|
| 134 |
-
- 조사하기/연구하기
|
| 135 |
-
- 조직하기/조직 및 정리하기
|
| 136 |
-
- 일반화하기
|
| 137 |
-
- 전이하기
|
| 138 |
-
- 전 과정에서 성찰하기
|
| 139 |
-
|
| 140 |
-
8. LOI 2, 탐구목록 2 (개념기반 탐구학습 절차에 따른 설계)
|
| 141 |
-
- 핵심개념 및 관련개념
|
| 142 |
-
- LOI 2의 일반화된 지식 (LOI 2를 통해 학생들이 배우게 될 핵심적인 지식을 일반화하여 제시합니다.)
|
| 143 |
-
- 관계맺기
|
| 144 |
-
- 집중하기
|
| 145 |
-
- 조사하기/연구하기
|
| 146 |
-
- 조직하기/조직 및 정리하기
|
| 147 |
-
- 일반화하기
|
| 148 |
-
- 전이하기
|
| 149 |
-
- 전 과정에서 성찰하기
|
| 150 |
-
|
| 151 |
-
9. LOI 3, 탐구목록 3 (개념기반 탐구학��� 절차에 따른 설계)
|
| 152 |
-
- 핵심개념 및 관련개념
|
| 153 |
-
- LOI 3의 일반화된 지식 (LOI 3를 통해 학생들이 배우게 될 핵심적인 지식을 일반화하여 제시합니다.)
|
| 154 |
-
- 관계맺기
|
| 155 |
-
- 집중하기
|
| 156 |
-
- 조사하기/연구하기
|
| 157 |
-
- 조직하기/조직 및 정리하기
|
| 158 |
-
- 일반화하기
|
| 159 |
-
- 전이하기
|
| 160 |
-
- 전 과정에서 성찰하기
|
| 161 |
-
10. 평가 계획 (루브릭)
|
| 162 |
-
- 수행과제 (GRASPS)
|
| 163 |
-
(Goal, Role, Audience, Situation, Product, Standards & Criteria를 포함하여 한국어로 구체적으로 제시합니다.)
|
| 164 |
-
- 평가요소
|
| 165 |
-
- 평가기준 루브릭(평가 요소별 상, 중, 하 구체적이고 명확한 기준)
|
| 166 |
-
"""
|
| 167 |
-
|
| 168 |
-
full_text = ""
|
| 169 |
-
text_area = st.empty() # st.empty()는 그대로 유지
|
| 170 |
-
|
| 171 |
-
try:
|
| 172 |
-
response = model.generate_content(prompt, stream=True)
|
| 173 |
-
for chunk in response:
|
| 174 |
-
full_text += chunk.text
|
| 175 |
-
# 여기에 key 값을 추가합니다.
|
| 176 |
-
text_area.text_area("UOI 설계", value=full_text, height=500, key=f"uoi_area_{time.time()}") # key 값을 동적으로 생성
|
| 177 |
-
time.sleep(0.05)
|
| 178 |
-
|
| 179 |
-
except Exception as e:
|
| 180 |
-
st.error(f"에러 발생: {str(e)}")
|
| 181 |
-
|
| 182 |
-
# Streamlit 인터페이스 설정
|
| 183 |
-
st.title("IB PYP UOI 설계 생성기")
|
| 184 |
-
st.write("학년, 핵심 개념, 관련 개념, UOI 의도를 입력하면 개념 기반 탐구 학습 절차에 따라 UOI 설계를 생성합니다.")
|
| 185 |
-
|
| 186 |
-
# 입력 영역
|
| 187 |
-
grade_level = st.selectbox("학년", [
|
| 188 |
-
"초등학교 1학년", "초등학교 2학년", "초등학교 3학년", "초등학교 4학년", "초등학교 5학년", "초등학교 6학년"
|
| 189 |
-
])
|
| 190 |
-
key_concepts = st.multiselect("핵심 개념(Key Concepts)", [
|
| 191 |
-
"형태", "기능", "인과 관계", "변화", "연결성", "관점", "책임"
|
| 192 |
-
])
|
| 193 |
-
related_concept = st.text_input("관련 개념(Related Concepts)")
|
| 194 |
-
uoi_intention = st.text_area("UOI 의도", height=100)
|
| 195 |
-
|
| 196 |
-
|
| 197 |
-
# 버튼
|
| 198 |
-
if st.button("UOI 설계 생성"):
|
| 199 |
-
generate_uoi(grade_level, key_concepts, related_concept, uoi_intention)
|
|
|
|
| 4 |
import google.generativeai as genai
|
| 5 |
import streamlit as st
|
| 6 |
|
| 7 |
+
# Gemini API 설정
|
| 8 |
genai.configure(api_key=os.environ["GEMINI_API_KEY"])
|
| 9 |
|
| 10 |
+
# 모델 설정
|
| 11 |
+
generation_config = {
|
| 12 |
+
"temperature": 0.5,
|
| 13 |
+
"top_p": 0.95,
|
| 14 |
+
"top_k": 40,
|
| 15 |
+
"max_output_tokens": 8192,
|
| 16 |
+
"response_mime_type": "text/plain",
|
| 17 |
+
}
|
| 18 |
+
|
| 19 |
+
model = genai.GenerativeModel(
|
| 20 |
+
model_name="gemini-1.5-pro-002",
|
| 21 |
+
generation_config=generation_config,
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 22 |
)
|
| 23 |
|
| 24 |
+
# Streamlit 앱
|
| 25 |
+
st.title("개념 학습 도우미")
|
| 26 |
+
st.write("개념을 입력하면 결정적/비결정적 속성, 사례, 비사례를 생성합니다.")
|
| 27 |
+
|
| 28 |
+
# 개념 입력
|
| 29 |
+
concept = st.text_input("개념 입력:")
|
| 30 |
+
|
| 31 |
+
# 결과 출력 영역
|
| 32 |
+
output_area = st.empty()
|
| 33 |
+
|
| 34 |
+
# 버튼 클릭 시 개념 학습 내용 생성
|
| 35 |
+
if st.button("생성"):
|
| 36 |
+
if concept:
|
| 37 |
+
prompt = [
|
| 38 |
+
"사회교과 내용 전문가, 과학교과 내용 전문가, 개념학습 전문가",
|
| 39 |
+
"input: 개념",
|
| 40 |
+
"output: 개념의 결정적 속성\n\n개념의 비결정적 속성\n\n개념의 사례 10개\n\n개념의 비사례(매력적인 비사례 - 사례와 비슷해보이지만 비사례인 것) 10개",
|
| 41 |
+
f"input: {concept}",
|
| 42 |
+
"output:", # 출력 시작
|
| 43 |
+
]
|
| 44 |
+
|
| 45 |
+
full_text = ""
|
| 46 |
+
try:
|
| 47 |
+
response = model.generate_content(prompt, stream=True)
|
| 48 |
+
for chunk in response:
|
| 49 |
+
full_text += chunk.text
|
| 50 |
+
output_area.text_area("개념 학습 내용", value=full_text, height=500, key=f"output_{time.time()}")
|
| 51 |
+
time.sleep(0.05)
|
| 52 |
+
except Exception as e:
|
| 53 |
+
st.error(f"에러 발생: {str(e)}")
|
| 54 |
+
else:
|
| 55 |
+
st.warning("개념을 입력하세요.")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|