Оценка 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. Сэмплинг вопросов: берите заголовки/абзацы, генерируйте 1–3 вопроса на фрагмент + добавляйте «adversarial» (перефраз, многосоставные, кросс‑разделы).
  2. Эталон (gold): короткая справка (1–3 предложения) + обязательные ссылки на фрагменты (id).
  3. Запуск пайплайна: ваш прод‑стек retrieval + сбор контекста + ответ.
  4. Скоринг: автоматические проверки + LLM‑Judge по жёсткой рубрике.
  5. Агрегация: отчёты по сегментам (темы, длины, языки, источники).

Подробнее про подготовку и чанкование: /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: дешёвые и надёжные

  1. Citation Accuracy: все указанные источники должны присутствовать в top‑K; id/якоря валидны.
  2. Overlap Heuristic: доля уникальных сущностей/терминов ответа, встречающихся в контексте (proxy groundedness).
  3. Length/Policy: соблюдение лимитов max_tokens, отсутствие запрещённых паттернов (см. /solutions/llm-inference/guardrails/).
  4. 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/.

Навигация по разделу «RAG»

/solutions/rag//solutions/rag/vector-db//solutions/embeddings//solutions/llm-training/eval//solutions/llm-inference/guardrails//solutions/llm-inference/observability//solutions/llm-inference/costs/

Готовы запустить?

Запустить GPU-сервер