RAG Evaluation - "Máy phát hiện nói dối" cho Jarvis

AI Hunter

Member
Ở bài trước, chúng ta đã build xong hệ thống GraphRAG cực xịn. Cảm giác lúc đó thật phê, hỏi gì nó cũng trả lời vanh vách.

Nhưng hãy cẩn thận! Đó là cái bẫy "Vibe Check" (Kiểm tra bằng cảm tính).
Bạn hỏi: "Hôm nay trời thế nào?" -> AI: "Đẹp lắm." -> Bạn kết luận: AI ngon.
Sếp hỏi: "Doanh thu Q3 so với Q1 tăng bao nhiêu % dựa trên báo cáo PDF?" -> AI: "Tăng 15%." (Trong khi thực tế là giảm 5%). -> Sếp kết luận: AI "ngáo", dự án toang.

Làm sao để biết AI đang nói thật hay đang "chém gió" (Hallucination)? Hôm nay chúng ta sẽ tích hợp Ragas - Framework kiểm thử RAG số 1 hiện nay để chấm điểm hệ thống bằng những con số biết nói.

RAG Evaluation - Máy phát hiện nói dối cho Jarvis.jpg

1. Tư duy: LLM chấm điểm LLM​


Thuê người ngồi đọc 1000 câu trả lời của AI để chấm điểm thì quá tốn kém.
Giải pháp ở đây là LLM-as-a-Judge.

Chúng ta sẽ dùng một model "trùm cuối" (như GPT-4) để làm giám khảo, chấm điểm cho câu trả lời của hệ thống RAG (chạy model nhỏ hơn như Llama 3 hoặc GPT-4o-mini). Giám khảo sẽ soi xét dựa trên các bộ luật (Metrics) nghiêm ngặt.

2. Các chỉ số sống còn (Metrics)​


Trong Ragas, có 3 chỉ số anh em nhất định phải đo:

  1. Faithfulness (Độ trung thực): Câu trả lời của AI có bịa ra không?
    Ví dụ: Tài liệu không nói gì về UFO, nhưng AI lại bảo "Có UFO". -> Faithfulness thấp.
  2. Answer Relevance (Độ liên quan): AI trả lời có đúng trọng tâm câu hỏi không?
    Hỏi: "Giá gà rán bao nhiêu?" -> Trả lời: "Gà rán rất ngon." -> Relevance thấp.
  3. Context Precision (Độ chính xác ngữ cảnh): Hệ thống RAG có tìm đúng đoạn văn bản chứa câu trả lời không, hay tìm toàn rác?

3. Thực chiến: Code chấm điểm tự động​


Cài đặt:
Mã:
pip install ragas pandas openai

Chuẩn bị dữ liệu:
Để chấm điểm, bạn cần một bộ dataset gồm 4 thành phần:
1. `question`: Câu hỏi.
2. `answer`: Câu AI trả lời.
3. `contexts`: Đoạn văn bản AI tìm được từ DB.
4. `ground_truth`: Đáp án chuẩn (do con người soạn sẵn - cái này tùy metric, có thể không cần).

Code Python:

[CODE lang="python"]
from ragas import evaluate
from ragas.metrics import (
faithfulness,
answer_relevancy,
context_precision,
)
from datasets import Dataset
import os

# Setup API Key cho "Giám khảo" GPT-4
os.environ["OPENAI_API_KEY"] = "sk-proj-xxxx"

# 1. Giả lập dữ liệu chạy thử (Thực tế bạn lấy từ Log của Jarvis)
data_samples = {
'question': [
'Thủ đô của Việt Nam là gì?',
'Elon Musk là ai?'
],
'answer': [
'Thủ đô của Việt Nam là Hà Nội.',
'Elon Musk là một ca sĩ nhạc Pop nổi tiếng.' # <--- Câu này sai lè!
],
'contexts': [
['Hà Nội là thủ đô của nước CHXHCN Việt Nam, nằm ở đồng bằng sông Hồng.'],
['Elon Musk là CEO của Tesla và SpaceX, người giàu nhất thế giới.']
],
'ground_truth': [
'Hà Nội',
'CEO của Tesla và SpaceX'
]
}

dataset = Dataset.from_dict(data_samples)

# 2. Tiến hành chấm thi
# Chúng ta dùng 3 tiêu chí: Trung thực, Liên quan, và Độ chuẩn của Context
results = evaluate(
dataset=dataset,
metrics=[
faithfulness,
answer_relevancy,
context_precision,
],
)

# 3. Xuất bảng điểm
df = results.to_pandas()
print(df[['question', 'answer', 'faithfulness', 'answer_relevancy']])
[/CODE]

4. Phân tích kết quả​


Khi chạy xong, bạn sẽ thấy một bảng điểm như sau (minh họa):

QuestionAnswerFaithfulnessRelevancy
Thủ đô VN là gì?Hà Nội...1.0 (10/10)1.0 (10/10)
Elon Musk là ai?Ca sĩ nhạc Pop...0.0 (0/10)0.9 (9/10)

Tại sao điểm lại như vậy?
  • Câu Elon Musk: AI trả lời "Ca sĩ nhạc Pop".
  • Relevancy cao (0.9): Vì nó vẫn trả lời cho câu hỏi "Là ai", cấu trúc câu đúng.
  • Faithfulness thấp (0.0): Vì trong `contexts` ghi là "CEO Tesla", mà câu trả lời lại là "Ca sĩ". Ragas phát hiện ngay sự mâu thuẫn -> Báo động đỏ! 🚨

5. Ứng dụng vào CI/CD​


Đừng chỉ chạy cái này cho vui. Hãy tích hợp nó vào quy trình phát triển:
1. Mỗi khi sửa code RAG (đổi prompt, đổi chunk size, đổi thuật toán tìm kiếm).
2. Chạy lại bộ test Ragas.
3. Nếu điểm số trung bình tụt từ 0.9 xuống 0.7 -> Cấm Deploy!

Đây chính là cách các công ty lớn đảm bảo con AI của họ không bị "ngu đi" sau mỗi lần update.

Tổng kết​


Giờ đây, Jarvis của bạn đã có một "Ban thanh tra" nội bộ.
  • Structured Outputs giúp nó nói đúng cấu trúc.
  • GraphRAG giúp nó hiểu sâu.
  • Ragas giúp bạn biết khi nào nó nói sai.
 
Back
Top