chatbot_demo / app.py
deddoggo's picture
fix bug
8829c2d
raw
history blame
3.7 kB
# 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()