ll7098ll commited on
Commit
27086b7
·
verified ·
1 Parent(s): ff91a28

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +165 -165
app.py CHANGED
@@ -1,181 +1,181 @@
1
  import os
2
  import time
3
- import gradio as gr
4
  import google.generativeai as genai
 
 
 
5
 
 
6
  genai.configure(api_key=os.environ["GEMINI_API_KEY"])
7
 
8
- # Create the model
9
  generation_config = {
10
- "temperature": 1,
11
- "top_p": 0.95,
12
- "top_k": 40,
13
- "max_output_tokens": 8192,
14
- "response_mime_type": "text/plain",
15
  }
16
 
17
  model = genai.GenerativeModel(
18
- model_name="gemini-1.5-pro-002",
19
- generation_config=generation_config,
20
  )
21
 
22
  def generate_lesson_plan(grade, subject, concept, achievement_standard, key_question, lesson_number):
23
- """
24
- 학년, 수업 주제, 개념, 성취기준, 핵심 질문, 차시를 입력받아 6단계 질문 중심 수업 지도안을 생성하는 함수
25
- """
26
- # 학년에 따른 숫자-텍스트 매핑 딕셔너리
27
- grade_mapping = {
28
- "초등학교 3학년": 3,
29
- "초등학교 4학년": 4,
30
- "초등학교 5학년": 5,
31
- "초등학교 6학년": 6
32
- }
33
-
34
- # grade 값을 텍스트에서 숫자로 변환
35
- grade_number = grade_mapping.get(grade, 3) # 기본값 3 설정
36
-
37
- # 학년에 따른 추가 프롬프트 설정
38
- grade_prompts = {
39
- 3: "초등학교 3학년 수준에 맞는 내용과 활동으로 구성해주세요.",
40
- 4: "초등학교 4학년 수준에 맞는 내용과 활동으로 구성해주세요.",
41
- 5: "초등학교 5학년 수준에 맞는 내용과 활동으로 구성해주세요.",
42
- 6: "초등학교 6학년 수준에 맞는 내용과 활동으로 구성해주세요."
43
- }
44
-
45
- # 전체 프롬프트 생성
46
- prompt = f"""교수학습 설계 전문가, 질문 및 개념 기반 탐구 학습 전문가로서 아래 정보를 참고하여 주어진 수업 주제에 대한 6단계 질문 기반 개념 학습 지도안을 아래 형식에 따라 작성해줘. 수업 주제, 개념, 성취 기준, 핵심 개념에 맞게 각 단계별 구체적인 내용을 포함하여 작성할 것.
47
-
48
- ## 질문 중심 수업 6단계 정리 (교사/학생 활동, 질문 유형)
49
-
50
- 단계 1. 질문 생성
51
- 교사활동
52
- - 긍정적인 분위기 조성
53
- - 공부할 내용 제시 (흥미 유발)
54
- - 질문 생성 방법 안내 (질문 형성 기법, 질문 줄기 예시 활용)<br>
55
- - 초기 질문 생성 격려
56
- 학생활동
57
- - 이전 학습과 새로운 학습 연결
58
- - 공부할 내용 파악
59
- - 다양한 질문 생성
60
- - 질문 공책 활용
61
- 질문 유형 및 예시
62
- - 사실적 질문(예시 포함)
63
- - 해석적 질문(예시 포함)
64
- - 적용적 질문(예시 포함)
65
- - 개방형 질문(What, Why, How)(예시 포함)
66
-
67
- 단계 2. 핵심 질문 선정
68
- 교사활동
69
- - 학습 목표 제시 및 명확화
70
- - 학생 질문 검토 및 선별
71
- - 성취기준과 질문 연결
72
- - 핵심 질문 도출 안내(안내 질문 활용)
73
- 학생활동
74
- - 초기 질문 발표 및 공유
75
- - 질문 수정 및 보완
76
- - 핵심 질문 선정 및 합의
77
- 질문 유형 및 예시
78
- - 초점화된 질문(단원의 핵심 개념, 탐구 주제 명확히 드러남)(예시 포함)
79
-
80
- 단계 3. 탐구
81
- 교사활동
82
- - 탐구 방법 안내 (개인, 짝, 모둠)
83
- - 시각적 자료 제공
84
- - 탐구 활동 촉진 (안내 질문, 격려, 피드백
85
- - 탐구 과정 관찰 및 지원 (구조화된 탐구, 안내된 탐구)
86
- 학생활동
87
- - 핵심 질문에 대한 탐구 계획 수립 및 실행
88
- - 자료 수집 및 분석
89
- - 다양한 활동 참여 (토의, 토론, 실험, 조사 등)
90
- - 탐구 결과 정리
91
- 질문 유형 및 예시
92
- - - 탐구 질문(What if, How to, Why)(예시 포함)
93
-
94
- 단계 4. 공유
95
- 교사활동
96
- - 다양한 공유 방법 제시 (발표, 전시, 토론 등)
97
- - 탐구 결과 발표 격려
98
- - 피드백 제공 (긍정적, 구체적)
99
- 학생활동
100
- - 탐구 결과 발표 및 공유
101
- - 다른 학생 발표 경청 및 질문
102
- - 피드백 주고받기
103
- - 탐구 결과 보완
104
- 질문 유형 및 예시
105
- - 설명/요약 질문 (What did you find?, How can you explain?)(예시 포함)
106
- - 비교/대조 질문 (What are the similarities and differences?)(예시 포함)
107
-
108
- 단계 5. 개념화
109
- 교사활동
110
- - 학생들의 개념화 과정 지원 (발문, 토의, 개념 지도)
111
- - 핵심 개념 명확화
112
- - 오개념 수정
113
- 학생활동
114
- - 탐구 결과를 바탕으로 개념 도출
115
- - 자신의 언어로 개념 정리 및 설명
116
- - 개념 간 관계 파악
117
- - 핵심 개념 일반화
118
- 질문 유형 및 예시
119
- - 정의 질문 (What is the meaning of...?)(예시 포함)
120
- - 개념 관계 질문 (How does ... relate to ...?)(예시 포함)
121
 
122
- 단계 6. 적용
123
- 교사활동
124
- - 다양한 적용 활동 제시 (실생활 적용, 다른 교과 연계, 창의적 활동)
125
- - 도전적인 과제 제시
126
- - 적용 과정 및 결과 평가
127
- - 피드백 제공
128
- 학생활동
129
- - 배운 개념을 실생활/다른 교과에 적용
130
- - 창의적 사고 및 문제 해결
131
- - 적용 결과 발표 공유
132
- - 학습 경험 성찰
133
- 질문 유형 예시
134
- - 적용 질문(How can you use ... in real life?, Can you apply ... to solve this problem?)(예시 포함)
135
-
136
- ## 수업 정보
137
- * 학년: {grade}
138
- * 주제: {subject}
139
- * 개념: {concept}
140
- * 성취기준: {achievement_standard}
141
- * 핵심 질문: {key_question}
142
- * 차시: {lesson_number}
143
- ## 상세한 6단계 질문 기반 개념 학습 지도안:
144
- """
145
-
146
- # 초기 텍스트 출력
147
- full_text = ""
148
- yield full_text
149
-
150
- try:
151
- # 스트리밍 방식으로 응답 생성
152
- response = model.generate_content([prompt], stream=True)
153
- for chunk in response:
154
- full_text += chunk.text
155
- yield full_text
156
- time.sleep(0.05)
157
- except Exception as e:
158
- yield f"에러 발생: {str(e)}"
159
-
160
- # Gradio 인터페이스 생성
161
- iface = gr.Interface(
162
- fn=generate_lesson_plan,
163
- inputs=[
164
- gr.Dropdown(["초등학교 3학년", "초등학교 4학년", "초등학교 5학년", "초등학교 6학년"], label="학년", value="초등학교 3학년"),
165
- gr.Textbox(lines=1, label="수업 주제"),
166
- gr.Textbox(lines=1, label="개념"),
167
- gr.Textbox(lines=1, label="성취기준"),
168
- gr.Textbox(lines=1, label="핵심 질문"),
169
- gr.Textbox(lines=1, label="차시"),
170
- ],
171
- outputs=gr.Textbox(lines=20, label="질문 기반 개념 학습"),
172
- title="💡 질문 기반 개념 학습",
173
- description="수업 주제에 대한 6단계 질문 기반 개념 학습 지도안을 생성하세요!",
174
- examples=[
175
- ["초등학교 6학년", "광합성", "식물의 잎에서 빛에너지를 이용하여 양분을 만드는 과정", "광합성의 과정을 이해하고 설명할 수 있다.", "식물은 어떻게 스스로 양분을 만들어낼까?", "2"],
176
- ["초등학교 5학년", "조선 시대의 과학 기술", "조선 시대에 발명되거나 발전된 과학 기술", "조선 시대의 과학 기술 발전을 이해하고 설명할 수 있다.", "조선 시대에는 어떤 과학 기술이 발전했을까?", "3"],
177
- ]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
178
  )
