Тестирование RAG до запуска: создаём синтетические goldens с DeepEval

Зачем оценивать RAG-пайплайн?

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

Установка зависимостей

В примере используется DeepEval для генерации синтетических тестовых наборов. Установите необходимые пакеты Python:

!pip install deepeval chromadb tiktoken pandas

Ключ OpenAI API

DeepEval использует внешние языковые модели для синтеза вопросов и ожидаемых ответов, поэтому для выполнения этого руководства потребуется ключ OpenAI API. Сгенерируйте ключ на странице управления ключами OpenAI и убедитесь, что аккаунт активирован (возможно, потребуется небольшая начальная оплата для разблокировки биллинга).

Подготовка исходного документа

Создайте переменную text с разнообразной фактической информацией по темам (биология, физика, история, космос, экология, медицина, вычисления, древние цивилизации). Synthesizer DeepEval разобьет текст на семантически связанные части, выберет полезные контексты и создаст синтетические “golden” пары (вход, ожидаемый_ответ) для оценки.

text = """
Crows are among the smartest birds, capable of using tools and recognizing human faces even after years.
In contrast, the archerfish displays remarkable precision, shooting jets of water to knock insects off branches.
Meanwhile, in the world of physics, superconductors can carry electric current with zero resistance -- a phenomenon
discovered over a century ago but still unlocking new technologies like quantum computers today.

Moving to history, the Library of Alexandria was once the largest center of learning, but much of its collection was
lost in fires and wars, becoming a symbol of human curiosity and fragility. In space exploration, the Voyager 1 probe,
launched in 1977, has now left the solar system, carrying a golden record that captures sounds and images of Earth.

Closer to home, the Amazon rainforest produces roughly 20% of the world's oxygen, while coral reefs -- often called the
"rainforests of the sea" -- support nearly 25% of all marine life despite covering less than 1% of the ocean floor.

In medicine, MRI scanners use strong magnetic fields and radio waves
to generate detailed images of organs without harmful radiation.

In computing, Moore's Law observed that the number of transistors
on microchips doubles roughly every two years, though recent advances
in AI chips have shifted that trend.

The Mariana Trench is the deepest part of Earth's oceans,
reaching nearly 11,000 meters below sea level, deeper than Mount Everest is tall.

Ancient civilizations like the Sumerians and Egyptians invented
mathematical systems thousands of years before modern algebra emerged.
"""
with open("example.txt", "w") as f:
    f.write(text)

Генерация синтетических данных для оценки

Используйте Synthesizer DeepEval для автоматической генерации синтетических goldens из документа. В примере выбран легковесный модельный вариант “gpt-4.1-nano” для создания вопросов, ожидаемых ответов и контекстных фрагментов, полученных из документа.

from deepeval.synthesizer import Synthesizer

synthesizer = Synthesizer(model="gpt-4.1-nano")

# Generate synthetic goldens from your document
synthesizer.generate_goldens_from_docs(
    document_paths=["example.txt"],
    include_expected_output=True
)

# Print generated results
for golden in synthesizer.synthetic_goldens[:3]:  
    print(golden, "\n")

Управление сложностью входных данных через EvolutionConfig

DeepEval позволяет эволюционировать и разнообразить входы, создавая более сложные проверочные случаи. Задайте веса для типов эволюций (REASONING, MULTICONTEXT, COMPARATIVE, HYPOTHETICAL, IN_BREADTH) и укажите, сколько стратегий эволюции применять к каждому фрагменту.

from deepeval.synthesizer.config import EvolutionConfig, Evolution

evolution_config = EvolutionConfig(
    evolutions={
        Evolution.REASONING: 1/5,
        Evolution.MULTICONTEXT: 1/5,
        Evolution.COMPARATIVE: 1/5,
        Evolution.HYPOTHETICAL: 1/5,
        Evolution.IN_BREADTH: 1/5,
    },
    num_evolutions=3
)

synthesizer = Synthesizer(evolution_config=evolution_config)
synthesizer.generate_goldens_from_docs(["example.txt"])

Зачем нужны синтетические goldens

Синтетические наборы позволяют получить базовую линию и организовать непрерывный цикл тестирования до появления реальных пользователей. Эволюционные goldens проверяют разные стили рассуждений, сравнения по нескольким контекстам и гипотетические сценарии. С метриками вроде grounding и coverage контекста вы сможете итеративно настраивать ретривер и модель генерации, снижая число галлюцинаций и повышая релевантность.

Интеграция в цикл непрерывного улучшения

После генерации goldens запускaйте их через RAG-пайплайн для измерения производительности (точность поиска, grounding, качество ответов). Используйте эти метрики для тонкой настройки ретривера, интерфейса между ретривером и моделью, а также стратегий формирования подсказок и контекста. Такой итеративный подход повышает уверенность в поведении системы в продакшне ещё до реальных запросов.

Ресурсы

На GitHub DeepEval доступны руководства, примеры кода и ноутбуки для воспроизведения и расширения примеров.