Kinh nghiệm Production RAG rút ra khi xử lý hơn 5 triệu tài liệu
(blog.abdellatif.io)- Trong 8 tháng triển khai dự án RAG (Retrieval-Augmented Generation), đã phân biệt được những cách thực sự hiệu quả và những cách chỉ tốn thời gian
- Ban đầu sử dụng Langchain và Llamaindex để hoàn thành prototype nhanh chóng, nhưng khi nhận phản hồi từ người dùng thực tế đã gặp phải giới hạn về hiệu năng
- Những yếu tố có tác động lớn nhất đến việc cải thiện hiệu năng truy xuất tài liệu được xác định là tạo truy vấn, reranking, chiến lược chunking, tận dụng metadata, định tuyến truy vấn
- Trong thực tế, nhóm xây dựng pipeline tùy biến bằng cách linh hoạt lựa chọn vector database, embedding, reranking, LLM
- Toàn bộ kinh nghiệm và bí quyết đã được tổng hợp và công khai trong dự án mã nguồn mở(agentset-ai/agentset)
Tổng quan về 8 tháng xây dựng Production RAG
- Chia sẻ kinh nghiệm xây dựng và vận hành hệ thống RAG trên các tập dữ liệu quy mô lớn như tổng cộng 9 triệu trang (Usul AI), 4 triệu trang (một công ty AI pháp lý ẩn danh)
- Ban đầu, làm theo tutorial trên YouTube, chuyển từ Langchain sang Llamaindex và hoàn thành prototype chỉ trong vài ngày, nhưng khi triển khai thực tế đã lộ ra vấn đề hiệu năng thấp mà chỉ người dùng mới có thể nhận ra
- Sau vài tháng, từng thành phần của hệ thống được chỉnh sửa dần dần để đạt đến hiệu năng tối ưu
Những yếu tố thực sự đóng góp vào cải thiện hiệu năng (theo ROI)
-
Tạo truy vấn (Query Generation)
- Vì truy vấn cuối cùng của người dùng không thể chứa toàn bộ ngữ cảnh, nên dùng LLM để xem lại hội thoại và tạo ra nhiều truy vấn ngữ nghĩa lẫn truy vấn từ khóa
- Các truy vấn này được xử lý song song rồi chuyển cho reranker, từ đó mở rộng phạm vi truy xuất và bù lại độ lệch của hybrid search
-
Reranking
- Ảnh hưởng của reranking đến hiệu năng, dù chỉ cần khoảng 5 dòng code để triển khai, lớn hơn nhiều so với tưởng tượng
- Với đầu vào là nhiều chunk lớn (ví dụ: 50), việc sắp xếp lại và chọn lọc một số chunk hàng đầu (ví dụ: 15) mang lại ROI cao nhất
- Chỉ riêng reranking cũng có thể bù đắp đáng kể cho những thiếu sót của một pipeline được thiết kế chưa tốt
-
Chiến lược chunking (Chunking Strategy)
- Đây là phần chiếm phần lớn thời gian trong toàn bộ quá trình phát triển
- Cần hiểu chính xác cấu trúc và mẫu của dữ liệu, chunk theo đơn vị logic và tự kiểm tra để tránh cắt ngang chữ hoặc câu ở giữa
- Mỗi chunk phải giữ được ý nghĩa độc lập
-
Tận dụng metadata trong đầu vào LLM
- Thay vì chỉ đưa văn bản chunk thuần túy vào LLM, việc thêm metadata (title, author, v.v.) giúp cải thiện đáng kể ngữ cảnh và chất lượng câu trả lời
-
Định tuyến truy vấn (Query Routing)
- Với những loại câu hỏi mà RAG không thể trả lời (ví dụ: tóm tắt bài viết, yêu cầu thông tin tác giả), nhóm đưa vào một router nhẹ để chuyển truy vấn sang luồng xử lý API+LLM
Stack thực chiến (Our stack)
- Vector database: Azure → Pinecone → Turbopuffer (rẻ hơn và mặc định hỗ trợ keyword search)
- Trích xuất tài liệu: áp dụng cách làm tùy biến
- Công cụ chunking: mặc định dùng Unstructured.io, pipeline doanh nghiệp thì tùy biến (Chonkie cũng được đánh giá tốt)
- Mô hình embedding: dùng text-embedding-large-3 (chưa thử các mô hình khác)
- Reranker: None → Cohere 3.5 → Zerank (không quá phổ biến nhưng thực tế rất tốt)
- LLM: GPT 4.1 → GPT 5 → GPT 4.1 (chủ yếu dùng Azure credits)
Mã nguồn mở và kết luận
- Toàn bộ kết quả học được và kinh nghiệm thực chiến được đúc kết vào dự án mã nguồn mởagentset-ai/agentset
- Được phát hành theo giấy phép MIT, có thể tự do sử dụng và liên hệ hỏi thêm (có cung cấp thông tin liên hệ)
1 bình luận
Ý kiến trên Hacker News
bm25+ dense search) để bù cho điểm yếu của mô hình dense với thuật ngữ kỹ thuật. Các mô hình v3 như SPLADE có vẻ cũng cho hiệu năng tốt nhờ cân bằng tốt giữa tìm kiếm ngữ nghĩa và từ vựng, nên luôn tò mò liệu có thể thay thế bằng một giải pháp đơn giản hơn hay không.text-embedding-large-3.