File size: 2,636 Bytes
27c824e
a098bc7
 
27c824e
a098bc7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
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})