Почему одна метрика не описывает RAG

Неверный ответ может появиться потому, что документ не загрузился, parser потерял таблицу, ACL отфильтровал источник, retriever не нашёл chunk, reranker опустил его, prompt проигнорировал контекст или модель придумала факт.

Средний «RAG score» не показывает слой отказа. Полезная оценка строится как воронка с отдельными доказательствами.

5
слоёв: ingestion, retrieval, context, generation, outcome
1
versioned ground truth
0
релизов по одному average score

Карта RAG evaluation: от источника до результата

СлойГлавный вопросПример метрики
IngestionНужные данные доступны и актуальны?Coverage, parse errors, freshness
RetrievalНашли необходимые chunks?Recall@k, MRR, nDCG
ContextПередали достаточно без шума?Coverage, relevance, token budget
GenerationОтвет верен и grounded?Correctness, faithfulness, citations
OutcomeЗадача пользователя завершена?Task success, corrections, handoff

Шаг 1. Определите success contract и цену ошибки

До метрик опишите задачу: lookup одного факта, multi-hop comparison, policy answer или summary. Разные вопросы требуют разных источников и критериев.

Use case: [название]
User intent classes: [список]
Authoritative sources: [иерархия]
Required facts/answer properties: [критерии]
Critical errors: [hard limits]
Allowed abstention: [когда]
Citation requirements: [уровень]
Access-control requirements: [scope]
Latency and token budget: [SLO]
Task success and human review: [метрики]

Шаг 2. Постройте ground truth, пригодный для диагностики

Пара query/answer недостаточна. Чтобы оценить retrieval, нужны релевантные документы или chunks; чтобы оценить generation - обязательные факты и допустимые формулировки. Для нескольких корректных источников храните множество acceptable evidence.

Ground-truth record
  1. Query и normalized intent.
  2. Cohort, язык и сложность.
  3. Required facts и forbidden claims.
  4. Acceptable source document IDs/versions.
  5. Relevant spans или chunk-independent evidence.
  6. Expected answer properties.
  7. Правильный abstain при отсутствии данных.
  8. Tenant и access scope.
  9. Labeler, reviewer и guideline version.
  10. Reason и provenance test case.

Document-level и chunk-level relevance - разные задачи

Эксперт часто знает правильный документ, но не конкретный chunk, потому что chunking ещё меняется. Храните source spans или semantic evidence отдельно от текущих chunk IDs, затем отображайте их на versioned index.

Ground truthПлюсМинус
Document IDУстойчив к rechunkingГрубая retrieval оценка
Chunk IDТочный ranking testЛомается при ingestion change
Source spanСохраняет evidenceНужен mapping
Required factsОценивает answerНе локализует retrieval сам

Ingestion evaluation: нужный ответ мог не попасть в индекс

До retrieval проверьте completeness и качество парсинга. Сэмплируйте PDF, таблицы, OCR, списки, headers и metadata. Сравнивайте извлечённый текст с source.

Coverage

Все разрешённые sources проиндексированы.

Fidelity

Таблицы и структура не искажены.

Freshness

Активна правильная версия.

ACL evaluation: правильный ответ не должен нарушать доступ

Высокий recall опасен, если retriever находит чужой документ. Security metrics являются hard gates и не усредняются с качеством.

Retrieval security
  1. Разрешённый пользователь получает нужный source.
  2. Запрещённый пользователь не видит chunk и metadata.
  3. Tenant filter применяется до vector search.
  4. Кэш ключуется правами и версиями.
  5. Изменение ACL инвалидирует индекс/cache вовремя.
  6. Citation URL повторно проверяет access.
  7. Deleted document не возвращается.
  8. Cross-tenant leakage равен hard zero по test suite.

Recall@k: найден ли хотя бы один необходимый источник

Recall@k измеряет долю релевантных items, попавших в первые k результатов. Для lookup иногда достаточно hit rate: найден ли любой допустимый source. Для multi-hop важна coverage всех required evidence.

Recall@k = relevant retrieved in top-k / all relevant items
Hit@k = 1, если хотя бы один required item найден
Evidence coverage@k = required facts supported by top-k / all required facts
Считайте macro average по queries и отдельно по cohorts.
Не сравнивайте числа при разных definitions ground truth.

Precision@k и context relevance: сколько шума передано модели

Увеличение k повышает шанс найти нужное, но добавляет нерелевантный текст, токены и конкурирующие факты. Precision@k - доля релевантных результатов в top-k. LLM-based context relevance оценивает семантическую полезность, но требует валидированного grader.

