Spaces:
Paused
Paused
File size: 3,695 Bytes
0c16fc9 b8e326d 0c16fc9 8829c2d 0c16fc9 8829c2d 0c16fc9 8829c2d 0c16fc9 8829c2d 0c16fc9 845a94d b8e326d 8829c2d 0c16fc9 8829c2d 0c16fc9 8829c2d 0c16fc9 8829c2d 0c16fc9 8829c2d 0c16fc9 8829c2d 0c16fc9 b4aaddd 8829c2d 845a94d 8829c2d |
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 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
# 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()
|