| 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 = 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]) |
| |
| clear.click(clear_chat, outputs=chatbot, queue=False) |
|
|
| demo.launch(share=True) |