Spaces:
Paused
Paused
# file: app.py | |
import gradio as gr | |
import time | |
# Đảm bảo import đúng các hàm cần thiết từ rag_pipeline | |
from rag_pipeline import initialize_components, generate_response | |
# --- KHỞI TẠO CÁC THÀNH PHẦN (CHỈ CHẠY 1 LẦN KHI ỨNG DỤNG START) --- | |
start_time = time.time() | |
print("Bắt đầu khởi tạo ứng dụng Chatbot Luật Giao thông...") | |
# Đường dẫn đến file dữ liệu của bạn | |
DATA_PATH = "data/luat_chi_tiet_output_openai_sdk_final_cleaned.json" | |
# Hàm này sẽ tải models, dữ liệu, và tạo index. | |
COMPONENTS = initialize_components(DATA_PATH) | |
end_time = time.time() | |
print(f"✅ Ứng dụng đã sẵn sàng! Thời gian khởi tạo: {end_time - start_time:.2f} giây.") | |
# ---------------------------------------------------- | |
# --- GIAO DIỆN GRADIO --- | |
with gr.Blocks(theme=gr.themes.Soft(), title="Chatbot Luật Giao thông Việt Nam") as demo: | |
gr.Markdown( | |
""" | |
# ⚖️ Chatbot Luật Giao thông Việt Nam (Multi-turn) | |
Hỏi đáp về các quy định, mức phạt trong luật giao thông đường bộ. Chatbot có thể hiểu các câu hỏi nối tiếp. | |
*Lưu ý: Đây là một sản phẩm demo. Thông tin chỉ mang tính chất tham khảo.* | |
""" | |
) | |
# Sử dụng gr.Chatbot để quản lý và hiển thị lịch sử trò chuyện | |
chatbot = gr.Chatbot(label="Cuộc trò chuyện", height=500) | |
# Textbox để người dùng nhập câu hỏi | |
msg = gr.Textbox(label="Nhập câu hỏi của bạn", placeholder="Ví dụ: Vượt đèn đỏ bị phạt bao nhiêu tiền?") | |
# Nút để xóa cuộc trò chuyện | |
clear = gr.ClearButton([msg, chatbot]) | |
def respond(message, chat_history): | |
""" | |
Hàm xử lý logic cho mỗi lượt chat. | |
'message' là tin nhắn mới nhất của người dùng. | |
'chat_history' là danh sách các cặp [tin nhắn cũ, trả lời cũ] do Gradio quản lý. | |
""" | |
print(f"Nhận được câu hỏi: '{message}'") | |
print(f"Lịch sử trò chuyện hiện tại: {chat_history}") | |
# Gọi thẳng hàm generate_response với các tham số cần thiết: | |
# 1. message: câu hỏi mới | |
# 2. chat_history: lịch sử trò chuyện | |
# 3. COMPONENTS: dictionary chứa các model và dữ liệu đã được khởi tạo | |
bot_message = generate_response(message, chat_history, COMPONENTS) | |
# Cập nhật lịch sử để hiển thị trên giao diện | |
chat_history.append((message, bot_message)) | |
# Trả về chuỗi rỗng để xóa nội dung trong textbox và lịch sử đã được cập nhật | |
return "", chat_history | |
# Thiết lập sự kiện: khi người dùng 'submit' (nhấn Enter) trong textbox 'msg', | |
# hàm 'respond' sẽ được gọi. | |
# - Inputs: nội dung từ 'msg' và 'chatbot' (lịch sử). | |
# - Outputs: cập nhật lại nội dung cho 'msg' (thành rỗng) và 'chatbot' (lịch sử mới). | |
msg.submit(respond, [msg, chatbot], [msg, chatbot]) | |
# Thêm một vài ví dụ để người dùng dễ bắt đầu | |
gr.Examples( | |
examples=[ | |
"Phương tiện giao thông đường bộ gồm những loại nào?", | |
"Vượt đèn đỏ phạt bao nhiêu tiền đối với xe máy?", | |
"Nồng độ cồn cho phép khi lái xe ô tô là bao nhiêu?", | |
"Đi sai làn đường bị trừ mấy điểm bằng lái?", | |
], | |
inputs=msg | |
) | |
# Chạy ứng dụng | |
if __name__ == "__main__": | |
demo.launch() | |