179
 
180
- # 인터페이스 실행
181
- iface.launch()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ # 모델 설정
13
  generation_config = {
14
+ "temperature": 1,
15
+ "top_p": 0.95,
16
+ "top_k": 40,
17
+ "max_output_tokens": 8192,
18
+ "response_mime_type": "text/plain",
19
  }
20
 
21
  model = genai.GenerativeModel(
22
+ model_name="gemini-1.5-pro-002",
23
+ generation_config=generation_config,
24
  )
25
 
26
  def generate_lesson_plan(grade, subject, concept, achievement_standard, key_question, lesson_number):
27
+ """
28
+ Generates a 6-step inquiry-based lesson plan for the given grade, subject, concept, achievement standard, key question, and lesson number.
29
+ """
30
+ # Define prompt using user inputs
31
+ prompt = f"""교수학습 설계 전문가, 질문 및 개념 기반 탐구 학습 전문가로서 아래 정보를 참고하여 주어진 수업 주제에 대한 6단계 질문 기반 개념 학습 지도안을 아래 형식에 따라 작성해줘. 수업 주제, 개념, 성취 기준, 핵심 개념에 맞게 각 단계별 구체적인 내용을 포함하여 작성할 것.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
32
 
33
+ ## 질문 중심 수업 6단계 정리 (교사/학생 활동, 질문 유형)
34
+
35
+ 단계 1. 질문 생성
36
+ 교사활동
37
+ - 긍정적인 분위기 조성
38
+ - 공부할 내용 제시 (흥미 유발)
39
+ - 질문 생성 방법 안내 (질문 형성 기법, 질문 줄기 예시 활용)<br>
40
+ - 초기 질문 생성 격려
41
+ 학생활동
42
+ - 이전 학습과 새로운 학습 연결
43
+ - 공부할 내용 파악
44
+ - 다양한 질문 생성
45
+ - 질문 공책 활용
46
+ 질문 유형 및 예시
47
+ - 사실적 질문(예시 포함)
48
+ - 해석적 질문(예시 포함)
49
+ - 적용적 질문(예시 포함)
50
+ - 개방형 질문(What, Why, How)(예시 포함)
51
+
52
+ 단계 2. 핵심 질문 선정
53
+ 교사활동
54
+ - 학습 목표 제시 명확화
55
+ - 학생 질문 검토 및 선별
56
+ - 성취기준과 질문 연결
57
+ - 핵심 질문 도출 안내(안내 질문 활용)
58
+ 학생활동
59
+ - 초기 질문 발표 및 공유
60
+ - 질문 수정 및 보완
61
+ - 핵심 질문 선정 및 합의
62
+ 질문 유형 예시
63
+ - 초점화된 질문(단원의 핵심 개념, 탐구 주제 명확히 드러남)(예시 포함)
64
+
65
+ 단계 3. 탐구
66
+ 교사활동
67
+ - 탐구 방법 안내 (개인, 짝, 모둠)
68
+ - 시각적 자료 제공
69
+ - 탐구 활동 촉진 (안내 질문, 격려, 피드백
70
+ - 탐구 과정 관찰 및 지원 (구조화된 탐구, 안내된 탐구)
71
+ 학생활동
72
+ - 핵심 질문에 대한 탐구 계획 수립 및 실행
73
+ - 자료 수집 및 분석
74
+ - 다양한 활동 참여 (토의, 토론, 실험, 조사 등)
75
+ - 탐구 결과 정리
76
+ 질문 유형 및 예시
77
+ - - 탐구 질문(What if, How to, Why)(예시 포함)
78
+
79
+ 단계 4. 공유
80
+ 교사활동
81
+ - 다양한 공유 방법 제시 (발표, 전시, ���론 등)
82
+ - 탐구 결과 발표 격려
83
+ - 피드백 제공 (긍정적, 구체적)
84
+ 학생활동
85
+ - 탐구 결과 발표 및 공유
86
+ - 다른 학생 발표 경청 질문
87
+ - 피드백 주고받기
88
+ - 탐구 결과 보완
89
+ 질문 유형 및 예시
90
+ - 설명/요약 질문 (What did you find?, How can you explain?)(예시 포함)
91
+ - 비교/대조 질문 (What are the similarities and differences?)(예시 포함)
92
+
93
+ 단계 5. 개념화
94
+ 교사활동
95
+ - 학생들의 개념화 과정 지원 (발문, 토의, 개념 지도)
96
+ - 핵심 개념 명확화
97
+ - 오개념 수정
98
+ 학생활동
99
+ - 탐구 결과를 바탕으로 개념 도출
100
+ - 자신의 언어로 개념 정리 및 설명
101
+ - 개념 간 관계 파악
102
+ - 핵심 개념 일반화
103
+ 질문 유형 및 예시
104
+ - 정의 질문 (What is the meaning of...?)(예시 포함)
105
+ - 개념 관계 질문 (How does ... relate to ...?)(예시 포함)
106
+
107
+ 단계 6. 적용
108
+ 교사활동
109
+ - 다양한 적용 활동 제시 (실생활 적용, 다른 교과 연계, 창의적 활동)
110
+ - 도전적인 과제 제시
111
+ - 적용 과정 및 결과 평가
112
+ - 피드백 제공
113
+ 학생활동
114
+ - 배운 개념을 실생활/다른 교과에 적용
115
+ - 창의적 사고 및 문제 해결
116
+ - 적용 결과 발표 및 공유
117
+ - 학습 경험 성찰
118
+ 질문 유형 및 예시
119
+ - 적용 질문(How can you use ... in real life?, Can you apply ... to solve this problem?)(예시 포함)
120
+
121
+ ## 수업 정보
122
+ * 학년: {grade}
123
+ * 주제: {subject}
124
+ * 개념: {concept}
125
+ * 성취기준: {achievement_standard}
126
+ * 핵심 질문: {key_question}
127
+ * 차시: {lesson_number}
128
+ ## 상세한 6단계 질문 기반 개념 학습 지도안:
129
+ """
130
+
131
+ full_text = "" # 초기 빈 텍스트 출력
132
+
133
+ try:
134
+ response = model.generate_content([prompt], stream=True)
135
+ for chunk in response:
136
+ full_text += chunk.text
137
+ # Convert markdown to HTML for display
138
+ html_text = markdown.markdown(full_text, extensions=['tables'])
139
+ output_area.markdown(html_text, unsafe_allow_html=True)
140
+ time.sleep(0.05)
141
+
142
+ except Exception as e:
143
+ st.error(f"Error: {str(e)}")
144
+ return ""
145
+
146
+ return full_text
147
+
148
+ # Streamlit Interface
149
+ colored_header(
150
+ label="학교자율시간 AI 셰르파",
151
+ description="수업 주제에 대한 6단계 질문 기반 개념 학습 지도안을 생성하세요!",
152
+ color_name="blue-70",
153
  )
154
 
155
+ add_vertical_space(1)
156
+
157
+ with st.sidebar.expander("입력 설정", expanded=True):
158
+ grade = st.selectbox("학년", ["초등학교 3학년", "초등학교 4학년", "초등학교 5학년", "초등학교 6학년"])
159
+ subject = st.text_input("수업 주제")
160
+ concept = st.text_input("개념")
161
+ achievement_standard = st.text_input("성취기준")
162
+ key_question = st.text_input("핵심 질문")
163
+ lesson_number = st.text_input("차시")
164
+
165
+ generate_button = st.button("질문 기반 개념 학습 생성")
166
+
167
+ # 출력 영역 정의
168
+ output_area = st.empty()
169
+
170
+ if generate_button:
171
+ result = generate_lesson_plan(grade, subject, concept, achievement_standard, key_question, lesson_number)
172
+ st.session_state.generated_activity = result
173
+
174
+ # 복사 버튼 추가
175
+ if result:
176
+ if st.button("출력 내용 복사"):
177
+ try:
178
+ st.experimental_set_query_params(copied_text=result)
179
+ st.success("출력 내용이 복사되었습니다!")
180
+ except Exception as e:
181
+ st.error(f"복사 중 오류가 발생했습니다: {str(e)}")