qqq / app.py
ll7098ll's picture
Update app.py
5ca6d11 verified
import os
import time
import google.generativeai as genai
import streamlit as st
import markdown
# Gemini API 설정
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.5-flash", # 원하는 모델 이름으로 변경
generation_config=generation_config,
)
def generate_questions(context):
"""
학습 주제, 내용, 성취 기준을 포함한 문맥을 입력받아 질문을 생성하는 함수
"""
prompt = f"""질문 수업 전문가, 학습 내용이나 목표를 입력하면
핵심질문 1개
출발질문 3개
전개질문 5개
도착질문 3개
를 만들어줘
질문에 대한 설명은 아래와 같아.
핵심 질문: 수업의 기둥이자 뼈대로 흐름을 관통하는 질문. 교육과정 재구성과 교수학습방법 선정의 기준이 되는 질문. 학습 목표 도달과 관련한 질문. 좋은 핵심 질문을 만들기 위해서는 먼저 학습목표와 내용에 대한 교사의 깊이 있는 연구가 필요
출발 질문: 도입의 마음열기에 해당. 학생들의 흥미와 호기심을 자극하여 수업에 참여시키는 초대장 역할. 좋은 출발 질문은 다양하고 구체적인 답변을 유도하며 학생 입장에서도 답하기 쉬운 질문. 주로 열린 질문을 사용. 구체적으로 질문하며 학생들의 경험이나 생활 속에서 가져오는 것이 좋음
전개 질문: 생각 키우기로 본시 학습에서 다루는 학습목표와 내용에 관한 질문. 주로 지식과 이해를 묻는 수렴적 질문
도착 질문: 생각 넓히기나 삶에 반응하기에서 배운 지식과 실제 삶을 연결하는 질문. 적용, 분석, 종합, 비판에 해당하는 발산적 질문. 학습 내용이 학생의 삶과 연결하는 질문. 수업에서 매우 중요한 부분으로 가급적 구체적으로 실천할 수 있고 확인 가능한 내용의 열린 질문
input: {context}
output:
"""
full_text = ""
error_message = ""
try:
response = model.generate_content(prompt, stream=True)
for chunk in response:
full_text += chunk.text
except Exception as e:
error_message = f"에러 발생: {str(e)}" # 에러 메시지 저장
return full_text, error_message
# Streamlit 인터페이스
st.title("🧠 질문 넘치는 수업")
st.write("학습 정보를 입력하면 다양한 유형의 질문을 바탕으로 질문이 넘치는 수업 설계를 도와줍니다.")
context = st.text_area("학습 주제, 내용, 성취 기준을 자유롭게 입력하세요.", height=100)
output_area = st.empty()
if st.button("질문 생성"):
if context:
result, error = generate_questions(context)
if error:
st.error(error) #에러 메시지 출력
else:
try:
st.markdown(result, unsafe_allow_html=True) # 마크다운으로 출력
except Exception as e:
st.error(f"질문 출력 중 에러 발생: {e}") # 마크다운 파싱 에러 처리
else:
st.warning("학습 정보를 입력하세요.")