ll7098ll commited on
Commit
5f98791
·
verified ·
1 Parent(s): 7c077db

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +64 -33
app.py CHANGED
@@ -1,10 +1,12 @@
1
  import os
2
- import streamlit as st
3
  import google.generativeai as genai
 
 
4
  from streamlit_chat import message
5
 
6
  # Google Generative AI API 설정
7
- genai.configure(api_key=os.getenv("GEMINI_API_KEY"))
8
 
9
  # 모델 설정
10
  generation_config = {
@@ -31,44 +33,73 @@ def start_new_chat_session():
31
  safety_settings=safety_settings,
32
  generation_config=generation_config,
33
  system_instruction="""
34
- 교사가 학습 목표를 입력하면, 학생들이 학습 목표에 도달할 수 있게 질문을 계속 해줘,
35
- 학생들은 네 질문에 답을 할 것이야. 그러면 바로 답을 제시하지 말고 질문형태로 피드백을 해줘.
36
  질문을 통해서 학생들이 스스로 학습 목표를 도달할 수 있도록 도와줘.
37
  """,
38
  ).start_chat(history=[])
39
 
40
- # Streamlit 시작
41
- st.title("교육용 Google Generative AI 챗봇")
42
 
43
- # 초기화 버튼으로 새로운 채팅 세션 시작
44
- if st.button("새로운 대화 시작"):
45
- start_new_chat_session()
46
- st.session_state.chat_history = []
47
- st.write("새로운 대화가 시작되었습니다!")
48
 
49
- # 사용자의 입력 받기
50
- user_input = st.text_input("학습 목표를 입력하거나 질문하세요:")
 
 
 
 
 
51
 
52
- # 채팅 세션이 없는 경우 초기화
53
- if 'chat_history' not in st.session_state:
54
- st.session_state.chat_history = []
55
- start_new_chat_session()
 
 
 
56
 
57
- # 사용자 입력 처리
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
58
  if user_input:
59
- # 사용자의 입력을 히스토리에 추가
60
- st.session_state.chat_history.append({"role": "user", "content": user_input})
61
-
62
- # 챗봇의 응답 생성
63
- response = chat_session.send_message(user_input)
64
- chatbot_reply = response.get('content', '오류가 발생했습니다. 다시 시도해주세요.')
65
-
66
- # 챗봇의 응답을 히스토리에 추가
67
- st.session_state.chat_history.append({"role": "bot", "content": chatbot_reply})
68
 
69
- # 채팅 히스토리 표시
70
- for i, chat in enumerate(st.session_state.chat_history):
71
- if chat["role"] == "user":
72
- message(chat['content'], is_user=True, key=f"user_{i}")
73
- else:
74
- message(chat['content'], key=f"bot_{i}")
 
 
 
 
 
 
1
  import os
2
+ import time
3
  import google.generativeai as genai
4
+ import streamlit as st
5
+ import re
6
  from streamlit_chat import message
7
 
8
  # Google Generative AI API 설정
9
+ genai.configure(api_key=os.environ["GEMINI_API_KEY"])
10
 
11
  # 모델 설정
12
  generation_config = {
 
33
  safety_settings=safety_settings,
34
  generation_config=generation_config,
35
  system_instruction="""
36
+ 교사가 학습 목표를 입력하면, 학생들이 학습 목표에 도달할 수 있게 질문을 계속 해줘,
37
+ 학생들은 네 질문에 답을 할 것이야. 그러면 바로 답을 제시하지 말고 질문형태로 피드백을 해줘.
38
  질문을 통해서 학생들이 스스로 학습 목표를 도달할 수 있도록 도와줘.
39
  """,
40
  ).start_chat(history=[])
41
 
42
+ # 초기 세션 시작
43
+ start_new_chat_session()
44
 
45
+ # Streamlit 설정
46
+ st.set_page_config(page_title="질문하는 AI 선생님", layout="centered")
 
 
 
47
 
48
+ st.markdown(
49
+ """
50
+ <div style='font-size: 30px; font-weight: bold; text-align: center;'>질문하는 AI 선생님</div>
51
+ <div style='text-align: center; margin-bottom: 20px;'>학습주제를 입력하면, AI가 끊임 없는 질문을 통해 스스로 학습하게 도와줍니다.</div>
52
+ """,
53
+ unsafe_allow_html=True
54
+ )
55
 
56
+ # 채팅 히스토리 관리
57
+ if "history" not in st.session_state:
58
+ st.session_state.history = []
59
+
60
+ # 채팅 세션 초기화
61
+ if "chat_session" not in st.session_state:
62
+ st.session_state.chat_session = chat_session
63
 
64
+ # 사용자 입력 받기
65
+ user_input = st.text_input(
66
+ "입력", key="user_input", placeholder="여기에 학습 목표나 질문을 입력하세요...",
67
+ help="학습 목표를 입력하거나 학습하고자 하는 주제에 대한 질문을 입력하세요."
68
+ )
69
+
70
+ def respond(user_input):
71
+ st.session_state.history.append({"user": user_input, "ai": ""})
72
+ try:
73
+ response = st.session_state.chat_session.send_message(user_input, stream=True)
74
+ full_text = ""
75
+
76
+ # 스트리밍 응답 처리
77
+ for chunk in response:
78
+ chunk_text = chunk.text
79
+
80
+ # 단어 단위로 분리하여 실시간 출력
81
+ for word in chunk_text.split():
82
+ full_text += word + " "
83
+
84
+ # 히스토리 최신 항목 업데이트
85
+ st.session_state.history[-1]["ai"] = full_text
86
+ time.sleep(0.05) # 출력 속도 조절
87
+
88
+ except Exception as e:
89
+ st.session_state.history[-1]["ai"] = f"에러 발생: {str(e)}"
90
+
91
+ # 응답 생성 및 출력
92
  if user_input:
93
+ respond(user_input)
 
 
 
 
 
 
 
 
94
 
95
+ # 채팅 메시지 출력
96
+ for chat in st.session_state.history:
97
+ if "user" in chat:
98
+ message(chat["user"], is_user=True, key=f"user_{chat['user']}")
99
+ if "ai" in chat:
100
+ message(chat["ai"], is_user=False, key=f"ai_{chat['ai']}")
101
+
102
+ # 초기화 버튼 클릭 시
103
+ if st.button("초기화"):
104
+ start_new_chat_session()
105
+ st.session_state.history = []