Một chatbot RAG (Retrieval-Augmented Generation) full-stack, production-ready được thiết kế để truy vấn tài liệu nội bộ tại CUSC. Hệ thống được xây dựng với kiến trúc FastAPI (Backend), Vue.js (Frontend), và lõi RAG mạnh mẽ (LangChain, Gemini, ChromaDB).
Trao quyền cho đội ngũ của bạn với câu trả lời tức thì, chính xác từ tài liệu nội bộ—không cần tìm kiếm thủ công.
Dự án này là một ứng dụng full-stack, đa thành phần, bao gồm:
- Frontend (Vue.js): Giao diện người dùng (UI) hiện đại, phản ứng nhanh, quản lý trạng thái bằng Pinia.
- Backend (FastAPI): API Gateway mạnh mẽ, xử lý xác thực (JWT), streaming câu trả lời, và quản lý các tác vụ nền.
- Chatbot Core (LangChain): Lõi RAG "thông minh", sử dụng router để quyết định nguồn tri thức (database chung hoặc file người dùng tải lên).
- Database (MongoDB): Lưu trữ thông tin người dùng, lịch sử trò chuyện (persistent), và metadata của file.
- Vector Store (ChromaDB Server): Chạy như một dịch vụ độc lập (chế độ client-server) để lưu trữ và truy vấn vector.
flowchart LR
A[Frontend - Vue<br>Port 5173] --> B[Backend - FastAPI<br>Port 8000]
B --> C[(MongoDB<br>Users, History)]
B --> D[(ChromaDB Server<br>Port 8001)]
B --> E[(Background Tasks<br>PDF Processing)]
- Kiến trúc Full-Stack: Giao diện Vue.js mượt mà kết nối với backend FastAPI hiệu suất cao.
- RAG Động & Định tuyến: Tự động quyết định sử dụng kho tri thức chung (global) hay kho tri thức "động" (từ file PDF người dùng vừa tải lên).
- Xử lý PDF Tối ưu (Nhanh): Sử dụng
PyMuPDFđể xử lý PDF local cực nhanh, thay thế cho các API bên ngoài, chạy trongBackgroundTasksđể không block server. - Hỗ trợ Đa phương thức: Xử lý câu hỏi văn bản hoặc kết hợp văn bản + hình ảnh (text + images) thông qua Gemini Vision.
- Truy vấn Chính xác (Reranking): Lấy K-chunk lớn và sau đó dùng Cohere Rerank để lọc lại top N, tăng độ chính xác của ngữ cảnh.
- Kiến trúc Production:
- Backend: Tái cấu trúc (refactored) thành các router độc lập.
- Frontend: Sử dụng Polling để kiểm tra trạng thái xử lý PDF mà không cần tải lại trang.
- VectorDB: Chạy Chroma ở chế độ client-server để tránh lỗi "database is locked".
Dự án này được chia thành các mô-đun chính. Mỗi thư mục bên dưới chứa file README.md riêng với hướng dẫn chi tiết:
graph TD
A[/Project Root/] --> B[backend/]
A --> C[chatbot/]
A --> D[frontend/]
A --> E[.env]
B --> B1[README.md<br>Backend Guide]
C --> C1[data/]
C --> C2[README.md<br>Build Knowledge Base]
D --> D1[README.md<br>Frontend Guide]
Để chạy toàn bộ hệ thống (Dev mode):
-
Cài đặt Điều kiện tiên quyết:
- Python 3.12+
- Node.js 18+ (cho Frontend)
- MongoDB Server (phải đang chạy)
-
Khởi động ChromaDB (Server Vector):
- Mở Terminal 1 và chạy server ChromaDB (nó sẽ chiếm terminal này).
- Xem chi tiết tại:
chatbot/README.md.
chroma run --host 127.0.0.1 --port 8001 --path "./chatbot/vectorstores/chroma_db_2" -
Khởi động Backend (Server API):
- Mở Terminal 2, cài đặt dependencies và chạy
uvicorn. - Xem chi tiết tại:
backend/README.md.
# (Đã kích hoạt .venv) pip install -r requirements.txt uvicorn backend.main:app --reload --port 8000 - Mở Terminal 2, cài đặt dependencies và chạy
-
Khởi động Frontend (UI):
- Mở Terminal 3, cài đặt dependencies và chạy
vite. - Xem chi tiết tại:
frontend/README.md.
# (cd vào thư mục frontend) npm install npm run dev - Mở Terminal 3, cài đặt dependencies và chạy
-
Xây dựng Kho tri thức (Lần đầu):
- Nếu là lần đầu chạy, mở Terminal 4 để nạp các file PDF vào ChromaDB.
- Xem chi tiết tại:
chatbot/README.md.
# (Đã kích hoạt .venv) python chatbot/agents.py
Bây giờ, bạn có thể truy cập http://localhost:5173 (cổng Vite) để sử dụng ứng dụng.