SA.

Bài blog

Thiết Kế RAG Pipeline: Chunking, Retrieval, Reranking, và Generation

RAG không phải một lệnh gọi đến vector database. RAG pipeline production có năm giai đoạn, mỗi giai đoạn có đánh đổi quyết định liệu hệ thống có retrieve đúng context không.

Danh mục
ai
Xuất bản
Khối lập phương trắng với các ô vuông xanh phát sáng — cấu trúc dữ liệu AI trừu tượng

RAG Trong Một Câu

Retrieval-augmented generation trả lời câu hỏi của user bằng cách tìm tài liệu liên quan từ corpus và đưa chúng vào context window của model, thay vì dựa vào kiến thức được nhúng vào model weights.

Năm Giai Đoạn

1. Ingest và Tiền Xử Lý Tài Liệu

Trước khi chunk, bạn cần text sạch. PDF có header, footer, số trang, và layout nhiều cột làm rối chunker. HTML có điều hướng, quảng cáo, và boilerplate.

Các bước tiền xử lý:

  • Extract text trong khi giữ lại tín hiệu cấu trúc (heading, list, bảng).
  • Xóa boilerplate.
  • Chuẩn hóa whitespace và encoding.
  • Gắn tag tài liệu với metadata — bạn sẽ filter trên đây khi retrieval.

2. Chiến Lược Chunking

Chunk là đơn vị retrieval. Quá lớn và bạn gửi nội dung không liên quan đến model; quá nhỏ và bạn mất context làm cho chunk có ý nghĩa.

Fixed-size chunking (chia mỗi N token) đơn giản và nhanh. Bắt đầu từ đây. Điểm khởi đầu phổ biến: 512 token với 64-token overlap.

Hierarchical chunking index chunk ở nhiều độ chi tiết (đoạn văn + phần + tài liệu). Retrieve ở cấp đoạn văn nhưng bao gồm phần như context bổ sung.

3. Embedding và Indexing

Mỗi chunk được chuyển thành vector dày đặc bằng embedding model. Model embedding quyết định chất lượng matching tương đồng.

chunk → embedding_model → vector(dim=1536)

Lưu vector trong vector database: Pinecone, Weaviate, Qdrant, pgvector.

4. Retrieval

Khi query, embed câu hỏi của user bằng cùng embedding model và tìm top-K vector gần nhất.

Hybrid retrieval kết hợp dense (vector) và sparse (BM25/TF-IDF keyword) search. Kết hợp chúng với Reciprocal Rank Fusion thường vượt trội so với từng cái riêng lẻ.

Metadata filtering thu hẹp retrieval trước vector search: chỉ tìm trong tài liệu từ năm 2024, chỉ tìm tài liệu của tenant của user.

5. Reranking

Top-K retrieval trả về các chunk tương tự nhất, không nhất thiết hữu ích nhất. Reranker sắp xếp lại kết quả bằng cross-encoder model đọc cả query và chunk cùng nhau.

Retrieve top-20 với vector search, rerank thành top-5, gửi top-5 đến LLM. Chi phí xứng đáng.

Generation

Lắp ráp context từ top-K chunk đã rerank và xây dựng prompt:

System: Bạn là trợ lý hữu ích. Trả lời dựa trên context được cung cấp.
         Nếu câu trả lời không có trong context, hãy nói vậy.

Context: [chunk 1] [chunk 2] [chunk 3]

User: {câu hỏi}

Hướng dẫn grounding trong system prompt giảm hallucination.

Failure Mode Trong Production

Retrieval bỏ lỡ câu trả lời. Câu trả lời có trong corpus nhưng không được retrieve. Nguyên nhân: chunking chia passage liên quan, sai embedding model.

Context không liên quan làm loãng câu trả lời. Chunk được retrieve liên quan về chủ đề nhưng không hữu ích cụ thể. Fix với reranking.

Chunk thiếu context. Chunk nói "giá trị được đặt ở bước 3" nhưng không nói bước 3 là gì. Fix với overlap.

Bắt Đầu Đơn Giản, Đo Lường, Sau Đó Tối Ưu

Thứ tự tối ưu hóa hiệu quả nhất:

  1. Đưa text sạch vào corpus.
  2. Triển khai chunking với overlap.
  3. Thêm metadata filtering.
  4. Thêm reranker.
  5. Thử hybrid retrieval.
  6. Thử nghiệm chunk size và embedding model.

Mỗi bước nên được validate với eval dataset. Hãy đo trước, tối ưu sau.