Update app.py
Browse files
app.py
CHANGED
|
@@ -1,8 +1,6 @@
|
|
| 1 |
import os
|
| 2 |
-
import time
|
| 3 |
import openai
|
| 4 |
import streamlit as st
|
| 5 |
-
from streamlit_chat import message
|
| 6 |
|
| 7 |
# OpenAI API 설정
|
| 8 |
openai_api_key = os.getenv("OPENAI_API_KEY")
|
|
@@ -11,11 +9,8 @@ openai.api_key = openai_api_key
|
|
| 11 |
def openai_chat(text):
|
| 12 |
try:
|
| 13 |
response = openai.ChatCompletion.create(
|
| 14 |
-
model="gpt-
|
| 15 |
-
messages=
|
| 16 |
-
{"role": "system", "content": "학생들이 수업 주제나 내용을 입력하면, 질문을 통해서 학생들 스스로가 그 주제나 내용을 이해할 수 있도록, 마치 소크라테스처럼 끊임 없는 질문을 통해서 스스로 깨달을 수 있도록 도와주세요. 친절하고 든든한 튜터가 되어 학생이 목표를 달성하도록 안내하고, 학생이 주제에서 벗어나면 부드럽게 다시 집중하도록 도와주세요. 학생이 큰 개념을 단계적으로 이해하도록 돕는 질문을 하고, 그 개념을 깊이 파고들 수 있도록 탐구 질문을 던지세요. 학생이 부담을 느끼지 않도록 한 번에 한 질문만 하세요. 학생이 이해한 것을 보여주면 대화를 마무리하세요. 정답을 제시하기 보다는 질문을 통해서 학생이 스스로 이해에 도달할 수 있도록 도와주세요."},
|
| 17 |
-
{"role": "user", "content": text}
|
| 18 |
-
],
|
| 19 |
temperature=0.7,
|
| 20 |
max_tokens=2000,
|
| 21 |
top_p=0.9,
|
|
@@ -102,39 +97,39 @@ st.markdown(
|
|
| 102 |
st.markdown("<div class='main-title'>AI 튜터 🎓</div>", unsafe_allow_html=True)
|
| 103 |
|
| 104 |
# 채팅 세션 초기화
|
| 105 |
-
if "chat_session" not in st.session_state:
|
| 106 |
-
st.session_state.chat_session = []
|
| 107 |
-
|
| 108 |
-
# 채팅 메시지 표시
|
| 109 |
if "messages" not in st.session_state:
|
| 110 |
-
st.session_state.messages = [
|
|
|
|
|
|
|
| 111 |
|
| 112 |
# 사용자와 AI의 아이콘 URL 설정
|
| 113 |
user_icon_url = "https://cdn-icons-png.flaticon.com/512/1995/1995531.png" # 학생 아이콘 (책을 든 학생)
|
| 114 |
assistant_icon_url = "https://cdn-icons-png.flaticon.com/512/4323/4323008.png" # 튜터 아이콘 (안경 쓴 선생님)
|
| 115 |
|
|
|
|
| 116 |
for message in st.session_state.messages:
|
| 117 |
-
|
| 118 |
-
|
| 119 |
-
|
| 120 |
-
|
| 121 |
-
|
| 122 |
-
|
| 123 |
-
|
|
|
|
| 124 |
|
| 125 |
# 사용자 입력 받기
|
| 126 |
if prompt := st.chat_input("🖋학습 내용을 입력하면 AI 튜터가 질문을 통해서 개념을 이해하도록 도와줍니다."):
|
|
|
|
| 127 |
st.session_state.messages.append({"role": "user", "content": prompt})
|
| 128 |
st.markdown(f"<div class='chat-message chat-message-user'><img src='{user_icon_url}' class='chat-avatar chat-avatar-user'>{prompt}</div>", unsafe_allow_html=True)
|
| 129 |
|
| 130 |
# OpenAI API 호출
|
| 131 |
response = openai_chat(prompt)
|
| 132 |
-
st.markdown(f"<div class='chat-message chat-message-assistant'><img src='{assistant_icon_url}' class='chat-avatar'>{response}</div>", unsafe_allow_html=True)
|
| 133 |
st.session_state.messages.append({"role": "assistant", "content": response})
|
|
|
|
| 134 |
|
| 135 |
# ���기화 버튼을 사이드바로 이동
|
| 136 |
with st.sidebar:
|
| 137 |
if st.button("💡 초기화"):
|
| 138 |
-
st.session_state.
|
| 139 |
-
st.session_state.messages = []
|
| 140 |
st.rerun()
|
|
|
|
| 1 |
import os
|
|
|
|
| 2 |
import openai
|
| 3 |
import streamlit as st
|
|
|
|
| 4 |
|
| 5 |
# OpenAI API 설정
|
| 6 |
openai_api_key = os.getenv("OPENAI_API_KEY")
|
|
|
|
| 9 |
def openai_chat(text):
|
| 10 |
try:
|
| 11 |
response = openai.ChatCompletion.create(
|
| 12 |
+
model="gpt-4",
|
| 13 |
+
messages=st.session_state.messages, # 전체 대화 세션 전달
|
|
|
|
|
|
|
|
|
|
| 14 |
temperature=0.7,
|
| 15 |
max_tokens=2000,
|
| 16 |
top_p=0.9,
|
|
|
|
| 97 |
st.markdown("<div class='main-title'>AI 튜터 🎓</div>", unsafe_allow_html=True)
|
| 98 |
|
| 99 |
# 채팅 세션 초기화
|
|
|
|
|
|
|
|
|
|
|
|
|
| 100 |
if "messages" not in st.session_state:
|
| 101 |
+
st.session_state.messages = [
|
| 102 |
+
{"role": "system", "content": "학생들이 수업 주제나 내용을 입력하면, 질문을 통해서 학생들 스스로가 그 주제나 내용을 이해할 수 있도록, 마치 소크라테스처럼 끊임 없는 질문을 통해 스스로 깨달을 수 있도록 도와주세요. 친절하고 든든한 튜터가 되어 학생이 목표를 달성하도록 안내하고, 학생이 주제에서 벗어나면 부드럽게 다시 집중하도록 도와주세요. 학생이 큰 개념을 단계적으로 이해하도록 돕는 질문을 하고, 그 개념을 깊이 파고들 수 있도록 탐구 질문을 던지세요. 학생이 부담을 느끼지 않도록 한 번에 한 질문만 하세요. 학생이 이해한 것을 보여주면 대화를 마무리하세요. 정답을 제시하기 보다는 질문을 통해서 학생이 스스로 이해에 도달할 수 있도록 도와주세요."}
|
| 103 |
+
]
|
| 104 |
|
| 105 |
# 사용자와 AI의 아이콘 URL 설정
|
| 106 |
user_icon_url = "https://cdn-icons-png.flaticon.com/512/1995/1995531.png" # 학생 아이콘 (책을 든 학생)
|
| 107 |
assistant_icon_url = "https://cdn-icons-png.flaticon.com/512/4323/4323008.png" # 튜터 아이콘 (안경 쓴 선생님)
|
| 108 |
|
| 109 |
+
# 채팅 메시지 표시
|
| 110 |
for message in st.session_state.messages:
|
| 111 |
+
if message["role"] != "system":
|
| 112 |
+
role_class = "chat-message-user" if message["role"] == "user" else "chat-message-assistant"
|
| 113 |
+
avatar_url = user_icon_url if message["role"] == "user" else assistant_icon_url
|
| 114 |
+
avatar_class = "chat-avatar-user" if message["role"] == "user" else "chat-avatar"
|
| 115 |
+
st.markdown(
|
| 116 |
+
f"<div class='chat-message {role_class}'><img src='{avatar_url}' class='chat-avatar {avatar_class}'>{message['content']}</div>",
|
| 117 |
+
unsafe_allow_html=True
|
| 118 |
+
)
|
| 119 |
|
| 120 |
# 사용자 입력 받기
|
| 121 |
if prompt := st.chat_input("🖋학습 내용을 입력하면 AI 튜터가 질문을 통해서 개념을 이해하도록 도와줍니다."):
|
| 122 |
+
# 사용자의 메시지를 세션에 추가
|
| 123 |
st.session_state.messages.append({"role": "user", "content": prompt})
|
| 124 |
st.markdown(f"<div class='chat-message chat-message-user'><img src='{user_icon_url}' class='chat-avatar chat-avatar-user'>{prompt}</div>", unsafe_allow_html=True)
|
| 125 |
|
| 126 |
# OpenAI API 호출
|
| 127 |
response = openai_chat(prompt)
|
|
|
|
| 128 |
st.session_state.messages.append({"role": "assistant", "content": response})
|
| 129 |
+
st.markdown(f"<div class='chat-message chat-message-assistant'><img src='{assistant_icon_url}' class='chat-avatar'>{response}</div>", unsafe_allow_html=True)
|
| 130 |
|
| 131 |
# ���기화 버튼을 사이드바로 이동
|
| 132 |
with st.sidebar:
|
| 133 |
if st.button("💡 초기화"):
|
| 134 |
+
del st.session_state.messages # 메시지 세션 상태 삭제
|
|
|
|
| 135 |
st.rerun()
|