Bối cảnh: Tại sao không nên tin vào cảm giác khi làm RAG?
Xây xong một con bot RAG bằng LangChain hay LlamaIndex không khó. Cái khó nhất là trả lời câu hỏi: “Nó chạy thực sự tốt chưa?”.
Lúc mới bắt đầu, mình thường test thủ công bằng cách đặt khoảng 20 câu hỏi rồi tự đọc kết quả. Cách này cực kỳ tốn sức và mang tính cảm tính. Có lúc bot trả lời rất mượt, nhưng chỉ cần đổi nhẹ Prompt là nó bắt đầu “bịa chuyện” (hallucination) ngay lập tức.
RAGAS (RAG Assessment) sinh ra để giải quyết vấn đề này. Thay vì nói chung chung “Bot chạy ổn”, anh em có thể khẳng định: “Độ trung thực (Faithfulness) đạt 0.92/1.0”. Đây là framework giúp định lượng chất lượng RAG thông qua các con số cụ thể.
Hệ thống RAG thường gãy ở hai khâu: Retrieval (tìm kiếm dữ liệu) và Generation (tổng hợp câu trả lời). RAGAS cung cấp bộ chỉ số (metrics) để soi xét kỹ từng mắt xích này.
Cài đặt thư viện RAGAS
Anh em cần chuẩn bị môi trường Python sạch. RAGAS chơi rất thân với LangChain, nhưng nó cũng hoạt động độc lập với bất kỳ framework nào bạn đang dùng.
pip install ragas datasets langchain-openai
RAGAS sử dụng một LLM mạnh (mặc định là GPT-4o) để làm “giám khảo” chấm điểm. Để bắt đầu, hãy cấu hình API Key của OpenAI hoặc dùng Ollama nếu muốn chạy local để tiết kiệm chi phí.
import os
os.environ["OPENAI_API_KEY"] = "sk-your-key"
3 chỉ số “vàng” để tối ưu hệ thống
Dựa trên kinh nghiệm triển khai dự án thực tế, đây là 3 chỉ số quan trọng nhất anh em cần theo dõi sát sao.
1. Faithfulness (Tính trung thực)
Chỉ số này kiểm tra xem câu trả lời có thực sự dựa trên dữ liệu đầu vào (context) hay không. Nó giúp chặn đứng tình trạng AI tự suy diễn thông tin nằm ngoài tài liệu.
- Cách hoạt động: RAGAS bóc tách các ý chính trong câu trả lời và đối chiếu ngược với context. Ý nào không có bằng chứng sẽ bị trừ điểm thẳng tay.
- Ví dụ: Context nói doanh thu là 10 tỷ, nhưng bot trả lời 12 tỷ? Điểm Faithfulness sẽ tụt xuống gần bằng 0.
2. Answer Relevance (Sự phù hợp)
Đôi khi AI trả lời đúng sự thật nhưng lại… lạc đề. Answer Relevance đo mức độ liên quan của câu trả lời so với câu hỏi gốc.
- Cách hoạt động: RAGAS sinh ngược lại các câu hỏi từ câu trả lời hiện tại. Sau đó, nó tính độ tương đồng giữa câu hỏi được sinh ra và câu hỏi gốc của người dùng.
- Lưu ý: Nếu bot trả lời quá dài dòng hoặc lan man, điểm này sẽ thấp dù thông tin có thể vẫn đúng.
3. Context Precision (Độ chính xác ngữ cảnh)
Chỉ số này dành riêng để đánh giá bộ phận Retrieval. Nó kiểm tra xem các đoạn văn bản (chunks) tìm được có chứa thông tin cần thiết không và thứ tự ưu tiên có đúng không.
Giả sử bạn lấy Top 5 văn bản liên quan. Nếu thông tin quan trọng nhất nằm ở vị trí thứ 5 thay vì thứ 1, điểm Context Precision sẽ bị ảnh hưởng đáng kể.
Triển khai đánh giá thực tế
Để chạy test, anh em cần chuẩn bị một tập dữ liệu gồm: Câu hỏi, Câu trả lời của AI, Context đã tìm được và Câu trả lời mẫu (Ground Truth).
Dưới đây là đoạn code mẫu để chạy nhanh một bộ test:
from datasets import Dataset
from ragas import evaluate
from ragas.metrics import faithfulness, answer_relevance, context_precision
data_samples = {
'question': ['Thủ đô của Pháp là gì?', 'Ai phát minh ra bóng đèn?'],
'answer': ['Paris.', 'Thomas Edison phát triển bóng đèn thương mại.'],
'contexts': [
['Paris là thủ đô nước Pháp.'],
['Edison không phải người đầu tiên nhưng đã tối ưu bóng đèn sợi đốt.']
],
'ground_truth': ['Paris', 'Thomas Edison']
}
dataset = Dataset.from_dict(data_samples)
score = evaluate(dataset, metrics=[faithfulness, answer_relevance, context_precision])
print(score.to_pandas())
Thực tế, mình thường tích hợp bước này vào pipeline CI/CD trên GitHub Actions. Nếu điểm trung bình sau khi chỉnh sửa Prompt giảm xuống dưới 0.8, hệ thống sẽ tự động chặn không cho merge code.
Mẹo “xương máu” khi dùng RAGAS
Sau nhiều dự án, mình rút ra vài kinh nghiệm để tránh mất tiền oan và có kết quả chuẩn:
- Chọn lọc bộ test: Đừng đánh giá toàn bộ database hàng nghìn câu. Hãy chọn ra khoảng 30-50 câu hỏi tiêu biểu (Golden Dataset) để chạy định kỳ.
- Ưu tiên GPT-4o: Dù GPT-3.5 rẻ hơn nhưng khả năng chấm điểm Faithfulness rất kém. Dùng model yếu làm giám khảo sẽ khiến kết quả bị sai lệch nghiêm trọng.
- Kiểm soát chi phí: Việc chấm điểm 100 mẫu bằng GPT-4o có thể tốn khoảng 1-2 USD. Hãy cân nhắc tần suất chạy test để tối ưu ngân sách.
- Xử lý khi điểm thấp: Nếu Context Precision thấp, hãy xem lại kỹ thuật Chunking hoặc Embedding. Nếu Faithfulness thấp, hãy siết chặt System Prompt.
Đo lường được là cải thiện được. Thay vì nói “Em nghĩ bot ổn”, hãy đưa cho khách hàng bản báo cáo với các biểu đồ chỉ số rõ ràng. Chúc anh em tối ưu con bot của mình thành công!

