Ứng dụng hỗ trợ tra cứu, hỏi đáp tri thức pháp luật dựa trên Bộ pháp điển và CSDL văn bản QPPL Việt Nam.
Mục tiêu là phát triển một hệ thống tra cứu, hỏi đáp tri thức pháp luật Việt Nam. Dựa trên các mô hình ngôn ngữ lớn cùng với kiến trúc microservices.
Dự án được thực hiện trong cuộc thi Phần Mềm Nguồn Mở-Olympic Tin học Sinh viên Việt Nam 2023. Được được open source theo giấy phép GNU General Public License v3.0 bởi đội tác giả CTU-LinguTechnies.
Để biết thêm chi tiết về cuộc thi, bạn có thể xem tại đây.
Link thuyết trình Canva tại cuộc thi link
Slide bài thuyết trình tại cuộc thi dưới dạng PDF có thể được truy cập tại đây: Slide
- Giới Thiệu
- Chức Năng
- Tổng Quan Hệ Thống
- Cấu Trúc Thư Mục
- Hướng Dẫn Cài Đặt
- CI/CD
- 🙌 Đóng Góp
- 📝 License
- Pháp điển là tập hợp các quy phạm pháp luật đang còn hiệu lực của các văn bản quy phạm pháp luật do cơ quan nhà nước ở trung ương ban hành, từ Thông tư trở lên và trừ Hiến pháp.
- Cơ sở dữ liệu văn bản quy phạm pháp luật Việt Nam được xây dựng từ năm 2000, bao gồm các văn bản quy phạm pháp luật từ năm 1990 đến nay. Cơ sở dữ liệu này được cập nhật thường xuyên, đảm bảo tính toàn vẹn, đầy đủ và chính xác của các văn bản quy phạm pháp luật.
- Tuy nhiên, do việc cập nhật không thường xuyên của pháp điển so với các văn bản quy phạm pháp luật, nên pháp điển hiện tại không đảm bảo tính toàn vẹn, đầy đủ và chính xác của các văn bản quy phạm pháp luật.
Project tập trung vào các chức năng chính như sau:
- 🤖 Trả lời các câu hỏi về pháp luật của người dùng.
- 🔍 Hệ thống tra cứu các pháp điển, văn bản quy phạm pháp luật: chỉ mục, liên kết các điều mục, các bảng và biểu mẫu.
- 📖 Tóm tắt văn bản, hỗ trợ người dùng trong lúc tra cứu.
- 📝 Gợi ý văn bản quy phạm pháp luật theo từ khóa tìm kiếm, nhận đóng góp để cải thiện gợi ý.
Backend của hệ thống được thiết kế theo kiến trúc microservices, với các công nghệ sử dụng như sau:
- NextJS 14: Xây dựng web-app, hỗ trợ SEO, SSR, SSG.
- Kong API Gateway: API Gateway cho hệ thống.
- ExpressJS: Dựng API cho Auth Service.
- SpringBoot: Dựng API cho Law Service.
- Flask: Dựng API cho Q&A - RAG Service.
- LangChain: Sử dụng để truy vấn các context là tri thức luật.
- MySQL: Cơ sở dữ liệu quan hệ.
- Redis: Cơ sở dữ liệu NoSQL in-memory dạng key-value.
- ChromaDB: Cơ sở dữ liệu embedding dạng vector.
- RabbitMQ: Message broker cho hệ thống.
- Docker: Containerize các service.
- Docker Compose: Quản lý các container.
- Prometheus: Monitor các metrics.
- Grafana: WebUI hiển thị metrics.
- Transformer.js: Thư viện transformer cho JS, load trực tiếp trên trình duyệt web.
Sử dụng mô hình Vietnamese SBERT để tạo embedding cho các tri thức pháp luật. Các embedding được lưu vào Chroma - một loại vector database.
Sau đó, xây dựng hệ thống RAG với framework LangChain để truy vấn các context là các điều từ pháp điển, sau đó đưa context cho mô hình LLM để sinh ra các câu trả lời.
Mô hình LLM chọn sử dụng là phoGPT, kết hợp context và câu hỏi để sinh câu trả lời.
Thiết kế Hệ thống hỏi đáp như hình vẽ bên dưới:
Project CI/CD sử dụng Github và Github Actions để tự động hóa quá trình build và deploy. Quy trình như hình vẽ sau:
Các workflows của project được lưu tại: .github/workflows, với các workflow như sau:
- build-docker.yaml: Build docker image cho các service và push lên docker hub
- build-docker-github.yaml: Build docker image cho các service và push lên github packages
- build-documentation.yaml: Build documentation và push lên github pages
- commitlint.yaml: Lint các commit message của các nhánh
- test-auth-service.yaml: Build và test kiểm thử auth service
- test-law-service.yaml: Build và test kiểm thử law service
- Crawler - Crawl vào CSDL từ nguồn pháp điển Việt Nam.
- Backend - Chứa các mô hình, services, kiến trúc của hệ thống.
- Web - Giao diện người dùng.
- Documents - Tài liệu về dự án.
Tất cả các images build từ services backend bạn có thể tìm thấy tại Docker Hub.
Để cài đặt và chạy được dự án, trước tiên bạn cần phải cài đặt các công cụ bên dưới. Hãy thực hiện theo các hướng dẫn cài đặt sau, lưu ý chọn hệ điều hành phù hợp với máy tính của bạn:
Lưu ý: NextJS 14 chỉ tương thích với NodeJS từ version 18 trở lên.
Trước hết, hãy clone dự án về máy tính của bạn:
git clone https://github.com/CTU-LinguTechies/VN-Law-Advisor.git vnlawadvisor
cd vào thư mục vnlawadvisor:
cd vnlawadvisor
Bước này chỉ cần chạy một lần duy nhất để lấy dữ liệu pháp điển và các văn bản quy phạm pháp luật vào cơ sở dữ liệu MySQL. Nếu bạn đã có dữ liệu, bạn có thể bỏ qua bước này và tự import vào hệ thống với hướng dẫn phía dưới.
Để cào dữ liệu, hãy:
cd law-crawler
Và tiếp tục theo hướng dẫn trong thư mục law-crawler README.md.
- Đầu tiên, cd vào thư mục backend:
cd backend
- Start các services với 1 lệnh docker-compose:
docker-compose up -d
- Sau khi chạy xong, các service sẽ được chạy trên các port như sau:
Service | PORT |
---|---|
API Gateway |
8000:8000 8001:8001 8002:8002 8003:8003 8004:8004 |
Auth Service | 5000:5000 |
Law Service | 8080:8080 |
RAG Service | 5001:5001 |
Recommendation Service | 5002:5002 |
- Đầu tiên, cd vào thư mục web:
cd web
- Cài đặt các thư viện cần thiết:
npm install
- Chạy web-app development mode:
npm run dev
Lúc này web-app sẽ chạy ở địa chỉ http://localhost:3000. Đến đây, bạn đã cài đặt xong. Còn nếu như bạn muốn chạy project ở môi trường production, hãy ngừng development server và chạy các lệnh sau:
- Build frontend web-app
npm run build
- Chạy web-app production mode:
npm run start
Lúc này web-app sẽ chạy ở địa chỉ http://localhost:3000.
Nếu bạn muốn đóng góp cho dự án, hãy đọc CONTRIBUTING.md để biết thêm chi tiết.
Mọi đóng góp của các bạn đều được trân trọng, đừng ngần ngại gửi pull request cho dự án.
- Trần Gia Huy: giahuytran2002@gmail.com
- Lê Nguyễn Bảo Đăng: lnbdang@gmail.com
- Vũ Thái Hà: hab2016960@student.ctu.edu.vn
This project is licensed under the terms of the GPL V3 license.