• Русский
  • Оценка RAG с помощью Ragas

    Системы Retrieval-Augmented Generation (RAG) объединяют компонент поиска и генератор. Оценка качества только по итоговому ответу часто недостаточна: ошибки могут возникать из-за нерелевантного или неполного поиска, генерации, отклоняющейся от источников, или из-за обоих факторов.

    Ragas (Retrieval-Augmented Generation Assessment) — это Python-фреймворк, который оценивает поведение RAG с помощью метрик достоверности контекста, релевантности ответа, качества поиска и других — в зависимости от включённых метрик и доступных столбцов в наборе для оценки.

    На этой странице основное внимание уделено прямому использованию SDK Ragas в ноутбуке или пакетной задаче. Интеграция с другими платформами оценки является опциональной и здесь не рассматривается.

    Что записывать для каждого примера оценки

    Типичная строка с одним ходом включает:

    ПолеНазначение
    user_inputЗапрос пользователя (или эквивалент).
    retrieved_contextsИзвлечённые фрагменты в виде списка строк для этой строки.
    responseВывод модели для оценки.
    referenceЭталонный ответ или ключевые факты; требуется только для некоторых метрик (например, recall контекста).

    Обзор метрик Ragas

    Ragas предоставляет большой каталог метрик. Для типичного прохода оценки RAG требуется только подмножество. Каждая метрика ожидает определённые столбцы набора данных (например, question, contexts, answer, ground_truth) и может требовать LLM, эмбеддинги, оба или ни того, ни другого. Имена и пути импорта меняются с релизами; уточняйте в документации Ragas metrics для установленной версии.

    Ниже приведены списки с кратким описанием назначения и распространённого использования; они не заменяют подробности API.

    Основные метрики RAG

    Эти метрики наиболее напрямую связаны с качеством retrieval-augmented generation и обычно являются первым набором для отслеживания:

    Если не указано иное, классы в этом разделе из ragas.metrics.collections.

    МетрикаКласс PythonТребуемые аргументыЦель оценки
    FaithfulnessFaithfulnessuser_input, retrieved_contexts, responseПроверка, поддерживаются ли утверждения в ответе извлечённым контекстом (контекстная достоверность).
    Answer relevancy / Response relevancyAnswerRelevancyuser_input, responseПроверка, отвечает ли сгенерированный ответ на запрос пользователя.
    Context precisionContextPrecisionuser_input, retrieved_contexts, referenceПроверка релевантности и полезности извлечённых фрагментов для ответа на запрос.
    Context recallContextRecalluser_input, retrieved_contexts, referenceПроверка, покрывают ли извлечённые контексты информацию, необходимую для правильного ответа.
    Context entity recallContextEntityRecallreference, retrieved_contextsПроверка наличия ключевых сущностей из эталона в извлечённых контекстах.
    Context utilizationContextUtilizationuser_input, response, retrieved_contextsНасколько извлечённый контекст фактически используется в ответе.

    Требования к полям и импортам могут варьироваться в зависимости от версии Ragas и варианта метрики. Проверяйте документацию для установленной версии на Ragas metrics documentation.

    Дополнительные метрики RAG

    Эти метрики полезны в специфических сценариях оценки, особенно при наличии эталонных ответов или необходимости проверки устойчивости:

    МетрикаКласс PythonТребуемые аргументыЦель оценки
    Answer correctnessAnswerCorrectnessuser_input, response, referenceСоответствие сгенерированного ответа эталонному.
    Answer similarity / Semantic similaritySemanticSimilarityresponse, referenceСемантическая близость между сгенерированным и эталонным ответами (на основе эмбеддингов).
    Factual correctnessFactualCorrectnessresponse, referenceФактическое соответствие эталону или ожидаемым фактам.
    Noise sensitivityNoiseSensitivityuser_input, response, reference, retrieved_contextsУстойчивость при добавлении отвлекающих факторов или шума в контекст или входные данные.

    Для метрик, слабо связанных с ядром RAG (например, общие метрики перекрытия текста, метрики на основе рубрик, метрики агентов/инструментов, SQL-метрики или мультимодальные метрики), смотрите Ragas metrics documentation.

    Выбор минимального набора RAG

    Практическим стандартом для многих бенчмарков RAG является набор: faithfulness, answer relevancy, context precision и context recall (recall и некоторые варианты precision требуют ground_truth или эквивалента). Добавляйте answer correctness или semantic similarity, если доступен эталонный ответ. Подбирайте метрики в соответствии с доступными столбцами набора данных и ограничениями по стоимости (метрики с LLM работают медленнее и дороже).

    Вызов SDK Ragas

    Для современного использования Ragas создавайте экземпляры метрик из ragas.metrics.collections и оценивайте каждую строку с помощью ascore() (или score() в синхронных скриптах).

    1. Подготовьте OpenAI-совместимых клиентов (AsyncOpenAI) для LLM и эмбеддингов, затем подключите llm_factory и OpenAIEmbeddings (см. пример ноутбука для настройки через переменные окружения).

    2. Создайте экземпляры метрик с явными зависимостями (llm, embeddings там, где требуется).

    3. Итеративно проходите по строкам и вызывайте metric.ascore(...) с аргументами, специфичными для метрики.

      from openai import AsyncOpenAI
      from ragas.embeddings import OpenAIEmbeddings
      from ragas.llms import llm_factory
      from ragas.metrics.collections import AnswerRelevancy, Faithfulness
      
      llm_client = AsyncOpenAI(
          api_key="...",
          base_url="https://your-openai-compatible-endpoint/v1",  # или None для провайдера по умолчанию
      )
      embed_client = AsyncOpenAI(
          api_key="...",  # часто тот же ключ, что и для LLM при использовании одного шлюза
          base_url="https://your-embedding-endpoint/v1",  # опционально; может совпадать с llm_client
      )
      
      llm = llm_factory("your-llm-model", client=llm_client)
      embeddings = OpenAIEmbeddings(model="your-embedding-model", client=embed_client)
      
      faithfulness = Faithfulness(llm=llm)
      answer_relevancy = AnswerRelevancy(llm=llm, embeddings=embeddings)

    При выборе метрик следующие различия влияют на подготовку вызова оценки:

    АспектКак меняется
    Требуемые столбцыКаждая метрика ожидает определённые аргументы (например, reference для многих метрик с эталоном). Отсутствие полей вызывает ошибки валидации до начала оценки.
    LLM, эмбеддинги или без нихМетрики на основе LLM требуют языковую модель; эмбеддинговые метрики — модель эмбеддингов; лексические метрики могут не требовать моделей. В современном API зависимости передаются явно при создании экземпляров.
    Варианты метрикРазные классы реализуют один и тот же замысел с разными алгоритмами (например, LLM vs без LLM для context precision). Импорты и выбор метрик меняются соответственно.
    Настройка конструктораРубрики, критики аспектов, дискретные/числовые кастомные метрики или специализированные варианты faithfulness требуют аргументов при создании или дополнительной настройки.
    Данные с ID или с несколькими ходамиМетрики precision/recall на основе ID ожидают столбцы ID; метрики для нескольких ходов или агентов/инструментов требуют другой структуры данных. Это выходит за рамки однократного потока ноутбука.

    На практике основная задача — согласовать поля набора данных и выбор метрик, затем оценить строки выбранными экземплярами метрик.

    Требования

    • Рекомендуется Python 3.10+.
    • Доступ в сеть к API LLM (и к API эмбеддингов для метрик, требующих эмбеддинги). Пример ноутбука предполагает настройку, совместимую с OpenAI, и поддерживает конфигурацию учётных данных и опционального базового URL для совместимых шлюзов.
    • Учёт того, что оценка делает много вызовов модели; стоимость и задержка масштабируются с количеством строк и метрик.
    • Фиксация версии: API Ragas и классы метрик меняются между релизами. Для воспроизводимых бенчмарков фиксируйте версии ragas (и связанных пакетов) в окружении или ноутбуке; см. закомментированную строку установки в примере ноутбука.

    Рабочий ноутбук

    Скачайте и откройте ноутбук в JupyterLab или другой среде Jupyter:

    Ноутбук начинается с краткого обзора SDK, сосредоточенного на современных метриках (ragas.metrics.collections) и явной настройке LLM/эмбеддингов. Каноническое объяснение — раздел Calling the Ragas SDK на этой странице.

    В ноутбуке:

    1. Устанавливаются зависимости (с опциональной закомментированной фиксацией версии для воспроизводимости).
    2. Создаётся небольшой datasets.Dataset с полями user_input, retrieved_contexts, response и reference.
    3. Выполняется базовая оценка с помощью faithfulness и answer relevancy с использованием современных классов метрик.
    4. Добавляются дополнительные метрики, ориентированные на поиск (context precision и context recall) с использованием современных классов метрик.
    5. Показываются агрегированные и построчные результаты, затем краткий раздел по устранению неполадок.

    Устранение неполадок

    • Настройка учётных данных или эндпоинта: настройте учётные данные API LLM (и опциональный базовый URL для совместимых шлюзов). Если эмбеддинги используют отдельный эндпоинт, настройте учётные данные для эмбеддингов и передайте отдельные клиенты AsyncOpenAI в llm_factory и OpenAIEmbeddings.
    • Ошибки валидации набора данных: проверьте требуемые аргументы для выбранных метрик и убедитесь, что ключи набора данных соответствуют современным примерам (user_input, retrieved_contexts, response, reference).
    • Асинхронное выполнение в ноутбуке: пример ноутбука использует await metric.ascore(...). Для синхронных скриптов используйте metric.score(...) или оберните асинхронный код в asyncio.run(...).
    • Предупреждения, связанные с версией: классы метрик и их сигнатуры могут меняться между версиями Ragas. Фиксируйте версии пакетов для воспроизводимых запусков и сверяйтесь с документацией для установленной версии.

    Интерпретация результатов

    • Сравнивайте оценки только при использовании одного и того же набора данных и конфигурации оценки (одинаковый LLM, эмбеддинги и подсказки); иначе сдвиги могут отражать изменения конфигурации, а не качество RAG.
    • Для оценки, ориентированной на поиск, по возможности используйте ту же модель эмбеддингов, что и в продакшен-ретривере RAG, чтобы уменьшить дрейф метрик из-за несовпадения пространств эмбеддингов.
    • Используйте агрегированные оценки для отслеживания тенденций или контроля качества, а построчные — для диагностики (например, отсутствующий контекст, галлюцинации или нерелевантный поиск). Рассматривайте значения метрик как направляющие сигналы, а не абсолютную истину.

    Дополнительные материалы