Tầng 7 — Ma trận dữ liệu ↔ thuật toán
Đây là câu hỏi bạn đặt ra ngay từ đầu: thuật toán nào phù hợp dữ liệu gì.
| Loại dữ liệu | Nên dùng | Không nên | Lý do |
|---|---|---|---|
| Văn bản dài, tự nhiên (quy trình, hướng dẫn, hợp đồng) | hybrid + rerank, parent-child chunking | chỉ dense | đúng sân của RAG kinh điển |
| Dữ liệu có cấu trúc / bảng / DB | text-to-SQL hoặc structured query; vector chỉ để tìm bảng nào | vector search trên từng dòng | “doanh thu Q3 tăng bao nhiêu %” là bài toán tính toán, không phải bài toán tìm. Vector search không cộng được số. |
| Catalog sản phẩm, thuộc tính | filter có cấu trúc + lexical; dense cho mô tả tự do | dense-only | phần lớn truy vấn là filter (“dưới 500k, còn hàng”) |
| Mã lỗi, ID, phiên bản, SKU | lexical là chính | dense-only | subword tokenizer phá định danh. Đo được: tokenizer đúng +20.8% |
| Code | hybrid; AST-aware chunking (cắt theo hàm/class, không theo dòng). Nếu là agent code: grep/ripgrep nhiều lượt, khỏi index (Tầng 9) | fixed-size chunking | cắt giữa hàm là phá ngữ nghĩa; và embedding rơi mạnh khi phải tìm trong repo thật |
| Hội thoại / ticket / log chat | memory hơn là retrieval; summarise theo phiên rồi index bản tóm tắt | index từng tin nhắn | tin nhắn lẻ gần như không có tín hiệu |
| Quan hệ giữa thực thể (“ai báo cáo cho ai”, “linh kiện nào thuộc model nào”) | graph / KG, hoặc quan hệ trong DB | vector search | quan hệ nhiều bước là bài toán duyệt đồ thị, embedding không biểu diễn được |
| Ảnh, scan, PDF nhiều bố cục | multimodal embedding hoặc OCR-rồi-text; ColPali cho tài liệu nhiều bố cục | OCR thô rồi chunk mù | bố cục mang thông tin |
| Dữ liệu thời gian (“báo cáo mới nhất”) | metadata filter + sort, không semantic | semantic-only | “mới nhất” là phép sắp xếp, không phải phép giống nhau |
Nguyên tắc chưng lại một dòng:
Nếu câu hỏi có thể trả lời bằng một câu SQL, đừng dùng vector search. Nếu câu hỏi cần đếm, tính, so sánh, sắp xếp, hoặc duyệt quan hệ — đó không phải bài toán retrieval, và mọi tối ưu embedding sẽ không cứu được nó.
Đây là nguồn thất bại số một của các hệ RAG “một cỡ cho tất cả”: nhồi mọi loại dữ liệu vào một vector index rồi thắc mắc vì sao câu hỏi số liệu trả lời sai.