Оцінка якості 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 Частка отриманого контексту, яка насправді необхідна для відповіді 0–1
Context Recall Частка необхідного контексту, який був отриманий 0–1
Faithfulness Відповідність відповіді отриманому контексту (немає галюцинацій) 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}

Автоматизований набір тестів: генерація тестів

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

Безперервна оцінка в 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 дні
  • Базова оцінка: 1 день
  • Ітерації поліпшення: 2–4 тижні
  • Всього: 3–6 тижнів