Trang chủ › Blog › AI & AI tạo sinh
6 cách cải thiện hiệu suất của hệ thống RAG (Retrieval Augmented Generation)

LLM (Large Language Models) là một phát minh tuyệt vời, nhưng thường gặp phải một vấn đề quan trọng: đó là hiện tượng ảo giác AI (AI hallucination). RAG (Retrieval Augmented Generation) được phát triển để giải quyết vấn đề này, giúp LLM hữu ích hơn bằng cách cung cấp ngữ cảnh dựa trên sự thật để sử dụng khi trả lời truy vấn.
Bài viết này giải thích cách cải thiện hiệu suất của hệ thống Retrieval Augmented Generation (RAG) - hệ thống sử dụng mô hình ngôn ngữ lớn (LLM) để tạo ra câu trả lời chất lượng cao cho các truy vấn của người dùng. Hệ thống RAG tận dụng thông tin bên ngoài để tăng cường câu trả lời do LLM tạo ra, và bài viết này tập trung vào 6 chiến lược thực tiễn giúp nâng cao hiệu quả của hệ thống.
1. Hướng dẫn nhanh về Retrieval-Augmented Generation (RAG)
RAG (tạo sinh tăng cường truy xuất) là quá trình bổ sung thông tin lấy từ nơi khác vào đầu vào của người dùng trước khi gửi tới mô hình ngôn ngữ lớn (LLM) như ChatGPT. LLM sử dụng thông tin đó để bổ sung cho câu trả lời được tạo ra.
Bài viết này tập trung vào việc nâng cao chất lượng hệ thống RAG và khảo sát chi tiết các chiến lược để đạt được điều đó. Với những ai đang xây dựng ứng dụng bằng RAG, chúng tôi muốn giúp thu hẹp khoảng cách giữa cấu hình cơ bản và hiệu suất ở mức vận hành thực tế. Ở đây, cải thiện có nghĩa là tăng tỷ lệ truy vấn mà hệ thống thực hiện thành công những việc sau:
- Phát hiện đúng ngữ cảnh
- Tạo ra câu trả lời phù hợp
Nếu quý khách muốn tìm hiểu thêm về cách thức hoạt động của RAG, chúng tôi khuyên nên đọc bài viết này.
2. 6 cách cải thiện hiệu suất của RAG (tạo sinh tăng cường truy xuất)
Ở đây, chúng tôi sẽ không đi sâu vào cách triển khai cụ thể từng chiến lược, mà thay vào đó giải thích khi nào và tại sao nó hữu ích. Do lĩnh vực này thay đổi rất nhanh, việc đưa ra một danh sách đầy đủ hoặc cập nhật hoàn toàn về các thực tiễn tốt nhất là bất khả thi. Thay vào đó, mục tiêu của chúng tôi là giới thiệu một số điều quý khách có thể cân nhắc và thử nghiệm khi cải thiện ứng dụng tạo sinh tăng cường truy xuất của mình.
2.1. Tổ chức và làm sạch dữ liệu
RAG là quá trình kết nối năng lực của LLM với dữ liệu của quý khách. Nếu nội dung hoặc bố cục dữ liệu lộn xộn, hệ thống sẽ gặp vấn đề. Nếu dữ liệu chứa thông tin mâu thuẫn hoặc dư thừa, việc truy xuất sẽ khó tìm được ngữ cảnh phù hợp. Trong trường hợp này, bước tạo sinh do LLM thực hiện có thể không đạt hiệu quả tối ưu.
Giả sử quý khách đang xây dựng chatbot cho tài liệu hỗ trợ của một công ty khởi nghiệp và nhận thấy nó hoạt động chưa tốt. Điều đầu tiên cần kiểm tra là dữ liệu đang đưa vào hệ thống. Các chủ đề có được phân chia logic không? Mỗi chủ đề được xử lý ở một nơi duy nhất hay rải rác ở nhiều nơi khác nhau? Nếu chính con người cũng khó xác định nên xem tài liệu nào để trả lời một truy vấn thông thường, thì hệ thống truy xuất cũng sẽ không thể xác định được.
Quá trình này có thể đơn giản như việc gộp thủ công các tài liệu cùng chủ đề, nhưng cũng có thể tiến xa hơn. Một trong những cách tiếp cận sáng tạo hơn là sử dụng LLM để tạo bản tóm tắt cho toàn bộ tài liệu được cung cấp. Ở bước truy xuất, hệ thống sẽ tìm kiếm trên các bản tóm tắt này trước, và chỉ xem xét chi tiết khi cần thiết. Một số framework thậm chí đã tích hợp sẵn cơ chế này.
2.2. Các loại chỉ mục (index) khác nhau
Chỉ mục là thành phần cốt lõi của LlamaIndex và LangChain — đây là đối tượng lưu giữ hệ thống truy xuất. Cách tiếp cận tiêu chuẩn với RAG bao gồm embedding và tìm kiếm tương đồng: chia nhỏ và embedding toàn bộ dữ liệu ngữ cảnh, sau đó tìm các phần tương đồng khi có truy vấn. Cách này rất hiệu quả, nhưng không phải lúc nào cũng là lựa chọn tối ưu cho mọi trường hợp. Truy vấn có liên quan đến một mục cụ thể, chẳng hạn sản phẩm trong cửa hàng thương mại điện tử không? Khi đó tìm kiếm dựa trên từ khóa có thể là lựa chọn đáng cân nhắc. Không nhất thiết phải chọn một trong hai — nhiều ứng dụng sử dụng kết hợp cả hai (hybrid). Ví dụ, có thể dùng chỉ mục dựa trên từ khóa cho các truy vấn liên quan đến sản phẩm cụ thể, còn embedding thì dùng cho hỗ trợ khách hàng nói chung.
2.3. Thử nghiệm với prompt cơ bản
Dưới đây là một ví dụ về prompt cơ bản được sử dụng trong LlamaIndex.
"Thông tin ngữ cảnh như sau. Vui lòng trả lời câu hỏi dựa trên thông tin ngữ cảnh, không dựa trên kiến thức có sẵn."
Quý khách có thể ghi đè prompt này và thử các phương án khác — chẳng hạn cho phép LLM dựa vào kiến thức riêng của nó khi không tìm được câu trả lời phù hợp trong ngữ cảnh, hoặc điều chỉnh prompt để kiểm soát loại truy vấn được chấp nhận, ví dụ yêu cầu phản hồi câu hỏi mang tính chủ quan theo một cách cụ thể. Ít nhất, việc ghi đè prompt để LLM nắm được ngữ cảnh về công việc đang thực hiện cũng rất hữu ích. Ví dụ:
"Bạn là nhân viên hỗ trợ khách hàng. Bạn được thiết kế để hỗ trợ hữu ích nhất có thể trong khi chỉ cung cấp thông tin dựa trên sự thật. Hãy thân thiện, nhưng đừng nói quá nhiều. Thông tin ngữ cảnh như sau. Vui lòng trả lời câu hỏi dựa trên thông tin ngữ cảnh, không dựa trên kiến thức có sẵn."
2.4. Sử dụng định tuyến truy vấn (query routing)
Trong nhiều trường hợp, việc có nhiều chỉ mục và định tuyến từng truy vấn đến đúng chỉ mục sẽ rất hữu ích — ví dụ, tách riêng chỉ mục cho câu hỏi tóm tắt, câu hỏi cụ thể, và câu hỏi phụ thuộc vào ngày tháng. Việc cố tối ưu một chỉ mục duy nhất cho tất cả các hành vi này sẽ làm giảm hiệu suất chung. Thay vào đó, quý khách có thể định tuyến truy vấn đến đúng chỉ mục. Một trường hợp sử dụng khác là gửi một số truy vấn đến chỉ mục dựa trên từ khóa.
Sau khi tạo chỉ mục, quý khách chỉ cần định nghĩa bằng văn bản mục đích sử dụng của từng chỉ mục; LLM sẽ chọn phương án phù hợp khi có truy vấn. Cả LlamaIndex và LangChain đều có công cụ hỗ trợ việc này.
2.5. Cân nhắc chuyển đổi truy vấn (query transformation)
Truy vấn của người dùng vốn đã bị thay đổi khi được đặt vào trong base prompt. Việc tiếp tục biến đổi nó thêm nữa là hợp lý. Dưới đây là một vài ví dụ.
Diễn giải lại (paraphrasing): Nếu hệ thống không tìm được ngữ cảnh liên quan đến truy vấn, quý khách có thể để LLM diễn giải lại truy vấn và thử lại. Hai câu hỏi trông giống nhau với con người không nhất thiết trông giống nhau trong không gian embedding.
HyDE: HyDE là chiến lược nhận truy vấn, tạo ra một câu trả lời giả định, rồi dùng cả hai cho tìm kiếm embedding. Nghiên cứu cho thấy cách này có thể cải thiện hiệu suất một cách đáng kể.
Truy vấn con (sub-queries): LLM thường hoạt động tốt hơn khi các truy vấn phức tạp được chia nhỏ. Quý khách có thể tích hợp điều này vào hệ thống RAG để chia một truy vấn thành nhiều câu hỏi nhỏ hơn.
2.6. Tinh chỉnh mô hình embedding
Tương đồng dựa trên embedding là cơ chế truy xuất tiêu chuẩn của RAG. Dữ liệu được chia nhỏ và embedding vào chỉ mục. Khi có truy vấn, truy vấn cũng được embedding để so sánh với các embedding trong chỉ mục. Nhưng embedding thực chất là gì? Thông thường, đó là một mô hình đã được huấn luyện trước, ví dụ như text-embedding-ada-002 của OpenAI.
Vấn đề là khái niệm về sự tương đồng trong không gian embedding của mô hình đã huấn luyện trước có thể không khớp với sự tương đồng trong ngữ cảnh của quý khách. Hãy tưởng tượng quý khách đang xử lý tài liệu pháp lý: quý khách muốn tiêu chí đánh giá tương đồng embedding dựa trên các thuật ngữ chuyên ngành như "sở hữu trí tuệ" hay "vi phạm hợp đồng", thay vì các từ chung chung như "tại đây" hay "đồng ý".
Quý khách có thể giải quyết vấn đề này bằng cách tinh chỉnh mô hình embedding, giúp cải thiện các chỉ số truy xuất từ 5-10%. Việc này đòi hỏi thêm một chút công sức, nhưng có thể tạo ra khác biệt lớn về hiệu suất truy xuất. LlamaIndex hỗ trợ tạo tập huấn luyện, nên quá trình này dễ dàng hơn quý khách tưởng.
3. Câu hỏi thường gặp (FAQ)
Câu hỏi 1: RAG (Retrieval Augmented Generation) là gì?
Trả lời: RAG là quá trình sử dụng thông tin lấy từ bên ngoài để trả lời truy vấn của người dùng, trong đó mô hình ngôn ngữ lớn (LLM) tạo ra câu trả lời dựa trên thông tin đó. Nhờ vậy, hiện tượng ảo giác AI được giảm bớt và câu trả lời trở nên dựa trên sự thật hơn.
Câu hỏi 2: Vì sao việc tổ chức và làm sạch dữ liệu lại quan trọng đối với hệ thống RAG?
Trả lời: Nếu nội dung hoặc bố cục dữ liệu không được tổ chức tốt, công cụ truy xuất sẽ khó tìm được ngữ cảnh phù hợp, khiến chất lượng câu trả lời được tạo ra giảm sút. Dữ liệu được tổ chức gọn gàng và nhất quán giúp nâng cao độ chính xác truy xuất và trích xuất thông tin liên quan hơn.
Câu hỏi 3: Định tuyến truy vấn (query routing) là gì?
Trả lời: Định tuyến truy vấn là quá trình tự động gửi truy vấn nhận được đến chỉ mục phù hợp nhất. Nhờ đó, hệ thống có thể tạo ra câu trả lời chuyên biệt hơn cho từng loại câu hỏi khác nhau.
Câu hỏi 4: Lợi ích của việc tinh chỉnh mô hình embedding là gì?
Trả lời: Việc tinh chỉnh mô hình embedding giúp mô hình học được cách biểu diễn embedding phù hợp hơn với dữ liệu của một lĩnh vực cụ thể. Điều này nâng cao mức độ liên quan và độ chính xác của kết quả truy xuất, đồng thời cải thiện hiệu suất tổng thể của hệ thống tạo sinh tăng cường truy xuất.
4. Kết luận
Xây dựng ứng dụng bằng RAG có thể khiến quý khách cảm thấy khó chịu: bắt đầu thì rất dễ, nhưng để vận hành thật tốt lại rất khó. Chúng tôi hy vọng các chiến lược trên sẽ mang lại gợi ý để thu hẹp khoảng cách đó. Không phải ý tưởng nào cũng luôn hiệu quả — đây là quá trình thử nghiệm và rút kinh nghiệm liên tục. Bài viết này chưa đi sâu vào việc đánh giá (evaluation) - cách đo lường hiệu suất hệ thống. Ở giai đoạn hiện tại, đánh giá thiên về nghệ thuật hơn là khoa học, nhưng việc thiết lập một hệ thống nào đó để liên tục kiểm tra là rất quan trọng. Đây là cách duy nhất để biết liệu những thay đổi quý khách đang triển khai có thực sự tạo ra khác biệt hay không.
Miichisoft có nhiều kinh nghiệm phát triển các giải pháp ứng dụng công nghệ RAG. Để biết thêm chi tiết về cách thức hoạt động của RAG, quý khách vui lòng xem bài viết này trên website của chúng tôi.




