Giai đoạn 1: Nạp tài liệu (Document Ingestion)
Hầu hết các hệ thống RAG đều thất bại ngay cả trước khi bắt đầu.
Bạn nghĩ rằng xây dựng một hệ thống RAG là đơn giản. Người dùng tải lên một tệp PDF, bạn tạo embeddings, và bạn nhận được câu trả lời.
Đó là một sai lầm.
Giữa nút tải lên và cơ sở dữ liệu vector (vector database), có tới 15 bước quan trọng. Nếu bạn bỏ qua dù chỉ một bước, hệ thống của bạn sẽ đưa ra câu trả lời sai hoặc làm lãng phí tiền bạc của bạn.
Dưới đây là lộ trình chuẩn sản xuất (production-grade) cho việc nạp tài liệu:
• File Hashing (Băm tệp): Đừng bao giờ băm tên tệp. Hãy băm nội dung thực tế của tệp. Điều này giúp hệ thống của bạn không xử lý cùng một tệp hai lần nếu ai đó đổi tên nó.
• Smart Parsing (Phân tách thông minh): Sử dụng đúng công cụ cho từng công việc.
- Văn bản đơn giản: pdf-parse (Miễn phí)
- Nội dung hỗn hợp: Unstructured (Cân bằng)
- Bảng/bố cục phức tạp: LlamaParse (Chất lượng cao)
- Biểu mẫu doanh nghiệp: Azure Document Intelligence (Tốt nhất cho bản quét)
• Text Cleaning (Làm sạch văn bản): Loại bỏ các thành phần rác. Header, footer, watermark và số trang sẽ tạo ra nhiễu. Nếu bạn nhúng (embed) chữ "Confidential" vào mọi trang, AI của bạn sẽ nghĩ rằng mọi câu trả lời đều là bí mật.
• Metadata Extraction (Trích xuất siêu dữ liệu): Thêm ngữ cảnh như phòng ban, phần hoặc phiên bản. Điều này giúp hệ thống của bạn tìm đúng tài liệu mà không cần phải tìm kiếm mọi thứ.
• Smart Chunking (Chia nhỏ thông minh): Đây là phần quan trọng nhất.
- Kích thước: Mục tiêu từ 1000 đến 1500 tokens.
- Độ chồng lấp (Overlap): Sử dụng 200 tokens chồng lấp để giữ ngữ cảnh.
- Ranh giới: Đừng bao giờ ngắt câu ở giữa chừng.
• Chunk Hashing and Deduplication (Băm và loại bỏ trùng lặp phân đoạn): Băm mọi phân đoạn (chunk). Khi một tệp thay đổi, hãy so sánh các mã băm mới với các mã băm cũ.
• Incremental Ingestion (Nạp dữ liệu lũy tiến): Đừng nhúng lại mọi thứ. Nếu một tài liệu 1000 trang chỉ thay đổi một trang, chỉ cần nhúng phân đoạn mới đó. Điều này giúp bạn tiết kiệm một lượng lớn chi phí API.
Sự khác biệt giữa một dự án cá nhân và một hệ thống thực tế (production system) nằm ở những gì bạn làm trước bước embedding.
Một hệ thống ngây thơ sẽ nhúng lại mọi thứ mỗi lần. Một hệ thống thông minh chỉ xử lý những gì đã thay đổi.
Đừng xây dựng một mớ hỗn độn. Hãy xây dựng một nền móng vững chắc.
Source: https://dev.to/surajrkhonde/phase-1-document-ingestion-the-hidden-complexity-before-embeddings-4d32
Optional learning community: https://t.me/GyaanSetuAi
