Оценка качества RAG-системы (RAGAS, precision, recall, faithfulness)

Проектируем и внедряем системы искусственного интеллекта: от прототипа до production-ready решения. Наша команда объединяет экспертизу в машинном обучении, дата-инжиниринге и MLOps, чтобы AI работал не в лаборатории, а в реальном бизнесе.
Показано 1 из 1Все 1566 услуг
Оценка качества RAG-системы (RAGAS, precision, recall, faithfulness)
Средний
от 1 дня до 3 дней
Часто задаваемые вопросы

Направления AI-разработки

Этапы разработки AI-решения

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1284
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1196
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    901
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1119
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    586
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    853

Оценка качества RAG-системы (RAGAS, precision, recall, faithfulness)

Без систематической оценки качества RAG-система — «чёрный ящик». RAGAS (RAG Assessment) — наиболее распространённый фреймворк для автоматической оценки, который не требует ручной разметки ответов, используя LLM как судью.

Метрики RAGAS

Метрика Что измеряет Диапазон
Context Precision Доля retrieved контекста, который реально нужен для ответа 0–1
Context Recall Доля необходимого контекста, которая была retrieved 0–1
Faithfulness Соответствие ответа retrieved контексту (нет галлюцинаций) 0–1
Answer Relevancy Насколько ответ релевантен вопросу 0–1
Answer Correctness Фактическая правильность ответа (требует ground truth) 0–1

Установка и базовое использование RAGAS

from ragas import evaluate
from ragas.metrics import (
    context_precision,
    context_recall,
    faithfulness,
    answer_relevancy,
    answer_correctness,
)
from datasets import Dataset

# Подготовка датасета для оценки
eval_data = {
    "question": [
        "Каков срок действия договора?",
        "Кто несёт ответственность за задержку поставки?",
    ],
    "answer": [
        "Договор действует до 31 декабря 2025 года.",
        "Поставщик несёт ответственность за задержку сверх 5 рабочих дней.",
    ],
    "contexts": [
        ["2.1. Настоящий Договор вступает в силу с момента подписания и действует до 31.12.2025..."],
        ["4.3. В случае задержки поставки более чем на 5 рабочих дней Поставщик..."],
    ],
    "ground_truths": [
        "Договор действует до 31 декабря 2025 года.",
        "Ответственность несёт Поставщик при задержке более 5 рабочих дней.",
    ],
}

dataset = Dataset.from_dict(eval_data)

# Оценка
from langchain_openai import ChatOpenAI, OpenAIEmbeddings
from ragas.llms import LangchainLLMWrapper
from ragas.embeddings import LangchainEmbeddingsWrapper

evaluator_llm = LangchainLLMWrapper(ChatOpenAI(model="gpt-4o"))
evaluator_embeddings = LangchainEmbeddingsWrapper(OpenAIEmbeddings())

results = evaluate(
    dataset,
    metrics=[context_precision, context_recall, faithfulness, answer_relevancy],
    llm=evaluator_llm,
    embeddings=evaluator_embeddings,
)

print(results)
# {'context_precision': 0.88, 'context_recall': 0.82, 'faithfulness': 0.94, 'answer_relevancy': 0.91}

Автоматизированный тестовый набор: Testset Generation

RAGAS умеет генерировать тестовый набор из ваших документов:

from ragas.testset.generator import TestsetGenerator
from ragas.testset.evolutions import simple, reasoning, multi_context

generator = TestsetGenerator.with_openai()

# Генерация тестов разной сложности
testset = generator.generate_with_langchain_docs(
    documents=your_documents,
    test_size=100,
    distributions={
        simple: 0.5,          # Простые вопросы по одному документу
        reasoning: 0.3,       # Требующие рассуждений
        multi_context: 0.2,   # Требующие нескольких документов
    }
)

testset.to_pandas().to_csv("evaluation_testset.csv", index=False)

Интерпретация метрик

Context Precision < 0.7: система извлекает много нерелевантного контекста. Решения: улучшить reranking, добавить фильтрацию по метаданным, уменьшить top_k.

Context Recall < 0.7: система не находит нужные документы. Решения: улучшить chunking, попробовать hybrid search, fine-tune embedding модель.

Faithfulness < 0.8: модель галлюцинирует — выдумывает информацию, не подкреплённую контекстом. Решения: улучшить system prompt, добавить инструкцию «отвечай только на основе контекста», использовать меньшую temperature.

Answer Relevancy < 0.8: ответы не по делу. Решения: улучшить prompt, добавить примеры желаемого формата.

Практический кейс: итерации по RAGAS метрикам

Исходное состояние (базовый RAG, GPT-4o-mini, ChromaDB):

Метрика v1
Context Precision 0.61
Context Recall 0.68
Faithfulness 0.74
Answer Relevancy 0.79

Итерация 1: добавили hybrid search (sparse + dense).

  • Context Recall: 0.68 → 0.81 (+19%)

Итерация 2: добавили Contextual Compression + reranker.

  • Context Precision: 0.61 → 0.84 (+38%)
  • Faithfulness: 0.74 → 0.91 (+23%)

Итерация 3: доработали system prompt с явным запретом галлюцинаций.

  • Faithfulness: 0.91 → 0.95
  • Answer Relevancy: 0.79 → 0.88

Финальное состояние (v4):

Метрика v4
Context Precision 0.84
Context Recall 0.81
Faithfulness 0.95
Answer Relevancy 0.88

Continuous Evaluation в CI/CD

import pytest

@pytest.fixture(scope="session")
def rag_evaluation_results():
    """Запускает RAGAS оценку на тестовом наборе"""
    return evaluate(evaluation_dataset, metrics=[faithfulness, context_recall])

def test_faithfulness_above_threshold(rag_evaluation_results):
    assert rag_evaluation_results["faithfulness"] >= 0.85, \
        f"Faithfulness {rag_evaluation_results['faithfulness']:.2f} below threshold 0.85"

def test_context_recall_above_threshold(rag_evaluation_results):
    assert rag_evaluation_results["context_recall"] >= 0.75

Сроки

  • Настройка RAGAS pipeline: 2–3 дня
  • Генерация тестового набора: 1–2 дня
  • Baseline оценка: 1 день
  • Итерации по улучшению: 2–4 недели
  • Итого: 3–6 недель