Update app.py
Browse files
app.py
CHANGED
|
@@ -1,113 +1,77 @@
|
|
| 1 |
import os
|
| 2 |
-
import time
|
| 3 |
-
|
| 4 |
import google.generativeai as genai
|
| 5 |
import gradio as gr
|
| 6 |
|
| 7 |
-
# Google Gemini API 키 설정
|
| 8 |
genai.configure(api_key=os.environ["GEMINI_API_KEY"])
|
| 9 |
|
| 10 |
-
#
|
| 11 |
generation_config = {
|
| 12 |
-
|
| 13 |
-
|
| 14 |
-
|
| 15 |
-
|
| 16 |
-
|
| 17 |
}
|
| 18 |
|
| 19 |
model = genai.GenerativeModel(
|
| 20 |
-
|
| 21 |
-
|
| 22 |
)
|
| 23 |
|
| 24 |
-
|
| 25 |
-
|
| 26 |
-
|
| 27 |
-
|
| 28 |
-
|
| 29 |
-
|
| 30 |
-
|
| 31 |
-
3
|
| 32 |
-
|
| 33 |
-
|
| 34 |
-
|
| 35 |
-
|
| 36 |
-
|
| 37 |
-
|
| 38 |
-
|
| 39 |
-
|
| 40 |
-
|
| 41 |
-
|
| 42 |
-
|
| 43 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 44 |
"""
|
| 45 |
|
| 46 |
-
|
| 47 |
-
|
| 48 |
-
|
| 49 |
-
|
| 50 |
-
topic (str): 학습 주제
|
| 51 |
-
thinking_routine (str): 적용할 사고 루틴
|
| 52 |
-
Returns:
|
| 53 |
-
str: 생성된 활동 예시
|
| 54 |
-
"""
|
| 55 |
-
|
| 56 |
-
prompt = [
|
| 57 |
-
SYSTEM_PROMPT,
|
| 58 |
-
f"**학습 주제:** {topic}",
|
| 59 |
-
f"**적용할 사고 루틴:** {thinking_routine}",
|
| 60 |
-
"**활동 예시:**",
|
| 61 |
-
]
|
| 62 |
-
|
| 63 |
-
response = model.generate_content(prompt, stream=True)
|
| 64 |
-
collected_text = ""
|
| 65 |
-
for token in response:
|
| 66 |
-
chunk = token.text
|
| 67 |
-
collected_text += chunk
|
| 68 |
-
yield collected_text
|
| 69 |
-
time.sleep(0.03)
|
| 70 |
-
|
| 71 |
-
# Gradio 인터페이스 설정 - 드롭다운 메뉴 추가
|
| 72 |
iface = gr.Interface(
|
| 73 |
-
|
| 74 |
-
|
| 75 |
-
|
| 76 |
-
|
| 77 |
-
|
| 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 |
-
"관찰-비교대조-분류"
|
| 100 |
-
],
|
| 101 |
-
label="사고 루틴 선택"
|
| 102 |
-
),
|
| 103 |
-
],
|
| 104 |
-
outputs=gr.Textbox(lines=15, label="사고 루틴 활용 예시"),
|
| 105 |
-
title="학습 활동 설계 도우미: 사고 루틴 활용 편",
|
| 106 |
-
description="선생님이 학습 주제와 사고 루틴을 선택하시면, 해당 주제에 적용 가능한 사고 루틴 활동 예시를 보여줍니다.",
|
| 107 |
-
examples=[
|
| 108 |
-
["광합성", "See-Think-Wonder (보고-생각하고-궁금해하기)"],
|
| 109 |
-
["조선 시대의 과학 기술", "Think-Puzzle-Explore (생각-궁금-탐구)"],
|
| 110 |
-
]
|
| 111 |
)
|
| 112 |
|
| 113 |
# 인터페이스 실행
|
|
|
|
| 1 |
import os
|
|
|
|
|
|
|
| 2 |
import google.generativeai as genai
|
| 3 |
import gradio as gr
|
| 4 |
|
|
|
|
| 5 |
genai.configure(api_key=os.environ["GEMINI_API_KEY"])
|
| 6 |
|
| 7 |
+
# Create the model
|
| 8 |
generation_config = {
|
| 9 |
+
"temperature": 1,
|
| 10 |
+
"top_p": 0.95,
|
| 11 |
+
"top_k": 64,
|
| 12 |
+
"max_output_tokens": 8192,
|
| 13 |
+
"response_mime_type": "text/plain",
|
| 14 |
}
|
| 15 |
|
| 16 |
model = genai.GenerativeModel(
|
| 17 |
+
model_name="gemini-1.5-flash",
|
| 18 |
+
generation_config=generation_config,
|
| 19 |
)
|
| 20 |
|
| 21 |
+
def generate_questions(context):
|
| 22 |
+
"""
|
| 23 |
+
학습 주제, 내용, 성취 기준을 포함한 문맥을 입력받아 질문을 생성하는 함수
|
| 24 |
+
"""
|
| 25 |
+
|
| 26 |
+
prompt = f"""질문 수업 전문가, 학습 내용이나 목표를 입력하면
|
| 27 |
+
핵심질문 1개
|
| 28 |
+
출발질문 3개
|
| 29 |
+
전개질문 5개
|
| 30 |
+
도착질문 3개
|
| 31 |
+
|
| 32 |
+
를 만들어줘
|
| 33 |
+
|
| 34 |
+
질문에 대한 설명은 아래와 같아.
|
| 35 |
+
|
| 36 |
+
핵심 질문
|
| 37 |
+
수업의 기둥이자 뼈대로 흐름을 관통하는 질문
|
| 38 |
+
교육과정 재구성과 교수학습방법 선정의 기준이 되는 질문
|
| 39 |
+
학습 목표 도달과 관련한 질문
|
| 40 |
+
좋은 핵심 질문을 만들기 위해서는 먼저 학습목표와 내용에 대한
|
| 41 |
+
교사의 깊이 있는 연구가 필요
|
| 42 |
+
|
| 43 |
+
도입질문
|
| 44 |
+
도입의 마음열기에 해당
|
| 45 |
+
학생들의 흥미와 호기심을 자극하여 수업에 참여시키는 초대장 역힐
|
| 46 |
+
좋은 출발 질문은 다양하고 구체적인 답변을 유도 학생 입장에서도 답하기 쉬운 질문
|
| 47 |
+
주로열린 질문을 사용
|
| 48 |
+
구체적으로 질문하며 학생들의 경험이나 생활 속에서 가저오는 것이 좋음
|
| 49 |
+
|
| 50 |
+
전개질문
|
| 51 |
+
-생각 키우기로 본시 학습에서 다루는 학습목표와 내용에 관한 질문
|
| 52 |
+
-주로 지식과 이해를 묻는 수렴적 질문
|
| 53 |
+
|
| 54 |
+
도착질문
|
| 55 |
+
- 생각 넓히기나 삶에 반응하기에서 배운 지식과 실제 삶을 연결하는 질문
|
| 56 |
+
-적용, 분석, 종합, 비판에 해당하는 발산적 질문
|
| 57 |
+
학습 내용이 학생의삶과 연결하는 질문
|
| 58 |
+
. 수업에서 매우 중요한 부분으로 가급적 구체적으로 실천할 수 있고 확인가능한 내용의 열린 질문
|
| 59 |
+
|
| 60 |
+
input: {context}
|
| 61 |
+
|
| 62 |
+
output:
|
| 63 |
"""
|
| 64 |
|
| 65 |
+
response = model.generate_content([prompt])
|
| 66 |
+
return response.text
|
| 67 |
+
|
| 68 |
+
# Gradio 인터페이스 생성
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 69 |
iface = gr.Interface(
|
| 70 |
+
fn=generate_questions,
|
| 71 |
+
inputs=gr.Textbox(lines=10, label="학습 주제, 내용, 성취 기준을 자유롭게 입력하세요."),
|
| 72 |
+
outputs=gr.Textbox(lines=20, label="생성된 질문"),
|
| 73 |
+
title="🧠 질문 생성기",
|
| 74 |
+
description="학습 정보를 입력하면 다양한 유형의 질문을 생성해줍니다.",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 75 |
)
|
| 76 |
|
| 77 |
# 인터페이스 실행
|