RAG pipeline без метрик -- гадание на кофейной гуще. Precision@5 показывает долю релевантных чанков в top-5 (70% -- значит 1.5 чанка из 5 -- мусор). Faithfulness измеряет, какая доля утверждений в ответе подтверждается контекстом (ниже 0.7 -- hallucination risk). nDCG штрафует за неправильный порядок результатов. RAGAS Score = среднее четырёх метрик, даёт single number для сравнения pipeline'ов. Без этих чисел невозможно понять, что именно ломается: retrieval, generation или оба.
graph LR
subgraph Retrieval
CR["Context Recall"]
CP["Context Precision"]
MRR["MRR"]
NDCG["nDCG"]
end
subgraph Generation
F["Faithfulness"]
AR["Answer Relevance"]
AC["Answer Correctness"]
AS["Answer Similarity"]
end
subgraph System
LAT["Latency"]
COST["Cost"]
TPT["Throughput"]
end
subgraph User
SAT["Satisfaction"]
HELP["Helpfulness"]
TRUST["Trust"]
end
style Retrieval fill:#e8eaf6,stroke:#3f51b5
style Generation fill:#e8f5e9,stroke:#4caf50
style System fill:#fff3e0,stroke:#ff9800
style User fill:#fce4ec,stroke:#e91e63
Высокая faithfulness != правильный ответ
RAG может быть 100% faithful к retrieved context, но при этом давать неправильный ответ -- если retrieved docs нерелевантны. Всегда оценивай retrieval quality И generation quality отдельно. RAGAS formula покрывает оба: Context Precision/Recall + Faithfulness/Relevance.
For enterprises, errors in retrieval or generation can mean compliance failures, reputational damage, or legal exposure. Not "does it work in tests?" but "will it hold up reliably at scale?"
Strengths: purpose-built for RAG, no ground truth needed (LLM-as-judge), synthetic data generation.
Limitations: RAG only (no agent/chatbot eval), metric opacity, no tracing.
fromdeepevalimportevaluatefromdeepeval.metricsimportFaithfulnessMetricmetric=FaithfulnessMetric(threshold=0.7,model="gpt-4",include_reason=True# Self-explaining)# Output includes:# Score: 0.85# Reason: "The answer claims X but context only supports Y..."
LLM-as-Judge: use LLM (GPT-4) to evaluate other LLM outputs. Best for: no ground truth, subjective quality, fast iteration. Reliability: GPT-4 agrees with humans 85% on faithfulness, 88% on relevance, 80% on hallucination. Key issues: position bias, self-preference, inconsistency. Mitigation: multiple judges (ensemble), calibrate with human feedback, structured prompts. NOT for: high-stakes accuracy, regulatory compliance -- use human eval.
"Чем Precision@K отличается от Recall@K в контексте RAG?" -- Precision@K: доля релевантных среди top-K (из 5 чанков сколько полезных). Recall@K: доля найденных релевантных из всех существующих. При K=5 и 3 релевантных в коллекции: Precision@5=0.4 (⅖), Recall@5=0.67 (⅔). Precision важнее для quality, Recall для completeness.
"Когда nDCG лучше MRR?" -- MRR учитывает только позицию первого релевантного результата. nDCG учитывает позиции всех релевантных + степень релевантности (graded). Для RAG где нужно несколько чанков -- nDCG предпочтительнее.
"Как работает LLM-as-Judge и когда ему нельзя доверять?" -- LLM оценивает пары (вопрос, ответ) по rubric. Проблемы: position bias (предпочитает первый ответ), verbosity bias (длиннее = лучше), self-enhancement bias (модель оценивает себя выше). Для hallucination detection agreement с людьми только 80%.
System Design:
"Спроектируйте pipeline для оценки RAG в CI/CD." -- DeepEval + pytest, curated test dataset (50-100 пар), thresholds: faithfulness >0.7, context recall >0.6. Synthetic augmentation через RAGAS для расширения dataset. Fail pipeline при regression >5%.
Частые ошибки
"Precision@K и Recall@K -- одинаково важны" -- Нет. В RAG низкий Precision отравляет контекст мусорными чанками (LLM галлюцинирует). Низкий Recall -- ответ неполный, но хотя бы корректный. Precision критичнее.
"nDCG@10 = 0.8 -- значит retrieval хороший" -- nDCG не учитывает, ЧТО именно найдено. Можно иметь nDCG 0.8, но все найденные чанки из одного документа (diversity problem). Всегда проверяй source diversity.
"Faithfulness = Answer Correctness" -- Faithfulness: ответ основан на контексте. Answer Correctness: ответ фактически верен. Можно быть faithful к неправильному контексту (retrieval ошибся, но generation честно его процитировала).