Spaces:
Sleeping
Sleeping
import streamlit as st | |
from rag import get_answer_with_rag | |
from rag import get_answer_with_rag, load_generative_model, load_reranker, load_embedding_model, load_mongo_collection | |
load_generative_model() | |
load_reranker() | |
load_embedding_model() | |
load_mongo_collection() | |
st.set_page_config( | |
page_title="PTIT RAG Chatbot", | |
page_icon="🤖", | |
layout="wide" | |
) | |
# --- GIAO DIỆN CHÍNH --- | |
st.title("🤖 PTIT RAG Chatbot") | |
st.caption("Trợ lý ảo thông minh về Học viện Bưu chính Viễn thông") | |
# Khởi tạo session state để lưu trữ lịch sử trò chuyện | |
if "messages" not in st.session_state: | |
st.session_state.messages = [ | |
{"role": "assistant", "content": "Xin chào! Tôi có thể giúp gì cho bạn về các thông tin tại PTIT?"} | |
] | |
# --- SIDEBAR --- | |
with st.sidebar: | |
st.header("Tùy chọn") | |
if st.button("🗑️ Xóa cuộc trò chuyện", use_container_width=True): | |
st.session_state.messages = [ | |
{"role": "assistant", "content": "Cuộc trò chuyện đã được xóa. Hãy bắt đầu lại nhé!"} | |
] | |
st.rerun() | |
st.markdown("---") | |
st.markdown("### Về ứng dụng") | |
st.info("Ứng dụng này sử dụng RAG để trả lời câu hỏi dựa trên tài liệu về PTIT.") | |
# Hiển thị lịch sử trò chuyện | |
for message in st.session_state.messages: | |
avatar = "🧑💻" if message["role"] == "user" else "🤖" | |
with st.chat_message(message["role"], avatar=avatar): | |
st.write(message["content"]) | |
def submit_question(question: str): | |
st.session_state.messages.append({"role": "user", "content": question}) | |
st.rerun() | |
# Khu vực nhập liệu của người dùng | |
if prompt := st.chat_input("Nhập câu hỏi của bạn..."): | |
# Thêm tin nhắn của người dùng vào session state và hiển thị ngay | |
st.session_state.messages.append({"role": "user", "content": prompt}) | |
with st.chat_message("user", avatar="🧑💻"): | |
st.write(prompt) | |
with st.chat_message("assistant", avatar="🤖"): | |
with st.spinner("🤖 Tôi đang suy nghĩ, bạn chờ chút nhé..."): | |
try: | |
response = get_answer_with_rag(prompt) | |
st.markdown(response) | |
st.session_state.messages.append({"role": "assistant", "content": response}) | |
except Exception as e: | |
error_message = "Rất tiếc, đã có lỗi xảy ra. Vui lòng thử lại sau!" | |
st.error(error_message) | |
st.session_state.messages.append({"role": "assistant", "content": error_message}) |