СитуацияRecallPrecisionПоследствие
Нужного нетНизкийЛюбойИсправлять ingestion/retrieval
Нужное среди шумаВысокийНизкийRerank/filter/context packing
Только часть multi-hopНеполныйВысокийQuery decomposition
Точные evidence chunksВысокийВысокийПроверять generation

MRR и nDCG: насколько высоко находится полезный результат

Mean Reciprocal Rank чувствителен к позиции первого релевантного item: полезен для вопросов с одним ключевым источником. nDCG учитывает graded relevance и позиции нескольких результатов: подходит, когда chunks бывают частично и полностью полезными.

  • Определите relevance grades в annotation guide.
  • Считайте по query, затем агрегируйте.
  • Показывайте distribution, а не только mean.
  • Не используйте MRR для полноты multi-hop evidence.
  • Не сравнивайте ranking при разном candidate pool без оговорки.

Chunking evaluation: тестируйте не размер, а сохранение смысла

Сравните fixed-size, structure-aware и parent-child варианты на одном ground truth. Измеряйте retrieval, context tokens и downstream answer. Хороший chunk содержит достаточный evidence и сохраняет metadata.

Chunk audit
  1. Заголовок и section path сохранены.
  2. Таблица не разорвана без контекста.
  3. Определение и исключение не разделены.
  4. Дубли overlap измерены.
  5. Chunk имеет source/version/access metadata.
  6. Parent context добавляется только при необходимости.
  7. Boilerplate удалён.
  8. Token distribution и outliers видимы.

Hybrid search, filters и reranker: проводите ablation

Если одновременно сменить embeddings, chunking, top-k и reranker, нельзя понять источник улучшения. Ablation изменяет один компонент и фиксирует остальные.

Baseline: index A + dense retrieval + k=5.
Candidate 1: только hybrid dense+keyword.
Candidate 2: baseline + metadata filters.
Candidate 3: baseline + reranker.
Candidate 4: best retrieval + context packing.
Для каждого: Recall@k, Precision@k, MRR/nDCG,
evidence coverage, context tokens, P95 latency, cost,
ACL violations и downstream task success.

Generation correctness и completeness

Correctness сравнивает утверждения с ground truth/authoritative evidence. Completeness проверяет, покрыты ли все аспекты вопроса. Короткий верный ответ может быть неполным; полный - содержать ошибку.

Correctness

Нет неверных обязательных фактов.

Completeness

Покрыты required facts.

Critical error

Отдельный hard stop.

Faithfulness: поддержан ли ответ retrieved context

Faithfulness отвечает не на вопрос «истина ли это вообще», а на вопрос «следует ли утверждение из переданного контекста». Ответ может faithfully повторить устаревший документ и всё равно быть business-неверным. Поэтому нужны freshness и source authority.

FaithfulCorrectДиагноз
ДаДаНормальный grounded answer
ДаНетПлохой/устаревший source
НетДаОтвет из model memory, не доказан RAG
НетНетGeneration hallucination или context conflict

Citation precision, coverage и entailment

Citation precision проверяет, действительно ли cited passage поддерживает утверждение. Coverage - все ли требующие доказательства claims имеют citation. Отдельно проверяйте корректность URL, document ID и access.

Citation eval
  1. Разбить ответ на проверяемые claims.
  2. Определить claims, требующие evidence.
  3. Сопоставить citation каждому claim.
  4. Проверить entailment passage → claim.
  5. Проверить полноту citations.
  6. Проверить source authority и freshness.
  7. Проверить точный document/version/span.
  8. Проверить права пользователя на source.

Abstention: хороший RAG умеет не отвечать

Добавьте вопросы, для которых corpus не содержит ответа, а также неоднозначные и конфликтующие источники. Измеряйте правильный отказ и ложный отказ.

Supported: все required facts имеют authoritative evidence.
Partially supported: ответить только доказанную часть и назвать пробел.
Conflicting: показать конфликт sources и запросить правило/уточнение.
Insufficient: явно сообщить, каких данных нет.
Out of scope: не отвечать из общих знаний, если policy требует corpus.
Оцени false answer rate и false abstain rate отдельно.

LLM judge: полезный измеритель, но не ground truth

Версионируйте evaluator model, prompt, rubric и output schema. Сравните judge с экспертами на calibration set, особенно для critical cohorts. Проверьте position bias, verbosity bias и влияние reference answer.

  • Кодом проверяйте то, что проверяется кодом.
  • Используйте несколько независимых критериев.
  • Храните explanation для review, но не считайте её доказательством.
  • Сэмплируйте disagreements на adjudication.
  • После смены judge выполните backtest.
  • Не используйте candidate model как единственного судью самой себя.

End-to-end task success и человеческая коррекция

Пользователю нужен не высокий recall, а решённая задача. Финальные метрики: принял ли эксперт ответ, сколько исправлял, нашёл ли источник, завершил ли workflow и не произошло ли вредное действие.

