Hybrid RAG
Vector dày gặp keyword thưa.
Khi nào dùng
Khi câu hỏi vừa cần hiểu ngữ nghĩa, vừa cần khớp đúng từ khoá/mã/tên riêng (SKU, error code, tên hàm, số version, viết tắt) — và là lựa chọn MẶC ĐỊNH khi vector-only RAG hay bỏ sót kết quả chứa đúng từ khoá. ❌ Chưa cần nếu corpus nhỏ và truy vấn toàn ngôn ngữ tự nhiên: vector thuần đã đủ.
Ví dụ thực tế
- Tìm kiếm tài liệu nội bộ / wiki công ty: vừa hiểu ý câu hỏi, vừa khớp đúng tên file, mã quy trình.
- Hỗ trợ kỹ thuật: tra cứu theo mã lỗi chính xác ("ERR_2043") kèm mô tả triệu chứng bằng lời.
- Sàn thương mại điện tử: tìm sản phẩm theo SKU/mã model lẫn mô tả tự nhiên ("áo khoác chống nước").
- Tra cứu tài liệu code/API: khớp đúng tên hàm/biến nhưng vẫn hiểu mô tả công dụng.
Sơ đồ
Sơ đồ minh hoạ luồng xử lý; xem mô tả từng bước ở mục Luồng hoạt động bên dưới.Luồng hoạt động
- 1Query
- 2Nhánh dày: Embedding Model → Vector DB → Dense Results
- 3Nhánh thưa: BM25 Index → Sparse Results
- 4Reciprocal Rank Fusion (RRF) gộp 2 danh sách
- 5Top-K Chunks → LLM → Answer
Hiểu nôm na
Như tra cứu trong thư viện bằng HAI thủ thư cùng lúc: một người hiểu Ý bạn muốn gì (ngữ nghĩa), một người thuộc lòng mã số sách trên kệ (từ khoá chính xác). Mỗi người đưa danh sách của họ, rồi bạn gộp lại — cuốn nào được CẢ HAI xếp cao thì gần như chắc đúng.
Khái niệm A–Z
RAG cơ bản chỉ dùng vector embedding (dense) — giỏi hiểu Ý NGHĨA ("ô tô" ≈ "xe hơi") nhưng dễ trượt khi người dùng gõ đúng một mã lỗi, tên hàm, hay SKU mà embedding "làm mờ" đi. Hybrid RAG chạy SONG SONG 2 cách tìm: (1) dense — so khoảng cách vector ngữ nghĩa; (2) sparse — BM25, thuật toán xếp hạng từ khoá kinh điển (kiểu Elasticsearch), khớp chính xác token. Rồi gộp 2 bảng xếp hạng bằng Reciprocal Rank Fusion. Kết quả: bao phủ cả "hiểu ý" lẫn "khớp chữ" → recall cao hơn hẳn chỉ-vector, gần như miễn phí về độ phức tạp.
Cách hoạt động
Hai nhánh tìm kiếm
Cùng một query đi vào 2 nhánh độc lập rồi mới gộp lại.
- Dense: query → embedding → ANN search (Approximate Nearest Neighbor — tìm vector gần nhất gần-đúng, rất nhanh; đo bằng cosine/dot) trong Vector DB (pgvector, Qdrant, Pinecone...). Bắt ngữ nghĩa, đồng nghĩa, diễn đạt khác.
- Sparse: BM25 trên inverted index (bảng tra ngược "từ → các tài liệu chứa từ đó"). Bắt khớp chính xác từ hiếm/đặc thù; token càng hiếm điểm càng cao (IDF — inverse document frequency).
- Mỗi nhánh trả về top-N riêng (vd N=50) — CHƯA cắt xuống K cuối.
Gộp bằng Reciprocal Rank Fusion (RRF)
Hai nhánh cho điểm theo thang KHÁC nhau (cosine 0–1 vs BM25 không chặn trên) → không cộng thẳng được. RRF chỉ dùng THỨ HẠNG: score(d) = Σ 1/(k + rank_i(d)), với k≈60. Doc xếp cao ở cả hai nhánh sẽ lên đầu; không cần chuẩn hoá điểm, rất bền.
Rerank + cắt Top-K
Sau RRF nên thêm một bước rerank bằng cross-encoder (cohere-rerank, bge-reranker) — loại model đọc CẶP (query, tài liệu) cùng một lượt nên chấm độ liên quan THẬT chính xác hơn embedding (đổi lại chậm hơn) — rồi mới lấy Top-K (3–8) đưa vào prompt. Rerank tăng precision rõ rệt mà chi phí nhỏ.
Nội dung chuyên sâu 5 mô hình RAG
Mở khoá phần Thực hành (code), Mẹo thực chiến, Lưu ý bảo mật, Áp dụng dự án thật, Lỗi thường gặp và Thuật ngữ — dành cho gói Senior trở lên.
Cần đăng nhập + gói Senior trở lên
Đã có tài khoản gói phù hợp? Đăng nhập để mở khoá ngay.
Kiến trúc liên quan
Luyện phỏng vấn AI/RAG thực chiến
Hàng nghìn câu hỏi phỏng vấn IT + lộ trình — học nhanh, đi làm sớm.
Bắt đầu luyện