Как оценить ваш пайплайн RAG с помощью синтетических данных?

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

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

Поскольку начальное тестирование не имеет необходимых данных от реальных пользователей для создания базового уровня, практическим решением являются синтетические наборы данных для оценки. В этой статье показано, как создать реалистичные тестовые примеры с помощью DeepEval — фреймворка с открытым исходным кодом, который упрощает оценку LLM и позволяет вам протестировать ваш пайплайн RAG до его запуска.

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

`!pip install deepeval chromadb tiktoken pandas`

API-ключ OpenAI

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

Если вы новичок на платформе OpenAI, вам может потребоваться добавить платёжные данные и внести небольшой минимальный платёж (обычно 5 долларов), чтобы полностью активировать доступ к API.

Определение текста

На этом этапе мы вручную создаём переменную text, которая будет служить нашим исходным документом для генерации синтетических данных для оценки.

Этот текст объединяет разнообразный фактический контент из разных областей — включая биологию, физику, историю, освоение космоса, экологию, медицину, вычислительную технику и древние цивилизации — чтобы у LLM был богатый и разнообразный материал для работы.

Позже синтезатор DeepEval:
* разделит этот текст на семантически согласованные фрагменты;
* выберет значимые контексты, подходящие для генерации вопросов;
* создаст синтетические «золотые» пары (input, expected_output), которые имитируют запросы реальных пользователей и идеальные ответы LLM.

После определения переменной text мы сохраняем её в файле .txt, чтобы DeepEval мог прочитать и обработать её позже. Вы можете использовать любой другой текстовый документ по вашему выбору — например, статью из Википедии, резюме исследования или технический блог — если он содержит информативный и хорошо структурированный контент.

`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» выбрана из-за её лёгкости. Мы предоставляем путь к нашему документу (example.txt), который содержит фактический и описательный контент по различным темам, таким как физика, экология и вычислительная техника.

Синтезатор обрабатывает этот текст, чтобы создать осмысленные пары вопросов и ответов (goldens), которые позже можно будет использовать для тестирования и оценки производительности LLM по задачам понимания или извлечения информации.

Скрипт успешно генерирует до шести синтетических goldens. Сгенерированные примеры весьма богаты — например, один запрос просит «Оценить когнитивные способности врановых в задачах распознавания лиц», а другой исследует «Вклад Амазонки в производство кислорода и её роль в экосистемах».

Каждый вывод включает в себя связный ожидаемый ответ и фрагменты контекста, полученные непосредственно из документа, демонстрируя, как DeepEval может автоматически создавать высококачественные синтетические наборы данных для оценки LLM.

Использование EvolutionConfig для управления сложностью ввода

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

Параметр num_evolutions указывает, сколько стратегий эволюции будет применено к каждому фрагменту текста, что позволяет синтезировать несколько точек зрения на основе одного и того же исходного материала. Этот подход помогает создавать более богатые наборы данных для оценки, которые проверяют способность LLM обрабатывать сложные и многогранные запросы.

Этот метод позволяет обойти первоначальное препятствие, связанное с отсутствием взаимодействия с реальными пользователями. Используя синтезатор DeepEval, особенно при работе с EvolutionConfig, мы выходим далеко за рамки простых пар «вопрос-ответ».

Фреймворк позволяет нам создавать строгие тестовые случаи, которые исследуют пределы системы RAG, охватывая всё: от сравнений в нескольких контекстах и гипотетических сценариев до сложных рассуждений.

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

1. Какие преимущества даёт использование синтетических данных для оценки пайплайна RAG?

Использование синтетических данных для оценки пайплайна RAG позволяет провести тестирование до запуска системы, когда ещё нет данных от реальных пользователей. Это помогает убедиться в эффективности поискового механизма, достоверности ответов LLM и оптимальности размера контекста.

2. Какие инструменты и библиотеки используются для создания синтетических данных в статье?

В статье используется фреймворк DeepEval — инструмент с открытым исходным кодом, который упрощает оценку LLM и позволяет тестировать пайплайн RAG. Для работы DeepEval требуется API-ключ OpenAI, а также библиотеки chromadb, tiktoken и pandas.

3. Как создаётся исходный документ для генерации синтетических данных?

Исходный документ для генерации синтетических данных создаётся вручную. В статье предлагается объединить разнообразный фактический контент из разных областей, например, биологии, физики, истории, освоения космоса, экологии, медицины, вычислительной техники и древних цивилизаций. Этот текст сохраняется в файле .txt, чтобы DeepEval мог его прочитать и обработать.

4. Какие параметры используются для настройки сложности входных данных при генерации синтетических данных?

Для настройки сложности входных данных используется класс EvolutionConfig. Назначая веса различным типам эволюции, таким как REASONING, MULTICONTEXT, COMPARATIVE, HYPOTHETICAL и INBREADTH, можно влиять на то, как синтезатор DeepEval генерирует более сложные и разнообразные входные данные. Параметр numevolutions указывает, сколько стратегий эволюции будет применено к каждому фрагменту текста.

5. Какие типы вопросов и запросов можно сгенерировать с помощью синтезатора DeepEval?

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

Источник