МетрикаЗачемСкрытая связь
Accepted answerПрактическая пригодностьНужен критерий review
Correction burdenРеальная экономия трудаСчитать время и severity
Source verificationПроверяемостьКлик не равен пониманию
Handoff rateГраница автоматизацииЛожный ответ хуже handoff
Cost per successЭкономикаВсе retries и tools

Failure taxonomy: метрика должна вести к исправлению

RAG failure labels
  1. Source missing/not ingested.
  2. Parse/OCR/table fidelity error.
  3. Wrong version or stale source.
  4. ACL/filter false negative.
  5. Query understanding/decomposition error.
  6. Embedding/keyword retrieval miss.
  7. Reranker/context packing error.
  8. Context conflict unresolved.
  9. Generation unfaithful.
  10. Answer incomplete/incorrect.
  11. Citation wrong/missing.
  12. Abstention policy failure.

Каждый production incident добавляет regression case с label и owner соответствующего слоя.

Regression CI и release gates

На PR запускайте быстрый слой; nightly - полный dataset; при смене index/model - paired candidate comparison. Hard gates ACL и critical errors не компенсируются средним улучшением.

Versions: corpus/parser/chunker/embedding/index/retriever/reranker/prompt/model.
Dataset and grader versions.
By cohort:
- ingestion coverage/freshness;
- Recall/Precision@k, MRR/nDCG;
- evidence coverage and context tokens;
- correctness/completeness/faithfulness;
- citation precision/coverage;
- false answer/false abstain;
- task success, P95 latency, cost/success.
Critical failures and decision: ship/canary/stop.

Production monitoring: lineage и sampling

Trace связывает query с index version, filters, retrieved IDs/scores, reranker, context, model, citations, validators и user outcome. Content логируется только по privacy policy.

Lineage

Какие версии и sources участвовали.

Signals

Empty retrieval, stale, conflicts, latency.

Sampling

Online eval по cohorts и риску.

Итоговый чек-лист оценки RAG

RAG eval gate
  1. Use case и critical errors определены.
  2. Ground truth содержит sources, facts и scope.
  3. Document evidence отделён от chunk version.
  4. Ingestion coverage, fidelity и freshness проверены.
  5. ACL leakage имеет hard zero gate.
  6. Recall/coverage измеряет нахождение необходимого.
  7. Precision/relevance измеряет шум.
  8. MRR/nDCG используется по подходящему intent.
  9. Chunking и reranker сравниваются ablation.
  10. Correctness и completeness разделены.
  11. Faithfulness не подменяет source truth.
  12. Citations проверяются по claims.
  13. Есть no-answer/conflict cases.
  14. LLM judge откалиброван людьми.
  15. End-to-end outcome и regression CI замыкают цикл.

Хорошая RAG-оценка не выдаёт один красивый балл. Она отвечает, где потерялось доказательство и какое изменение проверить следующим.

Как оценить качество RAG-системы?
Разделите ingestion, retrieval, context, generation, citations и end-to-end outcome. Используйте versioned ground truth и отдельные hard gates для доступа и критических ошибок.
Какие retrieval metrics нужны для RAG?
Recall@k или evidence coverage показывает, найдено ли необходимое; Precision@k/context relevance - сколько шума; MRR - позицию первого полезного результата; nDCG - качество ранжирования нескольких graded items.
Что такое faithfulness в RAG?
Это степень, в которой claims ответа поддерживаются retrieved context. Faithful ответ может быть неверным, если source устарел, поэтому отдельно проверяют correctness, authority и freshness.
Чем citation precision отличается от citation coverage?
Precision проверяет, поддерживает ли указанная citation конкретный claim. Coverage проверяет, все ли требующие доказательства claims имеют citations. Также нужны source authority, version и access.
Нужен ли ground truth для RAG eval?
Для диагностической оценки - да. Он может включать acceptable documents/spans, required facts, answer properties и access scope. Некоторые judge metrics работают без reference, но дают более слабое доказательство.
Можно ли оценивать RAG с помощью LLM judge?
Да, для сложных semantic criteria, но judge нужно валидировать на human-labeled set, версионировать и проверять biases. Deterministic constraints лучше оценивать кодом.
Как тестировать вопросы без ответа в базе?
Добавьте unanswerable, partial и conflicting cases. Измеряйте false answer и false abstain отдельно; ожидаемый UX должен указывать отсутствующие данные или конфликт sources.
Как встроить RAG evaluation в CI?
На PR запускайте быстрый regression subset, nightly - полный suite, а при release - paired comparison всех изменённых component versions с quality, ACL, latency и cost gates.
← Все статьи блога