Tại sao ứng dụng RAG của tôi liên tục gặp hiện tượng ảo giác và cách tôi khắc phục
Cách đây vài tháng, tôi đã demo bot hỗ trợ RAG của mình. Nó nói với một đồng nghiệp rằng chính sách hoàn tiền của chúng tôi là 30 ngày. Chính sách thực tế của chúng tôi là 14 ngày. Con bot không hề do dự. Nó không nói rằng nó không chắc chắn. Nó tự bịa ra một câu trả lời với sự tự tin tuyệt đối.
RAG đáng lẽ phải giảm thiểu hiện tượng ảo giác. Nhưng thiết lập của tôi chỉ làm chúng chuyển từ chỗ này sang chỗ khác. Tôi đã rút ra được năm bài học trong quá trình gỡ lỗi hệ thống này.
Ngừng sử dụng số lượng ký tự cố định để chia chunk Tôi đã sử dụng các chunk 1000 ký tự với một chút phần chồng lấp (overlap). Điều này đã gây ra vấn đề. Một chunk thường trộn lẫn quy định vận chuyển với quy định trả hàng. Mô hình đã trộn các phần khác nhau này thành một câu trả lời sai. Khắc phục: Tôi đã chuyển sang semantic chunking (chia chunk theo ngữ nghĩa). Tôi chia dữ liệu theo tiêu đề và đoạn văn. Điều này giúp giữ các thông tin liên quan lại với nhau.
Độ tương đồng không đồng nghĩa với sự liên quan Bộ truy xuất (retriever) của tôi đã lấy ra 3 chunk hàng đầu dựa trên độ tương đồng cosine (cosine similarity). Một chunk có thể trông giống với câu hỏi nhưng lại không chứa câu trả lời. Mô hình mặc định rằng mọi thứ trong ngữ cảnh (context) đều là sự thật. Khắc phục: Tôi đã thêm một bước reranking (xếp hạng lại) bằng cách sử dụng cross-encoder. Tôi cũng bắt đầu ghi lại (logging) các điểm số truy xuất. Điều này cho thấy khi nào hệ thống thiếu câu trả lời thực tế.
Hãy cho mô hình biết rằng việc trả lời sai là điều có thể chấp nhận được Prompt ban đầu của tôi rất đơn giản: Sử dụng ngữ cảnh để trả lời câu hỏi. Nó không đưa ra hướng dẫn nào cho mô hình khi thiếu ngữ cảnh. Mô hình đã lấp đầy các khoảng trống bằng những phỏng đoán. Khắc phục: Tôi đã thêm một hướng dẫn cụ thể. Nếu câu trả lời không có trong ngữ cảnh, hãy nói rằng bạn không biết. Hiện tượng ảo giác đã giảm xuống ngay lập tức.
Áp dụng ngưỡng truy xuất (retrieval threshold) Mô hình vẫn sử dụng kiến thức chung khi việc truy xuất thất bại. Tôi đã hy vọng prompt sẽ hoạt động, nhưng hy vọng không phải là một chiến lược. Khắc phục: Tôi đã thiết lập một ngưỡng điểm cứng. Nếu điểm truy xuất cao nhất quá thấp, hệ thống sẽ dừng lại. Nó sẽ trả về một thông báo dự phòng (fallback message) thay vì để mô hình tự đoán.
Kiểm tra các lỗi, không chỉ kiểm tra sự thành công Tôi chỉ kiểm tra những câu hỏi dễ mà tôi biết chắc chắn tài liệu có đề cập. Tôi đã bỏ qua các truy vấn mơ hồ và thông tin bị thiếu. Ảo giác thường xuất hiện trong chính những khoảng trống đó. Khắc phục: Tôi đã xây dựng một bộ đánh giá gồm các "câu hỏi bẫy". Đây là những trường hợp mà câu trả lời đúng không có trong hệ thống. Tôi chạy các bài kiểm tra này mỗi khi thực hiện thay đổi.
RAG không ngăn chặn hoàn toàn hiện tượng ảo giác. Nó giúp chúng có thể kiểm soát được. Bot của tôi vẫn không biết tất cả mọi thứ. Nhưng giờ đây, khi không chắc chắn, nó sẽ nói rõ như vậy. Điều đó làm cho công cụ trở nên hữu dụng.
Nguồn: https://dev.to/pallavi_sharma_10c1a6f1da/why-my-rag-app-kept-hallucinating-and-how-i-fixed-it-3i10