File size: 2,933 Bytes
1d355ad
f74a421
22032f3
c7f7960
1d355ad
22032f3
 
217a78d
22032f3
85cbf3c
4790879
a1b777a
d81f2f6
4790879
22032f3
85cbf3c
 
 
 
 
 
 
 
c7f7960
bcd0d54
022a7a0
85cbf3c
c7f7960
85cbf3c
 
81ec41f
85cbf3c
 
6fdc070
85cbf3c
 
 
 
07f9b67
85cbf3c
 
d335f3a
07f9b67
85cbf3c
 
 
 
 
 
 
 
 
 
 
 
07f9b67
d335f3a
85cbf3c
 
 
c7f7960
d335f3a
c7f7960
85cbf3c
6fdc070
85cbf3c
 
6fdc070
85cbf3c
c7f7960
 
 
 
85cbf3c
 
 
d335f3a
c7f7960
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
import os
import time
import google.generativeai as genai
import gradio as gr

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",
}
safety_settings = [
    {"category": "HARM_CATEGORY_HARASSMENT", "threshold": "BLOCK_MEDIUM_AND_ABOVE"},
    {"category": "HARM_CATEGORY_HATE_SPEECH", "threshold": "BLOCK_MEDIUM_AND_ABOVE"},
    {"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT", "threshold": "BLOCK_MEDIUM_AND_ABOVE"},
    {"category": "HARM_CATEGORY_DANGEROUS_CONTENT", "threshold": "BLOCK_MEDIUM_AND_ABOVE"},
]

# 전역 변수로 chat_session 초기화
chat_session = None


def start_new_chat_session():
    global chat_session
    chat_session = (
        genai.GenerativeModel(
            model_name="gemini-2.0-flash",
            safety_settings=safety_settings,
            generation_config=generation_config,
            system_instruction="""당신은 뛰어난 전문성을 갖춘 수학 지도 전문가, 수 감각 및 수 개념 지도 전문가, 연산 지도 전문가입니다. 선생님이 학생의 수학적 사고 발달, 수 감각, 연산 능력 등에 대해 질문하면, 친절하고 공감하는 태도로 상담을 진행하세요. 선생님에게 학생을 지도하기 위한 조언과 핵심적인 팁을 제공하여, 선생님이 학생의 수학 능력을 향상시키도록 도와주세요. 예를 들어, 특정 연산에 어려움을 겪는 학생에 대한 질문이나, 수 감각을 키우는 방법에 대한 질문에 대해 구체적인 답변을 제시해 주세요. 학생의 발달 단계를 고려한 다양한 교구 및 활동 예시를 제시하는 것도 좋습니다.""",
        )
        .start_chat(history=[])
    )


# 초기 세션 시작
start_new_chat_session()


def respond(user_input, history):
    global chat_session
    history.append((user_input, ""))
    yield "", history

    response = chat_session.send_message(user_input)
    full_response = ""
    for chunk in response.text.split():
        full_response += chunk + " "
        history[-1] = (user_input, full_response)
        yield "", history
        time.sleep(0.05)


def clear_chat():
    start_new_chat_session()
    return []


with gr.Blocks() as demo:
    gr.Markdown(
        "<div style='font-size: 30px; font-weight: bold;'>AI 수학 교육 상담</div>"
    )
    gr.Markdown(
        "학생의 수 감각 발달, 연산 등에 대해 궁금한 점을 AI 수학 교육 전문가에게 질문하세요."
    )
    chatbot = gr.Chatbot(label="채팅창")
    msg = gr.Textbox(label="입력")
    clear = gr.Button("초기화")

    msg.submit(respond, [msg, chatbot], [msg, chatbot])
    # chatbot 상태 초기화 및 새로운 세션 시작
    clear.click(clear_chat, outputs=chatbot, queue=False)

demo.launch(share=True)