RAG: Retrieval-Augmented Generation
Tách retrieval và generation để tìm đúng bằng chứng, trả lời có nguồn và nhận ra khi chưa đủ dữ liệu.
Retrieval-Augmented Generation kết hợp truy xuất thông tin với sinh văn bản. Nó hữu ích khi câu trả lời cần dựa trên một kho tài liệu có thể kiểm tra, nhưng truy xuất tốt vẫn không bảo đảm mọi câu trả lời đều đúng.
Mục tiêu học tập
- Mô tả indexing, retrieval và answer generation.
- Phân biệt tìm đúng tài liệu với dùng đúng bằng chứng.
- Thiết kế câu hỏi không có đáp án để kiểm tra fallback.
Tra cứu rồi trả lời
Hãy nghĩ về một người làm bài được mở sách. Trước khi trả lời, họ tìm trang liên quan. RAG giúp mô hình nhận được những đoạn tài liệu để tham khảo theo cách tương tự.
Một pipeline RAG thường gồm chuẩn bị tài liệu, chia đoạn, lập chỉ mục, truy xuất và đưa ngữ cảnh vào mô hình. Tài liệu gốc vẫn là nơi cần kiểm tra khi câu trả lời chứa một khẳng định quan trọng.
RAG là thiết kế hệ thống, không phải một mô hình duy nhất. Chất lượng phụ thuộc khả năng truy xuất evidence và khả năng sử dụng evidence của generator. Tách hai phần này khi thiết kế bộ đánh giá.
Từ tài liệu đến ngữ cảnh
Tài liệu dài được chia thành các đoạn nhỏ. Hệ thống tìm những đoạn có liên quan với câu hỏi rồi đưa chúng vào yêu cầu trả lời.
Chunking phải giữ đủ ngữ nghĩa và metadata nguồn. Truy xuất có thể dựa trên từ khóa, embedding hoặc kết hợp. Giữ đường dẫn nguồn để người dùng có thể đối chiếu đoạn được dùng.
Đánh giá retrieval bằng bộ câu hỏi có evidence được gán nhãn. Thử chunk size và top-k trên validation set; tăng ngữ cảnh có thể thêm nhiễu. Tách kiểm soát truy cập của tài liệu khỏi quyết định của mô hình.
Câu trả lời có nguồn vẫn cần kiểm chứng
Một liên kết trong câu trả lời không tự chứng minh rằng nội dung đúng. Bạn cần xem nguồn có thực sự nói điều đó không.
RAG có thể thiếu tài liệu, tìm nhầm ngữ cảnh hoặc tạo phát biểu vượt quá nguồn. Thiết kế câu trả lời có trích dẫn và cho phép báo thiếu bằng chứng. Xem nội dung truy xuất là dữ liệu không đáng tin cậy.
Đánh giá riêng answer correctness, faithfulness và retrieval coverage. Kiểm thử prompt injection trong tài liệu và quyền truy cập chéo. Không để văn bản được truy xuất quyết định trực tiếp quyền gọi công cụ của hệ thống.
Ví dụ: hỏi một quy định có phiên bản
Giả sử hai tài liệu mô tả thời hạn đăng ký khác nhau. Chỉ tìm ra đoạn có cùng từ khóa chưa đủ; câu trả lời phải dùng phiên bản có hiệu lực. Nếu tài liệu không nói điều được hỏi, nên nêu thiếu bằng chứng thay vì đoán.
Lưu document ID, version và nguồn khi chunking. Đánh giá retrieval bằng việc có đưa đoạn hỗ trợ vào top-k; đánh giá generation bằng việc mỗi claim có được đoạn đó hỗ trợ hay không. Citation tồn tại không có nghĩa citation đúng.
Một baseline lexical retrieval nhỏ giúp kiểm tra plumbing trước embeddings. Mã phía dưới chỉ xếp hạng theo số từ giao nhau; không có vector index, reranker hoặc LLM.
Tài liệu dài có thể chia làm mất điều kiện hoặc ngoại lệ. Metadata filtering và giới hạn quyền truy cập phải được áp dụng trước khi cấp context; model không phải ranh giới authorization. Log version của corpus và query để tái hiện lỗi.
Các hệ RAG ứng dụng có nhiều biến thể. Paper Lewis et al. nghiên cứu cả huấn luyện retriever/generator với công thức marginalization; workflow retrieve-then-prompt thường gặp không tái hiện toàn bộ mô hình đó.
Workflow & kiến trúc
Ứng dụng & giới hạn
- Tra cứu tài liệu kỹ thuật nội bộ theo quyền truy cập.
- Trợ lý học tập có thể dẫn lại bài học gốc.
Điểm mạnh
Dễ cập nhật kho tri thức và đối chiếu với tài liệu nguồn.
Giới hạn cần nhớ
Không loại bỏ hallucination; dữ liệu kém hoặc truy xuất sai có thể dẫn đến câu trả lời sai.
Thử trong một project nhỏ
Chọn 5 tài liệu công khai và 10 câu hỏi. Ghi đoạn nào trả lời từng câu trước khi thử một pipeline RAG; thêm câu hỏi không có trong tài liệu.
documents = {
"doc_a": "lich hoc thu hai",
"doc_b": "hoc phi va dang ky",
"doc_c": "quy trinh project"
}
query = "lich hoc"
query_terms = set(query.split())
ranked = sorted(documents, key=lambda key: (-len(query_terms & set(documents[key].split())), key))
assert ranked[0] == "doc_a"
print(ranked)Lexical overlap trên tài liệu tự tạo; không phải semantic search hay RAG generator và không chứa quy định thật.
