Решения
Оценка RAG: groundedness и качество ответов
Задача страницы. Дать практический метод оценки RAG‑систем: как измерять groundedness/faithfulness (опора на источники, отсутствие галлюцинаций), метрики retrieval (Recall@K, Precision@K, MRR), качество конечных ответов (correctness, цитируемость), а также как организовать оффлайн‑бенчмарки и онлайн A/B.
TL;DR
- Делите оценку на три слоя: Retrieval → Augmentation → Answer.
- Главные метрики: Recall@K и Context Precision (retrieval), Groundedness и Citation Accuracy (answer).
- Используйте LLM‑as‑Judge по строгому рубрикатору + авто‑проверки (пересечение с контекстом, цитаты, факты).
- Стройте оффлайн наборы из ваших документов, а на проде запускайте canary A/B с бизнес‑метриками и p95‑латентностью.
Связанные разделы:
/solutions/rag/ • /solutions/rag/vector-db/ • /solutions/embeddings/ • /solutions/llm-training/eval/ • /solutions/llm-inference/guardrails/ • /solutions/llm-inference/observability/ • /solutions/llm-inference/costs/
Картина метрик: от поисковой части к ответу![]()
Retrieval
- Recall@K — доля запросов, для которых целевой фрагмент попал в top‑K.
- Precision@K — доля релевантных среди top‑K.
- MRR / Hit@K — чувствительность к позиции релевантов.
- Latency p95 — задержка поиска (см. /solutions/rag/vector-db/).
Augmentation (сбор контекста)
- Context Precision — доля вставленных в подсказку фрагментов, реально нужных для ответа.
- Coverage — сколько ключевых фактов из эталона покрыто контекстом.
- Redundancy — дубликаты/пересечения в контексте.
Answer (итоговая генерация)
- Groundedness/Faithfulness — все утверждения подтверждаются контекстом.
- Citation Accuracy — корректные отсылки к источникам (id/секции).
- Correctness — соответствие эталонному ответу (если он есть).
- Style/Clarity — краткость, структура, соблюдение инструкции.
- Latency p95 / Cost per 1M — эксплуатационные показатели (см. /solutions/llm-inference/costs/).
Общий оффлайн‑пайплайн оценки![]()
Документы → очистка → чанкование → (опц.) ручная разметка Q/A
↘ генерация кандидатов вопросов (по секциям)
Q → top‑K retrieve → сбор контекста → ответ LLM → оценка (правила + Judge)
↘ метрики (retrieval/answer)
- Сэмплинг вопросов: берите заголовки/абзацы, генерируйте 1–3 вопроса на фрагмент + добавляйте «adversarial» (перефраз, многосоставные, кросс‑разделы).
- Эталон (gold): короткая справка (1–3 предложения) + обязательные ссылки на фрагменты (id).
- Запуск пайплайна: ваш прод‑стек retrieval + сбор контекста + ответ.
- Скоринг: автоматические проверки + LLM‑Judge по жёсткой рубрике.
- Агрегация: отчёты по сегментам (темы, длины, языки, источники).
Подробнее про подготовку и чанкование: /solutions/rag/, про индексы: /solutions/rag/vector-db/.
Рубрика для Groundedness (строгий JSON‑контракт)![]()
Идея. Judge должен отвечать строго JSON‑ом по схеме: для каждого проверяемого утверждения — supported / contradicted / insufficient.
JSON Schema (фрагмент):
{
"type": "object",
"properties": {
"score_0_1": {"type":"number", "minimum":0, "maximum":1},
"claims": {
"type": "array",
"items": {
"type":"object",
"properties": {
"text": {"type":"string"},
"label": {"type":"string", "enum":["supported","contradicted","insufficient"]},
"evidence_ids": {"type":"array","items":{"type":"string"}}
},
"required":["text","label"]
}
},
"notes": {"type":"string"}
},
"required": ["score_0_1","claims"]
}
Инструкция Judge (кратко):
- Рассматривай только предоставленный контекст.
- Не делай внешних допущений.
- Любое утверждение, не подтверждённое контекстом, — insufficient.
- Противоречия — contradicted.
- Выдай итоговый score_0_1 как долю утверждений в метках supported.
Автопроверки до Judge: дешёвые и надёжные![]()
- Citation Accuracy: все указанные источники должны присутствовать в top‑K; id/якоря валидны.
- Overlap Heuristic: доля уникальных сущностей/терминов ответа, встречающихся в контексте (proxy groundedness).
- Length/Policy: соблюдение лимитов max_tokens, отсутствие запрещённых паттернов (см. /solutions/llm-inference/guardrails/).
- Redundancy: доля пересечений между чанками в подсказке (>30% — признак неэффективного сборщика контекста).
Метрики и формулы![]()
Retrieval
Recall@K = (#запросов с хотя бы 1 целевым фрагм. в top-K) / (#запросов)
Precision@K= (#релевантных в top-K) / (K × #запросов)
MRR = avg(1 / rank_первого_релеванта)
Groundedness (по Judge)
G = avg(score_0_1)
HallucinationRate = (#claims с label ∈ {contradicted, insufficient}) / (#claims)
Citation Accuracy
CA = (#ответов, где все указанные цитаты ∈ top-K и корректны) / (#ответов с цитатами)
Итоговый интегральный балл (пример)
Score = 0.35*Recall@K + 0.25*G + 0.20*CA + 0.10*MRR + 0.10*ContextPrecision
Весы подбираются под ваш продукт (подробнее — /solutions/llm-training/eval/).
Мини‑фреймворк оценки (псевдокод)![]()
def eval_batch(queries, corpus, retriever, collector, llm, judge):
R = [] # результаты по запросам
for q in queries:
topk = retriever.search(q, k=50) # (doc_id, score)
ctx = collector.build(topk, budget_tokens=1200) # сбор контекста
ans = llm.generate(q, ctx, max_new_tokens=200) # ответ
auto = {
"citation_ok": all(c in [d for d,_ in topk] for c in extract_citations(ans)),
"overlap": entity_overlap(ans, ctx),
}
j = judge(q, ctx, ans) # JSON по схеме из §3
R.append({"q":q, "topk":topk, "ctx":ctx, "ans":ans, "auto":auto, "judge":j})
return aggregate_metrics(R) # формулы из §5
Как собирать датасеты под RAG![]()
- Стратифицированный сэмплинг. Балансируйте темы/разделы/форматы (текст/таблицы/код).
- Adversarial‑варианты. Перефразы, запросы «с подвохом» (дубликаты терминов, редкие сущности, кросс‑док).
- Шум/пропуски. Вставляйте ошибки и пропуски, чтобы проверить устойчивость поиска.
- Мультиязычность. Вопросы/ответы на целевых языках; проверяйте, что эмбеддинги и индексы соответствуют.
- Обновляемость. Храните версию корпуса/индекса, чтобы результаты были воспроизводимы.
Подготовка корпуса и индексов: /solutions/rag/ и /solutions/rag/vector-db/. Эмбеддинги: /solutions/embeddings/.
Онлайн A/B и продуктовые метрики![]()
Что мерить в проде:
- Deflection/Resolution Rate — доля диалогов, где пользователь не обратился к оператору/повтору.
- Follow‑up редактирование — сколько раз переформулируют запрос.
- CSAT/Thumbs — простая оценка пользователем.
- Latency p95 и ошибки (см. /solutions/llm-inference/observability/).
Практика A/B:
- Canary 5–10% трафика; фиксируйте версии: retriever@index@params, collector@v, model@quant.
- Останавливайте эксперимент при деградации groundedness/CSAT или росте p95.
Поддерживайте стриминг (см. /solutions/llm-inference/streaming/) — UX важнее.
Пороговые значения (рабочие ориентиры)![]()
- Recall@K: ≥ 0.75 для K=10 при качественном корпусе; для «сложных» доменов стремитесь ≥ 0.6.
- Groundedness (G): ≥ 0.85 для справочных ответов, ≥ 0.7 для «поясняющих» текстов.
- Citation Accuracy: ≥ 0.9, иначе усиливайте сбор контекста и шаблоны ссылок.
- Latency p95 (end‑to‑end): чат ≤ 1–1.5 с, аналитика ≤ 2–3 с (со стримингом).
- HallucinationRate: ≤ 5–10% по claims — выше требует немедленного внимания.
Диагностика и улучшения![]()
- Низкий Recall@K → см. /solutions/rag/vector-db/: увеличьте nprobe, улучшите чанкование/метаданные, добавьте гибрид (метаданные → вектор).
- Groundedness падает → сократите шум в контексте, ужесточите сбор (де‑дуп, сортировка по разделам), улучшите цитаты и стиль подсказки.
- Citation Accuracy низкий → валидируйте id/якоря, не вставляйте «мертвые» ссылки, ограничьте преобразования текста.
- Высокая p95 → уменьшите K и размер контекста, батчируйте поиск, используйте short/long пулы.
- Галлюцинации → включите guardrails и пост‑фильтры (см. /solutions/llm-inference/guardrails/).
Отчёт и дашборды![]()
Минимум графиков:
- Распределение Recall@K / MRR по темам/языкам.
- Groundedness и HallucinationRate по источникам.
- Citation Accuracy и доля «пустых» ответов.
- Latency p95: поиск/LLM/общая.
- Стоимость (цена за 1M) vs качество (см. /solutions/llm-inference/costs/).
Интеграция в наблюдаемость: /solutions/llm-inference/observability/.
Чек‑лист перед продом![]()
- Есть оффлайн‑набор (вопросы/эталоны/цитаты) и пайплайн оценок.
- Включены автопроверки (цитаты/пересечения/политики) и строгий Judge JSON.
- Определены SLO по Recall@K, Groundedness, Citation Accuracy, p95.
- Настроены A/B‑механики и дашборды качества/латентности/стоимости.
- План деградации: снижение K, ужесточение сборщика контекста, фоллбек‑модель.
- Nightly‑прогон бенчмарка и алерты при регрессиях.
Как запускать это в cloudcompute.ru![]()
- В /solutions/templates/ используйте “RAG‑Eval Harness”:
– генерация валид‑набора из вашего корпуса;
– запуск retrieval/collector/LLM;
– автопроверки + Judge JSON;
– отчёт с метриками и артефактами (семплы ответов). - Для экономики и SLA: /solutions/llm-inference/costs/, наблюдаемость — /solutions/llm-inference/observability/, безопасность — /solutions/llm-inference/guardrails/.