Build RAG tiếng Việt cho doanh nghiệp: 7 bài học sau 50.000 trang tài liệu
Reranker quan trọng hơn embedding model "to". Chunking theo heading > size cứng. PII redaction phải nằm ở pipeline đầu vào, không phải prompt.
Bối cảnh
Triển khai RAG cho phòng pháp chế + CSKH với 50.000+ trang SOP, hợp đồng, manual. Giảm thời gian tra cứu từ 12 phút → 40 giây. Đây là 7 bài học rút ra.
1. Reranker > embedding "to"
Ban đầu mình test bge-large-en + bge-m3 — không khác biệt nhiều trên test set 200 câu pháp chế VN. Cú lật: thêm BGE Reranker top-20→top-3, precision nhảy từ 0.71 lên 0.89. Reranker cross-encoder rẻ về compute (chỉ rerank top-K) nhưng mạnh hơn nhiều so với encoder lớn hơn.
2. Chunking theo heading > size cứng
Tài liệu pháp chế cấu trúc rất rõ: § 1.1, § 2.3, ... Chunking 800 token cứng làm vỡ ngữ cảnh điều khoản. Switch sang chunking theo heading, mỗi chunk = 1 section logic + 200 token overlap → recall tăng 18%.
3. PII redaction phải ở input pipeline
Đừng tin "system prompt nói LLM đừng tiết lộ PII". Phải redact ở chunk content trước khi index (regex + NER cho CCCD, SĐT, email).
4. Hybrid search > vector-only
Vector retrieval giỏi với câu hỏi semantic, nhưng yếu với truy vấn có mã/số/keyword chính xác (ID hợp đồng, mã SOP). Thêm BM25/full-text vào pipeline + RRF fusion → cover được cả 2.
5. Citing source nguyên đoạn
Rule: response luôn trích nguyên đoạn nguồn + link. Đừng cho LLM paraphrase. Pháp chế cần nguyên bản.
6. Eval set sản xuất ngay từ ngày đầu
Build 200 câu hỏi labeled từ ticket lịch sử. Mỗi PR thay đổi pipeline → chạy eval, fail nếu rớt 2 điểm F1.
7. On-prem cho tài liệu nhạy cảm
Self-host Qdrant + bge-m3 + LLM chạy local (Llama 3.1 70B 4-bit) đủ tốt cho 80% use case. Chỉ query phức tạp escalate lên GPT-4 với data đã redact.