File size: 4,963 Bytes
1d355ad
fabb74d
8ee7e61
22032f3
8ee7e61
 
 
1d355ad
8ee7e61
22032f3
 
fabb74d
 
b05b815
 
5fd7073
45b4d38
fabb74d
 
 
 
861d95a
fabb74d
 
 
e39486f
fabb74d
e39486f
fabb74d
e39486f
 
fabb74d
e39486f
fabb74d
217a78d
8ee7e61
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
fabb74d
 
e39486f
 
 
fabb74d
feb03cf
fabb74d
 
 
 
 
8ee7e61
 
940b028
8ee7e61
 
 
e39486f
8ee7e61
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3b5780b
39688bd
03d0703
8ee7e61
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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
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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
import os
import time
import streamlit as st
import google.generativeai as genai
from streamlit_extras.colored_header import colored_header
from streamlit_extras.add_vertical_space import add_vertical_space
import markdown

# Google Gemini API Key 설정
genai.configure(api_key=os.environ["GEMINI_API_KEY"])

# 모델 설정
generation_config = {
    "temperature": 1,
    "top_p": 0.95,
    "top_k": 40,
    "max_output_tokens": 8192,
    "response_mime_type": "text/plain",
}

model = genai.GenerativeModel(
    model_name="gemini-2.0-flash",
    generation_config=generation_config,
)

def generate_thinking_routine_example(topic, thinking_routine):
    """
    학습 주제와 사고 루틴을 입력받아 활동 예시를 생성합니다.
    Args:
        topic (str): 학습 주제
        thinking_routine (str): 적용할 사고 루틴
    Returns:
        str: 생성된 활동 예시
    """

    SYSTEM_PROMPT = """
    당신은 교수학습 활동 설계 전문가, 교과교육 내용 전문가, 교육공학자입니다. 
    선생님들이 학습 주제와 사고 루틴을 입력하면, 해당 주제에 적용 가능한 사고 루틴 활동 예시를 상세하게 설명해주세요.
    **활동 예시 구성 요소:**
    1. 학습 주제
    2. 적용할 사고 루틴 및 사고 루틴에 대한 설명명
    3. 활동 목표
    4. 활동 단계별 안내
        - 각 단계별로 사고 루틴을 어떻게 활용하는지 자세하게 설명
        - 예시 질문 포함
    5. 활동 준비물 및 기구
    6. 활동을 위한 자료
        - 활동에 필요한 자료
        - 추가 추천 자료
    7. 활동의 유의점
        - 학생 입장 유의점
        - 교사 입장 유의점
    8. 학생에게 제공할 활동 안내 자료
    * 활동 안내 자료는 초등학생이 이해할 수 있도록 최대한 구체적이고, 단계적, 명시적으로 안내해주세요.
    """

    prompt = [
        SYSTEM_PROMPT,
        f"**학습 주제:** {topic}",
        f"**적용할 사고 루틴:** {thinking_routine}",
        "**활동 예시:**",
    ]

    response = model.generate_content(prompt, stream=True)
    collected_text = ""
    for token in response:
        chunk = token.text
        collected_text += chunk
        yield collected_text  # 실시간 출력을 위해 yield 사용
        time.sleep(0.03)  # 출력 속도 조절

# Streamlit Interface
colored_header(
    label="학습 활동 설계 도우미: 사고 루틴 활용 편",
    description="선생님이 학습 주제와 사고 루틴을 선택하시면, 해당 주제에 적용 가능한 사고 루틴 활동 예시를 보여줍니다.",
    color_name="red-70",
)

add_vertical_space(1)

# 사용자 입력 받기
topic = st.text_input("학습 주제 입력", "")
thinking_routine = st.selectbox(
    "사고 루틴 선택",
    [
        "See-Think-Wonder (보고-생각하고-궁금해하기)",
        "Zoom In (확대)",
        "Think-Puzzle-Explore (생각-궁금-탐구)",
        "Chalk Talk (침묵 대화)",
        "321 Bridge (3-2-1 다리 짓기)",
        "Compass Points (나침반)",
        "Explanation Game (설명 게임)",
        "Headlines (헤드라인)",
        "CSI: Color, Symbol, Image (색상, 기호, 이미지)",
        "Generate-Sort-Connect-Elaborate-Concept Maps (개념도)",
        "Connect-Extend-Challenge (연결-확장-도전)",
        "The 4 C's (4가지 C)",
        "Micro Lab (미니 실험)",
        "I used to think…Now I think… (예전엔 … 라고 생각했지만, 지금은 … 라고 생각해)",
        "What makes you say that? (무엇 때문에 그렇게 생각하니?)",
        "Circle Viewpoints (다양한 관점)",
        "Step Inside (입장 바꿔 생각하기)",
        "Red Light, Yellow Light, Green Light (빨간불, 노란불, 초록불)",
        "Claim Support Question (주장-근거-질문)",
        "Tug of War (줄다리기)",
        "Word-Phrase-Sentence (단어-구-문장)",
        "Think Aloud (사고 구술)",
        "관찰-비교대조-분류",
        "관찰하기",
        "무리 짓기",
        "예상하기",
        "관계망 그리기",
        "도구 사용의 방법 및 절차(순서 단계적으로 제시)"
    ]
)

generate_button = st.button("사고 루틴 활용 예시 생성")

# 출력 영역 정의
output_area = st.empty()

if generate_button and topic and thinking_routine:
    output_text = ""
    output_area.markdown(output_text)
    try:
        for partial_output in generate_thinking_routine_example(topic, thinking_routine):
            output_text = partial_output
            output_area.markdown(output_text)
    except Exception as e:
        st.error(f"오류가 발생했습니다: {str(e)}")

    # 복사 버튼 추가
    if output_text:
        if st.button("출력 내용 복사"):
            st.write(output_text)
            st.success("출력 내용이 복사되었습니다!")