Bài #8: RAG là gì? Đưa tài liệu riêng vào câu trả lời của LLM


Ở bài trước, ta đã học embedding, vector database và semantic search: ba mảnh ghép giúp máy tìm nội dung gần nhau về ý nghĩa. Bài này nối tiếp trực tiếp bằng một kỹ thuật rất quan trọng trong ứng dụng LLM thực tế: RAG, viết tắt của Retrieval-Augmented Generation.
Nói dễ hiểu, RAG là cách để LLM trả lời dựa trên tài liệu được tìm thấy tại thời điểm hỏi, thay vì chỉ dựa vào những gì mô hình đã học từ trước. Nếu ví LLM như một người viết giỏi, thì RAG giống việc đưa cho người đó vài trang tài liệu liên quan trước khi yêu cầu viết câu trả lời. Nhờ vậy, hệ thống có thể dùng tài liệu riêng của trường học, công ty, website hoặc lớp học mà không cần huấn luyện lại mô hình mỗi lần tài liệu thay đổi.
Sau bài này, bạn cần hiểu RAG giải quyết vấn đề gì, ba bước retrieve, augment, generate hoạt động ra sao, vì sao RAG không giống fine-tuning, và khi xây một hệ thống hỏi đáp tài liệu thì cần chú ý những lỗi nào.
LLM có thể viết rất trôi chảy, nhưng nó không tự biết mọi tài liệu mới nhất hoặc tài liệu riêng của bạn. Một mô hình không thể tự nhớ nội quy vừa cập nhật của lớp, bảng giá mới của công ty, hay nội dung bài giảng chỉ nằm trong file PDF nội bộ. Nếu cứ hỏi trực tiếp, mô hình có thể trả lời chung chung, đoán theo kinh nghiệm, hoặc tạo ra thông tin nghe hợp lý nhưng sai.
RAG xử lý vấn đề này bằng cách thêm một bước tìm tài liệu trước khi trả lời. Khi người dùng hỏi, hệ thống không vội đưa câu hỏi cho LLM ngay. Nó đi tìm vài đoạn tài liệu liên quan nhất, ghép các đoạn đó vào prompt, rồi yêu cầu LLM trả lời dựa trên thông tin được cung cấp. Như vậy, mô hình không cần “thuộc lòng” kho tri thức; nó chỉ cần đọc đúng phần tài liệu vào đúng lúc.
Retrieve nghĩa là truy xuất. Hệ thống nhận câu hỏi, biến câu hỏi thành embedding, rồi tìm trong vector database những đoạn tài liệu có ý nghĩa gần nhất. Ví dụ, câu hỏi “học sinh nghỉ buổi kiểm tra thì xử lý sao?” có thể dẫn tới đoạn nội quy nói về xin phép và lịch kiểm tra bù.
Augment nghĩa là bổ sung ngữ cảnh. Hệ thống lấy câu hỏi ban đầu, các đoạn tài liệu vừa tìm được, có thể kèm tiêu đề, nguồn, ngày cập nhật, rồi ghép thành một prompt rõ ràng. Prompt này thường nhắc LLM chỉ dùng tài liệu được cung cấp, nói nếu không đủ thông tin, và trích nguồn khi có thể.
Generate nghĩa là sinh câu trả lời. LLM đọc prompt đã được bổ sung tài liệu và viết lại thành câu trả lời dễ hiểu. Người dùng không cần đọc nguyên cả PDF; họ nhận được phần tóm tắt đúng trọng tâm, nhưng hệ thống vẫn có thể chỉ ra câu trả lời dựa trên tài liệu nào.
Hãy tưởng tượng bạn hỏi một bạn lớp trưởng: “Nếu nghỉ học có phép thì cần làm gì?”. Nếu lớp trưởng không có sổ nội quy, bạn ấy có thể trả lời theo trí nhớ. Câu trả lời có thể đúng, nhưng cũng có thể thiếu chi tiết. Nếu trước khi trả lời, bạn ấy mở đúng trang nội quy, đọc phần “nghỉ học có phép”, rồi diễn giải lại cho bạn, câu trả lời sẽ đáng tin hơn. RAG hoạt động gần giống vậy.
Trong một website học tập, RAG có thể giúp học sinh hỏi “bài nào giải thích embedding?” và hệ thống tìm đúng bài trong series AI & LLM. Trong doanh nghiệp, nhân viên có thể hỏi “quy trình hoàn tiền khách hàng là gì?” và hệ thống tìm đoạn tương ứng trong tài liệu vận hành.
Một pipeline RAG thường bắt đầu bằng việc nhập tài liệu: PDF, trang web, ghi chú, bài viết hoặc file nội bộ. Tài liệu dài được cắt thành các đoạn nhỏ gọi là chunk. Mỗi chunk được tạo embedding và lưu vào vector database cùng metadata như tiêu đề, URL hoặc số trang.
Khi có câu hỏi mới, hệ thống tạo embedding cho câu hỏi, tìm top 3 hoặc top 5 chunk gần nhất, rồi đưa các chunk đó vào context window của LLM. Nếu thiết kế tốt, câu trả lời có thể nói “Theo mục 2 của nội quy lớp…” hoặc “Tài liệu chưa nêu rõ phần này”, thay vì tự đoán.
Fine-tuning là điều chỉnh mô hình bằng dữ liệu huấn luyện bổ sung để mô hình học phong cách, định dạng hoặc một dạng nhiệm vụ cụ thể. RAG không thay đổi trọng số của mô hình. Nó chỉ đưa tài liệu liên quan vào prompt tại thời điểm trả lời. Vì vậy, RAG thường phù hợp khi tri thức thay đổi thường xuyên, cần trích nguồn, hoặc muốn dùng tài liệu riêng mà vẫn giữ mô hình gốc.
Nói ngắn gọn: fine-tuning giống huấn luyện thêm; RAG giống đưa tài liệu tham khảo trước khi trả lời. Hai kỹ thuật có thể kết hợp, nhưng không nên nhầm chúng là một.
Hiểu nhầm 1: Có RAG là hết hallucination. Không đúng. RAG giảm rủi ro bằng cách cung cấp tài liệu, nhưng nếu truy xuất sai đoạn, tài liệu lỗi thời, prompt không rõ, hoặc LLM bỏ qua nguồn, câu trả lời vẫn có thể sai.
Hiểu nhầm 2: Cứ nhét thật nhiều tài liệu vào prompt là tốt. Context window có giới hạn và thông tin thừa có thể làm mô hình mất tập trung. RAG tốt là tìm đúng đoạn, đủ ngắn, đủ liên quan, không phải đưa toàn bộ kho tài liệu vào một lần.
Hiểu nhầm 3: Vector search là toàn bộ RAG. Vector search là phần quan trọng của bước retrieve, nhưng RAG còn cần chia chunk hợp lý, lọc metadata, thiết kế prompt, kiểm soát quyền truy cập và đánh giá câu trả lời.
Hãy chọn một tài liệu quen thuộc, ví dụ nội quy lớp, hướng dẫn sử dụng một ứng dụng, hoặc bài giảng dài. Viết ba câu hỏi mà người đọc có thể hỏi tài liệu đó. Với mỗi câu hỏi, hãy tự chọn ra hai đoạn tài liệu liên quan nhất. Sau đó thử viết câu trả lời chỉ dựa trên hai đoạn đó. Đây chính là mô phỏng thủ công của RAG.
RAG là cách kết hợp tìm kiếm tài liệu và sinh câu trả lời. Hệ thống truy xuất đoạn liên quan, bổ sung chúng vào context, rồi để LLM trả lời dựa trên phần đã tìm. RAG đặc biệt hữu ích khi cần hỏi đáp trên tài liệu riêng, tài liệu cập nhật thường xuyên hoặc nội dung cần nêu nguồn. Tuy vậy, RAG không tự đảm bảo đúng tuyệt đối; chất lượng phụ thuộc vào dữ liệu, cách chia đoạn, truy xuất, prompt và bước kiểm chứng.